Update package-lock.json with dependency version upgrades and remove deprecated entries; enhance SidebarChat component logic for reasoning effort handling.

This commit is contained in:
Jérôme Commaret 2026-05-06 13:12:46 +02:00
parent 7c0deee252
commit 5b5e750b17
4 changed files with 7842 additions and 5236 deletions

12899
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -218,9 +218,13 @@ const ReasoningOptionSlider = ({ featureName }: { featureName: FeatureName }) =>
const min = canTurnOffReasoning ? -1 : 0
const max = values.length - 1
const currentEffort = voidSettingsState.optionsOfModelSelection[featureName][modelSelection.providerName]?.[modelSelection.modelName]?.reasoningEffort ?? defaultVal
const storedEffort = voidSettingsState.optionsOfModelSelection[featureName][modelSelection.providerName]?.[modelSelection.modelName]?.reasoningEffort
const rawEffort = storedEffort ?? defaultVal
const currentEffort = values.includes(rawEffort) ? rawEffort : defaultVal
const valueIfOff = -1
const value = isReasoningEnabled && currentEffort ? values.indexOf(currentEffort) : valueIfOff
const idx = values.indexOf(currentEffort)
const value = isReasoningEnabled && idx >= 0 ? idx : valueIfOff
const currentEffortCapitalized = currentEffort.charAt(0).toUpperCase() + currentEffort.slice(1, Infinity)

View file

@ -141,12 +141,16 @@ export const defaultModelsOfProvider = {
// 'qwen-2.5-coder-32b', // preview mode (experimental)
],
mistral: [ // https://docs.mistral.ai/getting-started/models/models_overview/
'codestral-latest',
'devstral-small-latest',
'mistral-large-latest',
'mistral-medium-latest',
'ministral-3b-latest',
'mistral-small-latest',
'devstral-latest',
'codestral-latest',
'devstral-small-latest',
'magistral-medium-latest',
'ministral-14b-latest',
'ministral-8b-latest',
'ministral-3b-latest',
],
openAICompatible: [], // fallback
googleVertex: [],
@ -283,7 +287,7 @@ const openSourceModelOptions_assumingOAICompat = {
supportsFIM: false,
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
contextWindow: 131_000, reservedOutputTokenSpace: 8_192,
contextWindow: 256_000, reservedOutputTokenSpace: 8_192,
},
'openhands-lm-32b': { // https://www.all-hands.dev/blog/introducing-openhands-lm-32b----a-strong-open-coding-agent-model
supportsFIM: false,
@ -713,6 +717,25 @@ const openAICompatIncludeInPayloadReasoning = (reasoningInfo: SendableReasoningI
}
// Mistral Adjustable Reasoning — only "none" | "high" (not OpenAI-style low/medium/high)
// https://docs.mistral.ai/capabilities/reasoning/adjustable
const mistralIncludeInPayloadReasoning = (reasoningInfo: SendableReasoningInfo) => {
if (!reasoningInfo?.isReasoningEnabled) return null
if (reasoningInfo.type !== 'effort_slider_value') return null
const raw = reasoningInfo.reasoningEffort
let reasoning_effort: 'high' | 'none'
if (raw === 'none') {
reasoning_effort = 'none'
} else if (raw === 'high') {
reasoning_effort = 'high'
} else if (raw === 'low') {
reasoning_effort = 'none'
} else {
reasoning_effort = 'high'
}
return { reasoning_effort }
}
const openAISettings: VoidStaticProviderInfo = {
modelOptions: openAIModelOptions,
modelOptionsFallback: (modelName) => {
@ -957,75 +980,113 @@ const deepseekSettings: VoidStaticProviderInfo = {
// ---------------- MISTRAL ----------------
const mistralModelOptions = { // https://mistral.ai/products/la-plateforme#pricing https://docs.mistral.ai/getting-started/models/models_overview/#premier-models
'mistral-large-latest': {
contextWindow: 131_000,
const mistralModelOptions = { // https://docs.mistral.ai/getting-started/models/models_overview/
'mistral-large-latest': { // Mistral Large 3 — https://docs.mistral.ai/models/model-cards/mistral-large-3-25-12
contextWindow: 256_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 2.00, output: 6.00 },
supportsFIM: false,
downloadable: { sizeGb: 73 },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'mistral-medium-latest': { // https://openrouter.ai/mistralai/mistral-medium-3
contextWindow: 131_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.40, output: 2.00 },
supportsFIM: false,
cost: { input: 0.50, output: 1.50 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'codestral-latest': {
'mistral-medium-latest': { // Mistral Medium 3.5 — https://docs.mistral.ai/models/model-cards/mistral-medium-3-5-26-04
contextWindow: 256_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 1.50, output: 7.50 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: { supportsReasoning: true, canIOReasoning: true, canTurnOffReasoning: true, reasoningSlider: { type: 'effort_slider', values: ['none', 'high'], default: 'high' }, openSourceThinkTags: ['<think>', '</think>'] },
},
'mistral-small-latest': { // Mistral Small 4 — https://docs.mistral.ai/models/model-cards/mistral-small-4-0-26-03
contextWindow: 256_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.15, output: 0.60 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: { supportsReasoning: true, canIOReasoning: true, canTurnOffReasoning: true, reasoningSlider: { type: 'effort_slider', values: ['none', 'high'], default: 'high' }, openSourceThinkTags: ['<think>', '</think>'] },
},
'codestral-latest': { // Codestral 25.08 — https://docs.mistral.ai/models/model-cards/codestral-25-08
contextWindow: 128_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.30, output: 0.90 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 13 },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'magistral-medium-latest': {
'devstral-latest': { // Devstral 2 — https://docs.mistral.ai/models/model-cards/devstral-2-25-12
contextWindow: 256_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.30, output: 0.90 }, // TODO: check this
cost: { input: 0.40, output: 2.00 },
supportsFIM: true,
downloadable: { sizeGb: 13 },
supportsSystemMessage: 'system-role',
reasoningCapabilities: { supportsReasoning: true, canIOReasoning: true, canTurnOffReasoning: false, openSourceThinkTags: ['<think>', '</think>'] },
},
'magistral-small-latest': {
contextWindow: 40_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.30, output: 0.90 }, // TODO: check this
supportsFIM: true,
downloadable: { sizeGb: 13 },
supportsSystemMessage: 'system-role',
reasoningCapabilities: { supportsReasoning: true, canIOReasoning: true, canTurnOffReasoning: false, openSourceThinkTags: ['<think>', '</think>'] },
},
'devstral-small-latest': { //https://openrouter.ai/mistralai/devstral-small:free
contextWindow: 131_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0, output: 0 },
supportsFIM: false,
downloadable: { sizeGb: 14 }, //https://ollama.com/library/devstral
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'ministral-8b-latest': { // ollama 'mistral'
contextWindow: 131_000,
'magistral-medium-latest': { // Magistral Medium 1.2 — https://docs.mistral.ai/models/model-cards/magistral-medium-1-2-25-09
contextWindow: 128_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 2.00, output: 5.00 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: { supportsReasoning: true, canIOReasoning: true, canTurnOffReasoning: false, openSourceThinkTags: ['<think>', '</think>'] },
},
'magistral-small-latest': { // Magistral Small 1.2 (deprecated) — https://docs.mistral.ai/models/model-cards/magistral-small-1-2-25-09
contextWindow: 128_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.30, output: 0.90 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: { supportsReasoning: true, canIOReasoning: true, canTurnOffReasoning: false, openSourceThinkTags: ['<think>', '</think>'] },
},
'devstral-small-latest': { // Devstral Small 2 (labs) — https://docs.mistral.ai/models/model-cards/devstral-small-2-25-12
contextWindow: 256_000,
reservedOutputTokenSpace: 8_192,
cost: { input: 0.20, output: 0.80 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 14 },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'ministral-14b-latest': { // Ministral 3 14B — https://docs.mistral.ai/models/model-cards/ministral-3-14b-25-12
contextWindow: 256_000,
reservedOutputTokenSpace: 4_096,
cost: { input: 0.10, output: 0.10 },
supportsFIM: false,
cost: { input: 0.20, output: 0.20 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'ministral-8b-latest': { // Ministral 3 8B — https://docs.mistral.ai/models/model-cards/ministral-3-8b-25-12
contextWindow: 256_000,
reservedOutputTokenSpace: 4_096,
cost: { input: 0.15, output: 0.15 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 4.1 },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
},
'ministral-3b-latest': {
contextWindow: 131_000,
'ministral-3b-latest': { // Ministral 3 3B — https://docs.mistral.ai/models/model-cards/ministral-3-3b-25-12
contextWindow: 256_000,
reservedOutputTokenSpace: 4_096,
cost: { input: 0.04, output: 0.04 },
supportsFIM: false,
cost: { input: 0.10, output: 0.10 },
supportsFIM: true,
specialToolFormat: 'openai-style',
downloadable: { sizeGb: 'not-known' },
supportsSystemMessage: 'system-role',
reasoningCapabilities: false,
@ -1036,7 +1097,7 @@ const mistralSettings: VoidStaticProviderInfo = {
modelOptions: mistralModelOptions,
modelOptionsFallback: (modelName) => { return null },
providerReasoningIOSettings: {
input: { includeInPayload: openAICompatIncludeInPayloadReasoning },
input: { includeInPayload: mistralIncludeInPayloadReasoning },
},
}

View file

@ -69,10 +69,9 @@ const parseHeadersJSON = (s: string | undefined): Record<string, string | null |
}
}
const newOpenAICompatibleSDK = async ({ settingsOfProvider, providerName, includeInPayload }: { settingsOfProvider: SettingsOfProvider, providerName: ProviderName, includeInPayload?: { [s: string]: any } }) => {
const newOpenAICompatibleSDK = async ({ settingsOfProvider, providerName }: { settingsOfProvider: SettingsOfProvider, providerName: ProviderName }) => {
const commonPayloadOpts: ClientOptions = {
dangerouslyAllowBrowser: true,
...includeInPayload,
}
if (providerName === 'openAI') {
const thisConfig = settingsOfProvider[providerName]
@ -188,7 +187,7 @@ const _sendOpenAICompatibleFIM = async ({ messages: { prefix, suffix, stopTokens
return
}
const openai = await newOpenAICompatibleSDK({ providerName, settingsOfProvider, includeInPayload: additionalOpenAIPayload })
const openai = await newOpenAICompatibleSDK({ providerName, settingsOfProvider })
openai.completions
.create({
model: modelName,
@ -196,6 +195,7 @@ const _sendOpenAICompatibleFIM = async ({ messages: { prefix, suffix, stopTokens
suffix: suffix,
stop: stopTokens,
max_tokens: 300,
...additionalOpenAIPayload,
})
.then(async response => {
const fullText = response.choices[0]?.text
@ -284,7 +284,7 @@ const _sendOpenAICompatibleChat = async ({ messages, onText, onFinalMessage, onE
const { canIOReasoning, openSourceThinkTags } = reasoningCapabilities || {}
const reasoningInfo = getSendableReasoningInfo('Chat', providerName, modelName_, modelSelectionOptions, overridesOfModel) // user's modelName_ here
const includeInPayload = {
const reasoningAndExtraPayload = {
...providerReasoningIOSettings?.input?.includeInPayload?.(reasoningInfo),
...additionalOpenAIPayload
}
@ -296,7 +296,7 @@ const _sendOpenAICompatibleChat = async ({ messages, onText, onFinalMessage, onE
: {}
// instance
const openai: OpenAI = await newOpenAICompatibleSDK({ providerName, settingsOfProvider, includeInPayload })
const openai: OpenAI = await newOpenAICompatibleSDK({ providerName, settingsOfProvider })
if (providerName === 'microsoftAzure') {
// Required to select the model
(openai as AzureOpenAI).deploymentName = modelName;
@ -306,7 +306,7 @@ const _sendOpenAICompatibleChat = async ({ messages, onText, onFinalMessage, onE
messages: messages as any,
stream: true,
...nativeToolsObj,
...additionalOpenAIPayload
...reasoningAndExtraPayload,
// max_completion_tokens: maxTokens,
}