- FIM is seems ok but disabled (have to find where to change it)

- Send Mistral chat to fix [error 422]
This commit is contained in:
Jérôme Commaret 2025-03-12 15:34:02 +01:00
parent 89ac7738e4
commit 6e39b225b2
3 changed files with 61 additions and 31 deletions

View file

@ -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<ProviderName, string[]>
@ -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<ModelOptions> }
const extensiveModelFallback: ProviderSettings['modelOptionsFallback'] = (modelName) => {
const toFallback = (opts: Omit<ModelOptions, 'cost'>): 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

View file

@ -149,7 +149,7 @@ export const displayInfoOfProviderName = (providerName: ProviderName): DisplayIn
}
else if (providerName === 'mistral') {
return {
title: 'Mistal.ai API',
title: 'Mistral.ai API',
}
}

View file

@ -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