From 23052fae0fc0748e1d40527e2fadea4dceec4f58 Mon Sep 17 00:00:00 2001 From: Danil Nikolaev Date: Sat, 31 Jan 2026 17:54:45 +0300 Subject: [PATCH] separate ollama text & image models --- src/commands/ollama-chat.ts | 4 ++-- src/commands/ollama-get-model.ts | 32 ++++++++++++++++++++++---------- src/common/environment.ts | 4 +++- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/commands/ollama-chat.ts b/src/commands/ollama-chat.ts index bd9d3b5..b91e447 100644 --- a/src/commands/ollama-chat.ts +++ b/src/commands/ollama-chat.ts @@ -57,7 +57,7 @@ export class OllamaChat extends ChatCommand { if (imagesCount) { try { - const modelInfo = await chatCommands.find(c => c instanceof OllamaGetModel).loadModelInfo(); + const modelInfo = await chatCommands.find(c => c instanceof OllamaGetModel).loadImageModelInfo(); if (modelInfo) { const caps = modelInfo.capabilities || []; if (!caps.includes("vision")) { @@ -84,7 +84,7 @@ export class OllamaChat extends ChatCommand { }); const stream = await ollama.chat({ - model: Environment.OLLAMA_MODEL, + model: imagesCount ? Environment.OLLAMA_IMAGE_MODEL : Environment.OLLAMA_MODEL, stream: true, think: false, messages: chatMessages, diff --git a/src/commands/ollama-get-model.ts b/src/commands/ollama-get-model.ts index 095650d..7518ac7 100644 --- a/src/commands/ollama-get-model.ts +++ b/src/commands/ollama-get-model.ts @@ -11,25 +11,37 @@ export class OllamaGetModel extends ChatCommand { async execute(msg: Message): Promise { try { - const showResponse = await this.loadModelInfo(); + let modelInfo = await this.loadModelInfo(); + const modelText = "```Text\n" + this.getModelText(Environment.OLLAMA_MODEL, modelInfo) + "```"; + modelInfo = await this.loadImageModelInfo(); + const imageModelText = "```Image\n" + this.getModelText(Environment.OLLAMA_IMAGE_MODEL, modelInfo) + "```"; - const caps = showResponse.capabilities; + await replyToMessage({ + message: msg, + text: modelText + "\n\n" + imageModelText, + parse_mode: "Markdown" + }).catch(logError); - const text = "```Ollama\n" + - `model: ${Environment.OLLAMA_MODEL}\n\n` + - `vision: ${boolToEmoji(caps.includes("vision"))}\n` + - `thinking: ${boolToEmoji(caps.includes("thinking"))}\n` + - `tools: ${boolToEmoji(caps.includes("tools"))}` - + "```"; - - await replyToMessage({message: msg, text: text, parse_mode: "Markdown"}).catch(logError); } catch (e) { logError(e); await replyToMessage({message: msg, text: e.toString()}).catch(logError); } } + private getModelText(model: string, info: ShowResponse): string { + const caps = info.capabilities; + + return `model: ${model}\n\n` + + `vision: ${boolToEmoji(caps.includes("vision"))}\n` + + `thinking: ${boolToEmoji(caps.includes("thinking"))}\n` + + `tools: ${boolToEmoji(caps.includes("tools"))}`; + } + async loadModelInfo(): Promise { return ollama.show({model: Environment.OLLAMA_MODEL}); } + + async loadImageModelInfo(): Promise { + return ollama.show({model: Environment.OLLAMA_IMAGE_MODEL}); + } } \ No newline at end of file diff --git a/src/common/environment.ts b/src/common/environment.ts index 538fe75..2f715f3 100644 --- a/src/common/environment.ts +++ b/src/common/environment.ts @@ -27,6 +27,7 @@ export class Environment { static OLLAMA_ADDRESS?: string; static OLLAMA_MODEL?: string; + static OLLAMA_IMAGE_MODEL?: string; static OLLAMA_API_KEY?: string; static GEMINI_API_KEY?: string; @@ -61,7 +62,8 @@ export class Environment { Environment.SYSTEM_PROMPT = process.env.SYSTEM_PROMPT?.trim(); Environment.OLLAMA_ADDRESS = process.env.OLLAMA_ADDRESS; - Environment.OLLAMA_MODEL = process.env.OLLAMA_MODEL; + Environment.OLLAMA_MODEL = process.env.OLLAMA_MODEL || "gemma3:4b"; + Environment.OLLAMA_IMAGE_MODEL = process.env.OLLAMA_IMAGE_MODEL || "gemma3:4b"; Environment.OLLAMA_API_KEY = process.env.OLLAMA_API_KEY; Environment.GEMINI_API_KEY = process.env.GEMINI_API_KEY;