fix mistral tooling

This commit is contained in:
Jérôme Commaret 2025-04-03 20:55:30 +02:00
parent 2d9fe3b0be
commit 795ce62ce8
3 changed files with 47 additions and 14 deletions

View file

@ -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': {

View file

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

View file

@ -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
<fimbegin>{{ .Prompt }}<fimhole>{{ .Suffix }}<fimend>
{{ .Prompt }}
starcoder2 https://ollama.com/library/starcoder2/blobs/3b190e68fefe
<file_sep>