From 6e39b225b2d1c7f9f9544a9e34e524f066f2d2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Commaret?= Date: Wed, 12 Mar 2025 15:34:02 +0100 Subject: [PATCH] - FIM is seems ok but disabled (have to find where to change it) - Send Mistral chat to fix [error 422] --- .../contrib/void/common/modelCapabilities.ts | 72 ++++++++++++------- .../contrib/void/common/voidSettingsTypes.ts | 2 +- .../llmMessage/sendLLMMessage.impl.ts | 18 +++-- 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/src/vs/workbench/contrib/void/common/modelCapabilities.ts b/src/vs/workbench/contrib/void/common/modelCapabilities.ts index c3692f05..266b2d40 100644 --- a/src/vs/workbench/contrib/void/common/modelCapabilities.ts +++ b/src/vs/workbench/contrib/void/common/modelCapabilities.ts @@ -53,6 +53,11 @@ export const defaultModelsOfProvider = { ], mistral: [ // https://docs.mistral.ai/getting-started/models/models_overview/ 'codestral-latest', + 'open-codestral-mamba', + 'mistral-small-latest', + 'mistral-large-latest', + 'ministral-3b-latest', + 'ministral-8b-latest', ], openAICompatible: [], // fallback } as const satisfies Record @@ -117,6 +122,41 @@ const modelOptionsDefaults: ModelOptions = { supportsReasoning: false, } +const mistralModelOptions = { + 'codestral-latest': { + contextWindow: 32_000, + maxOutputTokens: 4_096, + cost: { input: 0.00, output: 0.00 }, + supportsFIM: true, + supportsSystemMessage: 'system-role', + supportsTools: 'openai-style', + supportsReasoning: false, + }, + 'open-codestral-mamba': { + contextWindow: 32_000, + maxOutputTokens: 4_096, + cost: { input: 0.00, output: 0.00 }, + supportsFIM: true, + supportsSystemMessage: 'system-role', + supportsTools: 'openai-style', + supportsReasoning: false, + }, + 'mistral-large-latest': { + contextWindow: 32_000, + maxOutputTokens: 4_096, + cost: { input: 0.00, output: 0.00 }, + supportsFIM: false, + supportsSystemMessage: 'system-role', + supportsTools: 'openai-style', + supportsReasoning: false, + } +} as const satisfies { [s: string]: ModelOptions } + +const mistralSettings: ProviderSettings = { + ...mistralModelOptions, + modelOptions: {}, + modelOptionsFallback: (modelName) => extensiveModelFallback(modelName), +} const openSourceModelOptions_assumingOAICompat = { 'deepseekR1': { @@ -131,12 +171,6 @@ const openSourceModelOptions_assumingOAICompat = { supportsTools: false, supportsReasoning: false, }, - 'codestral': { - supportsFIM: true, - supportsSystemMessage: 'system-role', - supportsTools: 'openai-style', - supportsReasoning: false, - }, // llama 'llama3': { supportsFIM: false, @@ -188,17 +222,9 @@ const openSourceModelOptions_assumingOAICompat = { supportsTools: false, supportsReasoning: false, }, - 'codestral-latest': { - supportsFIM: true, - supportsSystemMessage: false, - supportsTools: false, - supportsReasoning: false, - }, + ...mistralModelOptions, } as const satisfies { [s: string]: Partial } - - - const extensiveModelFallback: ProviderSettings['modelOptionsFallback'] = (modelName) => { const toFallback = (opts: Omit): ModelOptions & { modelName: string } => { return { @@ -216,16 +242,15 @@ const extensiveModelFallback: ProviderSettings['modelOptionsFallback'] = (modelN if (modelName.includes('deepseek')) return toFallback({ ...openSourceModelOptions_assumingOAICompat.deepseekCoderV2, contextWindow: 32_000, maxOutputTokens: 4_096, }) if (modelName.includes('llama3')) return toFallback({ ...openSourceModelOptions_assumingOAICompat.llama3, contextWindow: 32_000, maxOutputTokens: 4_096, }) if (modelName.includes('qwen') && modelName.includes('2.5') && modelName.includes('coder')) return toFallback({ ...openSourceModelOptions_assumingOAICompat['qwen2.5coder'], contextWindow: 32_000, maxOutputTokens: 4_096, }) - if (modelName.includes('codestral')) return toFallback({ ...openSourceModelOptions_assumingOAICompat.codestral, contextWindow: 32_000, maxOutputTokens: 4_096, }) + + /* Mistral Options fallback for Mistral and others providers keeping the code relatively clean for all models */ + if (modelName.includes('mistral')) return toFallback({ ...openSourceModelOptions_assumingOAICompat['mistral-large-latest'] }) + if (modelName.includes('codestral')) return toFallback({ ...openSourceModelOptions_assumingOAICompat['codestral-latest'] }) + if (/\bo1\b/.test(modelName) || /\bo3\b/.test(modelName)) return toFallback(openAIModelOptions['o1']) return toFallback(modelOptionsDefaults) } - - - - - // ---------------- ANTHROPIC ---------------- const anthropicModelOptions = { 'claude-3-7-sonnet-20250219': { // https://docs.anthropic.com/en/docs/about-claude/models/all-models#model-comparison-table @@ -591,9 +616,6 @@ const openRouterSettings: ProviderSettings = { modelOptionsFallback: (modelName) => extensiveModelFallback(modelName), } - - - // ---------------- model settings of everything above ---------------- const modelSettingsOfProvider: { [providerName in ProviderName]: ProviderSettings } = { @@ -611,7 +633,7 @@ const modelSettingsOfProvider: { [providerName in ProviderName]: ProviderSetting vLLM: vLLMSettings, ollama: ollamaSettings, openAICompatible: openaiCompatible, - + mistral: mistralSettings, // googleVertex: {}, // microsoftAzure: {}, } as const diff --git a/src/vs/workbench/contrib/void/common/voidSettingsTypes.ts b/src/vs/workbench/contrib/void/common/voidSettingsTypes.ts index 87efbaf5..79d2204b 100644 --- a/src/vs/workbench/contrib/void/common/voidSettingsTypes.ts +++ b/src/vs/workbench/contrib/void/common/voidSettingsTypes.ts @@ -149,7 +149,7 @@ export const displayInfoOfProviderName = (providerName: ProviderName): DisplayIn } else if (providerName === 'mistral') { return { - title: 'Mistal.ai API', + title: 'Mistral.ai API', } } diff --git a/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts b/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts index 844a8a78..26af462a 100644 --- a/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts +++ b/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts @@ -7,6 +7,10 @@ import Anthropic from '@anthropic-ai/sdk'; import { Ollama } from 'ollama'; import OpenAI, { ClientOptions } from 'openai'; + + + + import { Model as OpenAIModel } from 'openai/resources/models.js'; import { extractReasoningOnFinalMessage, extractReasoningOnTextWrapper } from '../../common/helpers/extractCodeFromResult.js'; import { LLMChatMessage, LLMFIMMessage, ModelListParams, OllamaModelResponse, OnError, OnFinalMessage, OnText } from '../../common/sendLLMMessageTypes.js'; @@ -112,6 +116,10 @@ const newOpenAICompatibleSDK = ({ settingsOfProvider, providerName, includeInPay const thisConfig = settingsOfProvider[providerName] return new OpenAI({ baseURL: 'https://api.x.ai/v1', apiKey: thisConfig.apiKey, ...commonPayloadOpts }) } + else if (providerName === 'mistral') { + const thisConfig = settingsOfProvider[providerName] + return new OpenAI({ baseURL: 'https://api.mistral.ai/v1', apiKey: thisConfig.apiKey, ...commonPayloadOpts }) + } else throw new Error(`Void providerName was invalid: ${providerName}.`) } @@ -495,11 +503,6 @@ export const sendLLMMessageToProviderImplementation = { sendFIM: null, list: null, }, - mistral: { - sendChat: (params) => _sendOpenAICompatibleChat(params), - sendFIM: null, // TODO // https://docs.mistral.ai/api/#tag/fim - list: null, - }, ollama: { sendChat: (params) => _sendOpenAICompatibleChat(params), sendFIM: sendOllamaFIM, @@ -530,6 +533,11 @@ export const sendLLMMessageToProviderImplementation = { sendFIM: null, list: null, }, + mistral: { + sendChat: (params) => _sendMistralChat(params), + sendFIM: (params) => _sendMistralFIM(params), + list: null, + }, } satisfies CallFnOfProvider