Skip to content

Commit a2fa105

Browse files
committed
Fix tests for vision, work on vectorizer
1 parent 41aeac4 commit a2fa105

File tree

19 files changed

+411
-96
lines changed

19 files changed

+411
-96
lines changed

app/backend/prepdocs.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ async def setup_search_info(
6262
azure_openai_searchagent_deployment: Union[str, None] = None,
6363
azure_openai_searchagent_model: Union[str, None] = None,
6464
search_key: Union[str, None] = None,
65+
azure_vision_endpoint: Union[str, None] = None,
6566
) -> SearchInfo:
6667
search_creds: Union[AsyncTokenCredential, AzureKeyCredential] = (
6768
azure_credential if search_key is None else AzureKeyCredential(search_key)
@@ -79,6 +80,7 @@ async def setup_search_info(
7980
azure_openai_endpoint=azure_openai_endpoint,
8081
azure_openai_searchagent_model=azure_openai_searchagent_model,
8182
azure_openai_searchagent_deployment=azure_openai_searchagent_deployment,
83+
azure_vision_endpoint=azure_vision_endpoint,
8284
)
8385

8486

@@ -455,6 +457,7 @@ async def main(strategy: Strategy, setup_index: bool = True):
455457
azure_openai_searchagent_model=os.getenv("AZURE_OPENAI_SEARCHAGENT_MODEL"),
456458
azure_credential=azd_credential,
457459
search_key=clean_key_if_exists(args.searchkey),
460+
azure_vision_endpoint=os.getenv("AZURE_VISION_ENDPOINT"),
458461
)
459462
)
460463
blob_manager = setup_blob_manager(

app/backend/prepdocslib/searchmanager.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from typing import Optional
55

66
from azure.search.documents.indexes.models import (
7+
AIServicesVisionParameters,
8+
AIServicesVisionVectorizer,
79
AzureOpenAIVectorizer,
810
AzureOpenAIVectorizerParameters,
911
BinaryQuantizationCompression,
@@ -152,9 +154,20 @@ async def create_index(self):
152154
name="images_hnsw_config",
153155
parameters=HnswParameters(metric="cosine"),
154156
)
157+
158+
# Create the AI Vision vectorizer for image embeddings
159+
image_vectorizer = AIServicesVisionVectorizer(
160+
vectorizer_name="images-vision-vectorizer",
161+
ai_services_vision_parameters=AIServicesVisionParameters(
162+
resource_uri=self.search_info.azure_vision_endpoint,
163+
model_version="2023-04-15",
164+
),
165+
)
166+
155167
image_vector_search_profile = VectorSearchProfile(
156168
name="images_embedding_profile",
157169
algorithm_configuration_name=image_vector_algorithm.name,
170+
vectorizer_name=image_vectorizer.vectorizer_name,
158171
)
159172
images_field = SearchField(
160173
name="images",
@@ -282,7 +295,8 @@ async def create_index(self):
282295
raise ValueError("Image search profile and algorithm must be set")
283296
vector_search_profiles.append(image_vector_search_profile)
284297
vector_algorithms.append(image_vector_algorithm)
285-
# TODO: Add image vectorizer if needed
298+
# Add image vectorizer to vectorizers list
299+
vectorizers.append(image_vectorizer)
286300

287301
index = SearchIndex(
288302
name=self.search_info.index_name,
@@ -366,6 +380,9 @@ async def create_index(self):
366380
if existing_index.vector_search.algorithms is None:
367381
existing_index.vector_search.algorithms = []
368382
existing_index.vector_search.algorithms.append(image_vector_algorithm)
383+
if existing_index.vector_search.vectorizers is None:
384+
existing_index.vector_search.vectorizers = []
385+
existing_index.vector_search.vectorizers.append(image_vectorizer)
369386
await search_index_client.create_or_update_index(existing_index)
370387

371388
if existing_index.semantic_search:
@@ -408,6 +425,7 @@ async def create_index(self):
408425
"Can't add vectorizer to search index %s since no Azure OpenAI embeddings service is defined",
409426
self.search_info,
410427
)
428+
411429
if self.search_info.use_agentic_retrieval and self.search_info.agent_name:
412430
await self.create_agent()
413431

app/backend/prepdocslib/strategy.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def __init__(
2727
azure_openai_searchagent_model: Optional[str] = None,
2828
azure_openai_searchagent_deployment: Optional[str] = None,
2929
azure_openai_endpoint: Optional[str] = None,
30+
azure_vision_endpoint: Optional[str] = None,
3031
):
3132
self.endpoint = endpoint
3233
self.credential = credential
@@ -37,6 +38,7 @@ def __init__(
3738
self.azure_openai_searchagent_model = azure_openai_searchagent_model
3839
self.azure_openai_searchagent_deployment = azure_openai_searchagent_deployment
3940
self.azure_openai_endpoint = azure_openai_endpoint
41+
self.azure_vision_endpoint = azure_vision_endpoint
4042

4143
def create_search_client(self) -> SearchClient:
4244
return SearchClient(endpoint=self.endpoint, index_name=self.index_name, credential=self.credential)

tests/mocks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def __init__(self, text, highlights=None, additional_properties=None):
8686
class MockAsyncSearchResultsIterator:
8787
def __init__(self, search_text, vector_queries: Optional[list[VectorQuery]]):
8888
if search_text == "interest rates" or (
89-
vector_queries and any([vector.fields == "images/embeddings" for vector in vector_queries])
89+
vector_queries and any([vector.fields == "images/embedding" for vector in vector_queries])
9090
):
9191
self.data = [
9292
[

tests/snapshots/test_app/test_ask_rtr_hybrid/client1/result.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"props": {
1616
"filter": null,
1717
"top": 3,
18-
"use_image_embeddings": true,
19-
"use_image_sources": true,
18+
"use_image_embeddings": false,
19+
"use_image_sources": false,
2020
"use_query_rewriting": false,
2121
"use_semantic_captions": false,
2222
"use_semantic_ranker": false,

0 commit comments

Comments
 (0)