Skip to content

Commit b55ca88

Browse files
committed
Prepare change for multimodal, rm old vision approach stuff
1 parent c4ef3be commit b55ca88

20 files changed

+71
-757
lines changed

.azdo/pipelines/azure-dev.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,6 @@ steps:
7777
AZURE_OPENAI_EMB_DEPLOYMENT_VERSION: $(AZURE_OPENAI_EMB_DEPLOYMENT_VERSION)
7878
AZURE_OPENAI_EMB_DEPLOYMENT_SKU: $(AZURE_OPENAI_EMB_DEPLOYMENT_SKU)
7979
AZURE_OPENAI_EMB_DIMENSIONS: $(AZURE_OPENAI_EMB_DIMENSIONS)
80-
AZURE_OPENAI_GPT4V_MODEL: $(AZURE_OPENAI_GPT4V_MODEL)
81-
AZURE_OPENAI_GPT4V_DEPLOYMENT: $(AZURE_OPENAI_GPT4V_DEPLOYMENT)
82-
AZURE_OPENAI_GPT4V_DEPLOYMENT_CAPACITY: $(AZURE_OPENAI_GPT4V_DEPLOYMENT_CAPACITY)
83-
AZURE_OPENAI_GPT4V_DEPLOYMENT_VERSION: $(AZURE_OPENAI_GPT4V_DEPLOYMENT_VERSION)
84-
AZURE_OPENAI_GPT4V_DEPLOYMENT_SKU: $(AZURE_OPENAI_GPT4V_DEPLOYMENT_SKU)
8580
AZURE_OPENAI_DISABLE_KEYS: $(AZURE_OPENAI_DISABLE_KEYS)
8681
OPENAI_HOST: $(OPENAI_HOST)
8782
OPENAI_API_KEY: $(OPENAI_API_KEY)
@@ -91,7 +86,7 @@ steps:
9186
AZURE_APPLICATION_INSIGHTS_DASHBOARD: $(AZURE_APPLICATION_INSIGHTS_DASHBOARD)
9287
AZURE_LOG_ANALYTICS: $(AZURE_LOG_ANALYTICS)
9388
USE_VECTORS: $(USE_VECTORS)
94-
USE_GPT4V: $(USE_GPT4V)
89+
USE_MULTIMODAL: $(USE_MULTIMODAL)
9590
AZURE_VISION_ENDPOINT: $(AZURE_VISION_ENDPOINT)
9691
VISION_SECRET_NAME: $(VISION_SECRET_NAME)
9792
AZURE_COMPUTER_VISION_SERVICE: $(AZURE_COMPUTER_VISION_SERVICE)

.github/workflows/azure-dev.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,6 @@ jobs:
6767
AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY: ${{ vars.AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY }}
6868
AZURE_OPENAI_EMB_DEPLOYMENT_VERSION: ${{ vars.AZURE_OPENAI_EMB_DEPLOYMENT_VERSION }}
6969
AZURE_OPENAI_EMB_DIMENSIONS: ${{ vars.AZURE_OPENAI_EMB_DIMENSIONS }}
70-
AZURE_OPENAI_GPT4V_MODEL: ${{ vars.AZURE_OPENAI_GPT4V_MODEL }}
71-
AZURE_OPENAI_GPT4V_DEPLOYMENT: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT }}
72-
AZURE_OPENAI_GPT4V_DEPLOYMENT_CAPACITY: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT_CAPACITY }}
73-
AZURE_OPENAI_GPT4V_DEPLOYMENT_VERSION: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT_VERSION }}
74-
AZURE_OPENAI_GPT4V_DEPLOYMENT_SKU: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT_SKU }}
7570
USE_EVAL: ${{ vars.USE_EVAL }}
7671
AZURE_OPENAI_EVAL_MODEL: ${{ vars.AZURE_OPENAI_EVAL_MODEL }}
7772
AZURE_OPENAI_EVAL_MODEL_VERSION: ${{ vars.AZURE_OPENAI_EVAL_MODEL_VERSION }}
@@ -87,7 +82,7 @@ jobs:
8782
AZURE_APPLICATION_INSIGHTS_DASHBOARD: ${{ vars.AZURE_APPLICATION_INSIGHTS_DASHBOARD }}
8883
AZURE_LOG_ANALYTICS: ${{ vars.AZURE_LOG_ANALYTICS }}
8984
USE_VECTORS: ${{ vars.USE_VECTORS }}
90-
USE_GPT4V: ${{ vars.USE_GPT4V }}
85+
USE_MULTIMODAL: ${{ vars.USE_MULTIMODAL }}
9186
AZURE_VISION_ENDPOINT: ${{ vars.AZURE_VISION_ENDPOINT }}
9287
VISION_SECRET_NAME: ${{ vars.VISION_SECRET_NAME }}
9388
ENABLE_LANGUAGE_PICKER: ${{ vars.ENABLE_LANGUAGE_PICKER }}

.github/workflows/evaluate.yaml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,6 @@ jobs:
6262
AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY: ${{ vars.AZURE_OPENAI_EMB_DEPLOYMENT_CAPACITY }}
6363
AZURE_OPENAI_EMB_DEPLOYMENT_VERSION: ${{ vars.AZURE_OPENAI_EMB_DEPLOYMENT_VERSION }}
6464
AZURE_OPENAI_EMB_DIMENSIONS: ${{ vars.AZURE_OPENAI_EMB_DIMENSIONS }}
65-
AZURE_OPENAI_GPT4V_MODEL: ${{ vars.AZURE_OPENAI_GPT4V_MODEL }}
66-
AZURE_OPENAI_GPT4V_DEPLOYMENT: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT }}
67-
AZURE_OPENAI_GPT4V_DEPLOYMENT_CAPACITY: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT_CAPACITY }}
68-
AZURE_OPENAI_GPT4V_DEPLOYMENT_VERSION: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT_VERSION }}
69-
AZURE_OPENAI_GPT4V_DEPLOYMENT_SKU: ${{ vars.AZURE_OPENAI_GPT4V_DEPLOYMENT_SKU }}
7065
USE_EVAL: ${{ vars.USE_EVAL }}
7166
AZURE_OPENAI_EVAL_MODEL: ${{ vars.AZURE_OPENAI_EVAL_MODEL }}
7267
AZURE_OPENAI_EVAL_MODEL_VERSION: ${{ vars.AZURE_OPENAI_EVAL_MODEL_VERSION }}
@@ -82,7 +77,7 @@ jobs:
8277
AZURE_APPLICATION_INSIGHTS_DASHBOARD: ${{ vars.AZURE_APPLICATION_INSIGHTS_DASHBOARD }}
8378
AZURE_LOG_ANALYTICS: ${{ vars.AZURE_LOG_ANALYTICS }}
8479
USE_VECTORS: ${{ vars.USE_VECTORS }}
85-
USE_GPT4V: ${{ vars.USE_GPT4V }}
80+
USE_MULTIMODAL: ${{ vars.USE_MULTIMODAL }}
8681
AZURE_VISION_ENDPOINT: ${{ vars.AZURE_VISION_ENDPOINT }}
8782
VISION_SECRET_NAME: ${{ vars.VISION_SECRET_NAME }}
8883
ENABLE_LANGUAGE_PICKER: ${{ vars.ENABLE_LANGUAGE_PICKER }}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ The repo includes sample data so it's ready to try end to end. In this sample ap
6161
- Renders citations and thought process for each answer
6262
- Includes settings directly in the UI to tweak the behavior and experiment with options
6363
- Integrates Azure AI Search for indexing and retrieval of documents, with support for [many document formats](/docs/data_ingestion.md#supported-document-formats) as well as [integrated vectorization](/docs/data_ingestion.md#overview-of-integrated-vectorization)
64-
- Optional usage of [GPT-4 with vision](/docs/gpt4v.md) to reason over image-heavy documents
64+
- Optional usage of [multimodal models](/docs/multimodal.md) to reason over image-heavy documents
6565
- Optional addition of [speech input/output](/docs/deploy_features.md#enabling-speech-inputoutput) for accessibility
6666
- Optional automation of [user login and data access](/docs/login_and_acl.md) via Microsoft Entra
6767
- Performance tracing and monitoring with Application Insights
@@ -92,7 +92,7 @@ However, you can try the [Azure pricing calculator](https://azure.com/e/e3490de2
9292
- Azure AI Search: Basic tier, 1 replica, free level of semantic search. Pricing per hour. [Pricing](https://azure.microsoft.com/pricing/details/search/)
9393
- Azure Blob Storage: Standard tier with ZRS (Zone-redundant storage). Pricing per storage and read operations. [Pricing](https://azure.microsoft.com/pricing/details/storage/blobs/)
9494
- Azure Cosmos DB: Only provisioned if you enabled [chat history with Cosmos DB](docs/deploy_features.md#enabling-persistent-chat-history-with-azure-cosmos-db). Serverless tier. Pricing per request unit and storage. [Pricing](https://azure.microsoft.com/pricing/details/cosmos-db/)
95-
- Azure AI Vision: Only provisioned if you enabled [GPT-4 with vision](docs/gpt4v.md). Pricing per 1K transactions. [Pricing](https://azure.microsoft.com/pricing/details/cognitive-services/computer-vision/)
95+
- Azure AI Vision: Only provisioned if you enabled [multimodal approach](docs/multimodal.md). Pricing per 1K transactions. [Pricing](https://azure.microsoft.com/pricing/details/cognitive-services/computer-vision/)
9696
- Azure AI Content Understanding: Only provisioned if you enabled [media description](docs/deploy_features.md#enabling-media-description-with-azure-content-understanding). Pricing per 1K images. [Pricing](https://azure.microsoft.com/pricing/details/content-understanding/)
9797
- Azure Monitor: Pay-as-you-go tier. Costs based on data ingested. [Pricing](https://azure.microsoft.com/pricing/details/monitor/)
9898

@@ -255,7 +255,7 @@ You can find extensive documentation in the [docs](docs/README.md) folder:
255255
- [Enabling optional features](docs/deploy_features.md)
256256
- [All features](docs/deploy_features.md)
257257
- [Login and access control](docs/login_and_acl.md)
258-
- [GPT-4 Turbo with Vision](docs/gpt4v.md)
258+
- [Multimodal](docs/multimodal.md)
259259
- [Reasoning](docs/reasoning.md)
260260
- [Private endpoints](docs/deploy_private.md)
261261
- [Sharing deployment environments](docs/sharing_environments.md)

app/backend/app.py

Lines changed: 9 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -52,25 +52,20 @@
5252

5353
from approaches.approach import Approach
5454
from approaches.chatreadretrieveread import ChatReadRetrieveReadApproach
55-
from approaches.chatreadretrievereadvision import ChatReadRetrieveReadVisionApproach
5655
from approaches.promptmanager import PromptyManager
5756
from approaches.retrievethenread import RetrieveThenReadApproach
58-
from approaches.retrievethenreadvision import RetrieveThenReadVisionApproach
5957
from chat_history.cosmosdb import chat_history_cosmosdb_bp
6058
from config import (
6159
CONFIG_AGENT_CLIENT,
6260
CONFIG_AGENTIC_RETRIEVAL_ENABLED,
6361
CONFIG_ASK_APPROACH,
64-
CONFIG_ASK_VISION_APPROACH,
6562
CONFIG_AUTH_CLIENT,
6663
CONFIG_BLOB_CONTAINER_CLIENT,
6764
CONFIG_CHAT_APPROACH,
6865
CONFIG_CHAT_HISTORY_BROWSER_ENABLED,
6966
CONFIG_CHAT_HISTORY_COSMOS_ENABLED,
70-
CONFIG_CHAT_VISION_APPROACH,
7167
CONFIG_CREDENTIAL,
7268
CONFIG_DEFAULT_REASONING_EFFORT,
73-
CONFIG_GPT4V_DEPLOYED,
7469
CONFIG_INGESTER,
7570
CONFIG_LANGUAGE_PICKER_ENABLED,
7671
CONFIG_OPENAI_CLIENT,
@@ -185,15 +180,8 @@ async def ask(auth_claims: dict[str, Any]):
185180
context = request_json.get("context", {})
186181
context["auth_claims"] = auth_claims
187182
try:
188-
use_gpt4v = context.get("overrides", {}).get("use_gpt4v", False)
189-
approach: Approach
190-
if use_gpt4v and CONFIG_ASK_VISION_APPROACH in current_app.config:
191-
approach = cast(Approach, current_app.config[CONFIG_ASK_VISION_APPROACH])
192-
else:
193-
approach = cast(Approach, current_app.config[CONFIG_ASK_APPROACH])
194-
r = await approach.run(
195-
request_json["messages"], context=context, session_state=request_json.get("session_state")
196-
)
183+
approach: Approach = cast(Approach, current_app.config[CONFIG_ASK_APPROACH])
184+
r = await approach.run(request_json["messages"], context=context, session_state=request_json.get("session_state"))
197185
return jsonify(r)
198186
except Exception as error:
199187
return error_response(error, "/ask")
@@ -224,12 +212,7 @@ async def chat(auth_claims: dict[str, Any]):
224212
context = request_json.get("context", {})
225213
context["auth_claims"] = auth_claims
226214
try:
227-
use_gpt4v = context.get("overrides", {}).get("use_gpt4v", False)
228-
approach: Approach
229-
if use_gpt4v and CONFIG_CHAT_VISION_APPROACH in current_app.config:
230-
approach = cast(Approach, current_app.config[CONFIG_CHAT_VISION_APPROACH])
231-
else:
232-
approach = cast(Approach, current_app.config[CONFIG_CHAT_APPROACH])
215+
approach: Approach = cast(Approach, current_app.config[CONFIG_CHAT_APPROACH])
233216

234217
# If session state is provided, persists the session state,
235218
# else creates a new session_id depending on the chat history options enabled.
@@ -258,12 +241,7 @@ async def chat_stream(auth_claims: dict[str, Any]):
258241
context = request_json.get("context", {})
259242
context["auth_claims"] = auth_claims
260243
try:
261-
use_gpt4v = context.get("overrides", {}).get("use_gpt4v", False)
262-
approach: Approach
263-
if use_gpt4v and CONFIG_CHAT_VISION_APPROACH in current_app.config:
264-
approach = cast(Approach, current_app.config[CONFIG_CHAT_VISION_APPROACH])
265-
else:
266-
approach = cast(Approach, current_app.config[CONFIG_CHAT_APPROACH])
244+
approach: Approach = cast(Approach, current_app.config[CONFIG_CHAT_APPROACH])
267245

268246
# If session state is provided, persists the session state,
269247
# else creates a new session_id depending on the chat history options enabled.
@@ -297,7 +275,7 @@ def auth_setup():
297275
def config():
298276
return jsonify(
299277
{
300-
"showGPT4VOptions": current_app.config[CONFIG_GPT4V_DEPLOYED],
278+
"showMultimodalOption": current_app.config[CONFIG_MULTIMODAL_ENABLED],
301279
"showSemanticRankerOption": current_app.config[CONFIG_SEMANTIC_RANKER_DEPLOYED],
302280
"showQueryRewritingOption": current_app.config[CONFIG_QUERY_REWRITING_ENABLED],
303281
"showReasoningEffortOption": current_app.config[CONFIG_REASONING_EFFORT_ENABLED],
@@ -441,8 +419,6 @@ async def setup_clients():
441419
OPENAI_REASONING_EFFORT = os.getenv("AZURE_OPENAI_REASONING_EFFORT")
442420
# Used with Azure OpenAI deployments
443421
AZURE_OPENAI_SERVICE = os.getenv("AZURE_OPENAI_SERVICE")
444-
AZURE_OPENAI_GPT4V_DEPLOYMENT = os.environ.get("AZURE_OPENAI_GPT4V_DEPLOYMENT")
445-
AZURE_OPENAI_GPT4V_MODEL = os.environ.get("AZURE_OPENAI_GPT4V_MODEL")
446422
AZURE_OPENAI_CHATGPT_DEPLOYMENT = (
447423
os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT") if OPENAI_HOST.startswith("azure") else None
448424
)
@@ -479,7 +455,7 @@ async def setup_clients():
479455
AZURE_SPEECH_SERVICE_LOCATION = os.getenv("AZURE_SPEECH_SERVICE_LOCATION")
480456
AZURE_SPEECH_SERVICE_VOICE = os.getenv("AZURE_SPEECH_SERVICE_VOICE") or "en-US-AndrewMultilingualNeural"
481457

482-
USE_GPT4V = os.getenv("USE_GPT4V", "").lower() == "true"
458+
USE_MULTIMODAL = os.getenv("USE_MULTIMODAL", "").lower() == "true"
483459
USE_USER_UPLOAD = os.getenv("USE_USER_UPLOAD", "").lower() == "true"
484460
ENABLE_LANGUAGE_PICKER = os.getenv("ENABLE_LANGUAGE_PICKER", "").lower() == "true"
485461
USE_SPEECH_INPUT_BROWSER = os.getenv("USE_SPEECH_INPUT_BROWSER", "").lower() == "true"
@@ -575,7 +551,7 @@ async def setup_clients():
575551
document_intelligence_service=os.getenv("AZURE_DOCUMENTINTELLIGENCE_SERVICE"),
576552
local_pdf_parser=os.getenv("USE_LOCAL_PDF_PARSER", "").lower() == "true",
577553
local_html_parser=os.getenv("USE_LOCAL_HTML_PARSER", "").lower() == "true",
578-
search_images=USE_GPT4V,
554+
search_images=USE_MULTIMODAL,
579555
)
580556
search_info = await setup_search_info(
581557
search_service=AZURE_SEARCH_SERVICE, index_name=AZURE_SEARCH_INDEX, azure_credential=azure_credential
@@ -661,16 +637,14 @@ async def setup_clients():
661637
current_app.config[CONFIG_BLOB_CONTAINER_CLIENT] = blob_container_client
662638
current_app.config[CONFIG_AUTH_CLIENT] = auth_helper
663639

664-
current_app.config[CONFIG_GPT4V_DEPLOYED] = bool(USE_GPT4V)
665640
current_app.config[CONFIG_SEMANTIC_RANKER_DEPLOYED] = AZURE_SEARCH_SEMANTIC_RANKER != "disabled"
666641
current_app.config[CONFIG_QUERY_REWRITING_ENABLED] = (
667642
AZURE_SEARCH_QUERY_REWRITING == "true" and AZURE_SEARCH_SEMANTIC_RANKER != "disabled"
668643
)
669644
current_app.config[CONFIG_DEFAULT_REASONING_EFFORT] = OPENAI_REASONING_EFFORT
670645
current_app.config[CONFIG_REASONING_EFFORT_ENABLED] = OPENAI_CHATGPT_MODEL in Approach.GPT_REASONING_MODELS
671646
current_app.config[CONFIG_STREAMING_ENABLED] = (
672-
bool(USE_GPT4V)
673-
or OPENAI_CHATGPT_MODEL not in Approach.GPT_REASONING_MODELS
647+
OPENAI_CHATGPT_MODEL not in Approach.GPT_REASONING_MODELS
674648
or Approach.GPT_REASONING_MODELS[OPENAI_CHATGPT_MODEL].streaming
675649
)
676650
current_app.config[CONFIG_VECTOR_SEARCH_ENABLED] = os.getenv("USE_VECTORS", "").lower() != "false"
@@ -682,6 +656,7 @@ async def setup_clients():
682656
current_app.config[CONFIG_CHAT_HISTORY_BROWSER_ENABLED] = USE_CHAT_HISTORY_BROWSER
683657
current_app.config[CONFIG_CHAT_HISTORY_COSMOS_ENABLED] = USE_CHAT_HISTORY_COSMOS
684658
current_app.config[CONFIG_AGENTIC_RETRIEVAL_ENABLED] = USE_AGENTIC_RETRIEVAL
659+
current_app.config[CONFIG_MULTIMODAL_ENABLED] = USE_MULTIMODAL
685660

686661
prompt_manager = PromptyManager()
687662

@@ -732,68 +707,6 @@ async def setup_clients():
732707
reasoning_effort=OPENAI_REASONING_EFFORT,
733708
)
734709

735-
if USE_GPT4V:
736-
current_app.logger.info("USE_GPT4V is true, setting up GPT4V approach")
737-
if not AZURE_OPENAI_GPT4V_MODEL:
738-
raise ValueError("AZURE_OPENAI_GPT4V_MODEL must be set when USE_GPT4V is true")
739-
if any(
740-
model in Approach.GPT_REASONING_MODELS
741-
for model in [
742-
OPENAI_CHATGPT_MODEL,
743-
AZURE_OPENAI_GPT4V_MODEL,
744-
AZURE_OPENAI_CHATGPT_DEPLOYMENT,
745-
AZURE_OPENAI_GPT4V_DEPLOYMENT,
746-
]
747-
):
748-
raise ValueError(
749-
"AZURE_OPENAI_CHATGPT_MODEL and AZURE_OPENAI_GPT4V_MODEL must not be a reasoning model when USE_GPT4V is true"
750-
)
751-
752-
token_provider = get_bearer_token_provider(azure_credential, "https://cognitiveservices.azure.com/.default")
753-
754-
current_app.config[CONFIG_ASK_VISION_APPROACH] = RetrieveThenReadVisionApproach(
755-
search_client=search_client,
756-
openai_client=openai_client,
757-
blob_container_client=blob_container_client,
758-
auth_helper=auth_helper,
759-
vision_endpoint=AZURE_VISION_ENDPOINT,
760-
vision_token_provider=token_provider,
761-
gpt4v_deployment=AZURE_OPENAI_GPT4V_DEPLOYMENT,
762-
gpt4v_model=AZURE_OPENAI_GPT4V_MODEL,
763-
embedding_model=OPENAI_EMB_MODEL,
764-
embedding_deployment=AZURE_OPENAI_EMB_DEPLOYMENT,
765-
embedding_dimensions=OPENAI_EMB_DIMENSIONS,
766-
embedding_field=AZURE_SEARCH_FIELD_NAME_EMBEDDING,
767-
sourcepage_field=KB_FIELDS_SOURCEPAGE,
768-
content_field=KB_FIELDS_CONTENT,
769-
query_language=AZURE_SEARCH_QUERY_LANGUAGE,
770-
query_speller=AZURE_SEARCH_QUERY_SPELLER,
771-
prompt_manager=prompt_manager,
772-
)
773-
774-
current_app.config[CONFIG_CHAT_VISION_APPROACH] = ChatReadRetrieveReadVisionApproach(
775-
search_client=search_client,
776-
openai_client=openai_client,
777-
blob_container_client=blob_container_client,
778-
auth_helper=auth_helper,
779-
vision_endpoint=AZURE_VISION_ENDPOINT,
780-
vision_token_provider=token_provider,
781-
chatgpt_model=OPENAI_CHATGPT_MODEL,
782-
chatgpt_deployment=AZURE_OPENAI_CHATGPT_DEPLOYMENT,
783-
gpt4v_deployment=AZURE_OPENAI_GPT4V_DEPLOYMENT,
784-
gpt4v_model=AZURE_OPENAI_GPT4V_MODEL,
785-
embedding_model=OPENAI_EMB_MODEL,
786-
embedding_deployment=AZURE_OPENAI_EMB_DEPLOYMENT,
787-
embedding_dimensions=OPENAI_EMB_DIMENSIONS,
788-
embedding_field=AZURE_SEARCH_FIELD_NAME_EMBEDDING,
789-
sourcepage_field=KB_FIELDS_SOURCEPAGE,
790-
content_field=KB_FIELDS_CONTENT,
791-
query_language=AZURE_SEARCH_QUERY_LANGUAGE,
792-
query_speller=AZURE_SEARCH_QUERY_SPELLER,
793-
prompt_manager=prompt_manager,
794-
)
795-
796-
797710
@bp.after_app_serving
798711
async def close_clients():
799712
await current_app.config[CONFIG_SEARCH_CLIENT].close()

app/backend/approaches/chatreadretrieveread.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ async def run_until_final_call(
9292
else:
9393
extra_info = await self.run_search_approach(messages, overrides, auth_claims)
9494

95+
# If there are images, send the images to the model as well
9596
messages = self.prompt_manager.render_prompt(
9697
self.answer_prompt,
9798
self.get_system_prompt_variables(overrides.get("prompt_template"))
@@ -174,6 +175,8 @@ async def run_search_approach(
174175
vectors: list[VectorQuery] = []
175176
if use_vector_search:
176177
vectors.append(await self.compute_text_embedding(query_text))
178+
# Optionally add image embeddings if using multimodal approach
179+
vectors.append(await self.compute_image_embedding(query_text))
177180

178181
results = await self.search(
179182
top,

0 commit comments

Comments
 (0)