diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz
index ed3fc127b7..3d0991dde0 100644
Binary files a/tools/server/public/index.html.gz and b/tools/server/public/index.html.gz differ
diff --git a/tools/server/webui/src/lib/stores/agentic.svelte.ts b/tools/server/webui/src/lib/stores/agentic.svelte.ts
index a6dd8581e7..f8834f9df3 100644
--- a/tools/server/webui/src/lib/stores/agentic.svelte.ts
+++ b/tools/server/webui/src/lib/stores/agentic.svelte.ts
@@ -318,6 +318,12 @@ class AgenticStore {
const maxTurns = agenticConfig.maxTurns;
const maxToolPreviewLines = agenticConfig.maxToolPreviewLines;
+ // Resolve effective model for vision capability checks.
+ // In ROUTER mode, options.model is always set by the caller.
+ // In MODEL mode, options.model is undefined; use the single loaded model
+ // which carries modalities bridged from /props.
+ const effectiveModel = options.model || modelsStore.models[0]?.model || '';
+
for (let turn = 0; turn < maxTurns; turn++) {
this.updateSession(conversationId, { currentTurn: turn + 1 });
agenticTimings.turns = turn + 1;
@@ -571,14 +577,14 @@ class AgenticStore {
];
for (const attachment of attachments) {
if (attachment.type === AttachmentType.IMAGE) {
- if (modelsStore.modelSupportsVision(options.model ?? '')) {
+ if (modelsStore.modelSupportsVision(effectiveModel)) {
contentParts.push({
type: ContentPartType.IMAGE_URL,
image_url: { url: (attachment as DatabaseMessageExtraImageFile).base64Url }
});
} else {
console.info(
- `[AgenticStore] Skipping image attachment (model "${options.model}" does not support vision)`
+ `[AgenticStore] Skipping image attachment (model "${effectiveModel}" does not support vision)`
);
}
}