diff --git a/core/llm/autodetect.ts b/core/llm/autodetect.ts index 2ccc325cfb..2bf3b10e16 100644 --- a/core/llm/autodetect.ts +++ b/core/llm/autodetect.ts @@ -105,6 +105,8 @@ const MODEL_SUPPORTS_IMAGES: RegExp[] = [ /\bgemma-?3(?!n)/, // gemma3 supports vision, but gemma3n doesn't! /\b(pali|med)gemma/, /qwen(.*)vl/, + /mistral-small/, + /mistral-medium/, ]; function modelSupportsImages( diff --git a/core/llm/llms/WatsonX.ts b/core/llm/llms/WatsonX.ts index 76dc897ad7..1d1d473dda 100644 --- a/core/llm/llms/WatsonX.ts +++ b/core/llm/llms/WatsonX.ts @@ -5,6 +5,7 @@ import { Chunk, CompletionOptions, LLMOptions, + TextMessagePart, ToolCallDelta, ToolResultChatMessage, } from "../../index.js"; @@ -103,11 +104,30 @@ class WatsonX extends BaseLLM { })); delete message_.toolCalls; delete message_.content; - } else if ( - message_.role === "user" && - typeof message_.content === "string" - ) { - message_.content = [{ type: "text", text: message_.content }]; + } else if (message_.role === "user") { + if (typeof message.content === "string") { + message_.content = [{ type: "text", text: message_.content }]; + } else { + return { + role: "user", + content: !message.content.some((item) => item.type !== "text") + ? message.content + .map((item) => (item as TextMessagePart).text) + .join("") || " " + : message.content.map((part) => { + if (part.type === "imageUrl") { + return { + type: "image_url" as const, + image_url: { + url: part.imageUrl.url, + detail: "auto" as const, + }, + }; + } + return part; + }), + }; + } } return message_; }