From 1eee2b8710680f00a4284f9dbfddffda56ccc3b2 Mon Sep 17 00:00:00 2001 From: Enrico Ros Date: Thu, 25 Jul 2024 01:28:52 -0700 Subject: [PATCH] Mistral: FC warnings --- .../chatGenerate/adapters/openai.chatCompletions.ts | 11 +++++++++-- .../aix/server/dispatch/wiretypes/openai.wiretypes.ts | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/modules/aix/server/dispatch/chatGenerate/adapters/openai.chatCompletions.ts b/src/modules/aix/server/dispatch/chatGenerate/adapters/openai.chatCompletions.ts index 42d6d8146..716cb7d5c 100644 --- a/src/modules/aix/server/dispatch/chatGenerate/adapters/openai.chatCompletions.ts +++ b/src/modules/aix/server/dispatch/chatGenerate/adapters/openai.chatCompletions.ts @@ -59,7 +59,7 @@ export function aixToOpenAIChatCompletions(openAIDialect: OpenAIDialects, model: model: model.id, messages: chatMessages, tools: chatGenerate.tools && _toOpenAITools(chatGenerate.tools), - tool_choice: chatGenerate.toolsPolicy && _toOpenAIToolChoice(chatGenerate.toolsPolicy), + tool_choice: chatGenerate.toolsPolicy && _toOpenAIToolChoice(openAIDialect, chatGenerate.toolsPolicy), parallel_tool_calls: undefined, max_tokens: model.maxTokens !== undefined ? model.maxTokens : undefined, temperature: model.temperature !== undefined ? model.temperature : undefined, @@ -335,7 +335,14 @@ function _toOpenAITools(itds: AixTools_ToolDefinition[]): NonNullable { +function _toOpenAIToolChoice(openAIDialect: OpenAIDialects, itp: AixTools_ToolsPolicy): NonNullable { + // [Mistral] - supports 'auto', 'none', 'any' + if (openAIDialect === 'mistral' && itp.type !== 'auto') { + // Note: we tried adding the 'any' model, but don't feel comfortable with altering our good parsers + // to allow for Mistral's deviation from the de-facto norm set by the OpenAI protocol. + throw new Error('We only support automatic tool selection for Mistral models'); + } + // NOTE: OpenAI has an additional policy 'none', which we don't have as it behaves like passing no tools at all. // Passing no tools is mandated instead of 'none'. switch (itp.type) { diff --git a/src/modules/aix/server/dispatch/wiretypes/openai.wiretypes.ts b/src/modules/aix/server/dispatch/wiretypes/openai.wiretypes.ts index 0e0d58a1f..7af898176 100644 --- a/src/modules/aix/server/dispatch/wiretypes/openai.wiretypes.ts +++ b/src/modules/aix/server/dispatch/wiretypes/openai.wiretypes.ts @@ -170,6 +170,9 @@ export namespace OpenAIWire_Tools { type: z.literal('function'), function: z.object({ name: z.string() }), }), + // [Mistral] Mistral only, requires an 'any' value + // Commented because we'll disable Mistral function calling instead + // z.literal('any'), ]); }