@ai-sdk/mistral 4.0.77 → 4.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @ai-sdk/mistral
2
2
 
3
+ ## 4.0.79
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [fa15312]
8
+ - @ai-sdk/provider-utils@5.0.74
9
+
10
+ ## 4.0.78
11
+
12
+ ### Patch Changes
13
+
14
+ - 4ae6986: fix(mistral): preserve string tool call arguments and safely serialize BigInt and circular structures in tool calls and outputs
15
+ - Updated dependencies [51ca5b7]
16
+ - Updated dependencies [dc6f1c3]
17
+ - Updated dependencies [4ae6986]
18
+ - @ai-sdk/provider-utils@5.0.73
19
+
3
20
  ## 4.0.77
4
21
 
5
22
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InvalidArgumentError, NoSuchModelError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
2
- import { StreamingToolCallTracker, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToBase64, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createLanguageModelResponseMetadata as getResponseMetadata, createNullLanguageModelUsage, createProviderExecutedToolFactory, createToolNameMapping, generateId, getTopLevelMediaType, injectJsonInstructionIntoMessages, isCustomReasoning, lazySchema, loadApiKey, mapReasoningToProviderEffort, mediaTypeToExtension, parseProviderOptions, postFormDataToApi, postJsonToApi, postToApi, resolve, resolveFullMediaType, resolveWith, serializeModelOptions, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
2
+ import { StreamingToolCallTracker, WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToBase64, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createLanguageModelResponseMetadata as getResponseMetadata, createNullLanguageModelUsage, createProviderExecutedToolFactory, createToolNameMapping, generateId, getTopLevelMediaType, injectJsonInstructionIntoMessages, isCustomReasoning, lazySchema, loadApiKey, mapReasoningToProviderEffort, mediaTypeToExtension, parseProviderOptions, postFormDataToApi, postJsonToApi, postToApi, resolve, resolveFullMediaType, resolveWith, secureJsonParse, serializeModelOptions, stringifyWithBigIntAndCycles, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
3
3
  import { z } from "zod/v4";
4
4
  //#region src/convert-mistral-usage.ts
5
5
  const mistralPromptTokensDetailsSchema = z.object({
@@ -47,6 +47,15 @@ function formatFileUrl({ part }) {
47
47
  if (part.data.type === "data") return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;
48
48
  throw new UnsupportedFunctionalityError({ functionality: `file part data type ${part.data.type}` });
49
49
  }
50
+ function serializeMistralToolCallArguments(input) {
51
+ if (typeof input === "string") try {
52
+ secureJsonParse(input);
53
+ return input;
54
+ } catch {
55
+ return JSON.stringify(input);
56
+ }
57
+ return stringifyWithBigIntAndCycles(input);
58
+ }
50
59
  function convertToMistralChatMessages(prompt) {
51
60
  const messages = [];
52
61
  for (let i = 0; i < prompt.length; i++) {
@@ -109,7 +118,7 @@ function convertToMistralChatMessages(prompt) {
109
118
  type: "function",
110
119
  function: {
111
120
  name: part.toolName,
112
- arguments: JSON.stringify(part.input)
121
+ arguments: serializeMistralToolCallArguments(part.input)
113
122
  }
114
123
  });
115
124
  break;
@@ -149,7 +158,7 @@ function convertToMistralChatMessages(prompt) {
149
158
  break;
150
159
  case "content":
151
160
  case "json":
152
- case "error-json": contentValue = JSON.stringify(output.value);
161
+ case "error-json": contentValue = stringifyWithBigIntAndCycles(output.value);
153
162
  }
154
163
  messages.push({
155
164
  role: "tool",
@@ -897,7 +906,7 @@ function convertToMistralConversationInputs(prompt, toolNameMapping) {
897
906
  inputs.push({
898
907
  type: "function.result",
899
908
  tool_call_id: part.toolCallId,
900
- result: typeof result === "string" ? result : JSON.stringify(result)
909
+ result: typeof result === "string" ? result : stringifyWithBigIntAndCycles(result)
901
910
  });
902
911
  return;
903
912
  }
@@ -962,14 +971,14 @@ function convertToMistralConversationInputs(prompt, toolNameMapping) {
962
971
  type: "function.call",
963
972
  tool_call_id: part.toolCallId,
964
973
  name: typeof name === "string" ? name : toolNameMapping.toProviderToolName(part.toolName),
965
- arguments: typeof args?.arguments === "string" ? args.arguments : JSON.stringify(part.input)
974
+ arguments: typeof args?.arguments === "string" ? args.arguments : serializeMistralToolCallArguments(part.input)
966
975
  });
967
976
  executions.add(part.toolCallId);
968
977
  } else inputs.push({
969
978
  type: "function.call",
970
979
  tool_call_id: part.toolCallId,
971
980
  name: part.toolName,
972
- arguments: JSON.stringify(part.input)
981
+ arguments: serializeMistralToolCallArguments(part.input)
973
982
  });
974
983
  break;
975
984
  case "tool-result":
@@ -1935,7 +1944,7 @@ const mistralTranscriptionResponseSchema = lazySchema(() => zodSchema(z.object({
1935
1944
  })));
1936
1945
  //#endregion
1937
1946
  //#region src/version.ts
1938
- const VERSION = "4.0.77";
1947
+ const VERSION = "4.0.79";
1939
1948
  //#endregion
1940
1949
  //#region src/tool/web-search.ts
1941
1950
  const inputSchema = lazySchema(() => zodSchema(z.object({ arguments: z.string() })));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_exhaustiveCheck","_exhaustiveCheck","_exhaustiveCheck","_exhaustiveCheck"],"sources":["../src/convert-mistral-usage.ts","../src/convert-to-mistral-chat-messages.ts","../src/map-mistral-finish-reason.ts","../src/mistral-chat-language-model-options.ts","../src/mistral-error.ts","../src/mistral-prepare-tools.ts","../src/mistral-model-catalog.ts","../src/mistral-chat-language-model.ts","../src/convert-to-mistral-conversation-inputs.ts","../src/mistral-conversation-language-model-options.ts","../src/mistral-conversation-prepare-tools.ts","../src/mistral-conversation-language-model.ts","../src/mistral-embedding-model-options.ts","../src/mistral-embedding-model.ts","../src/mistral-speech-model-options.ts","../src/mistral-speech-model.ts","../src/mistral-transcription-model-options.ts","../src/mistral-transcription-model.ts","../src/version.ts","../src/tool/web-search.ts","../src/tool/index.ts","../src/mistral-provider.ts"],"sourcesContent":["import type { LanguageModelV4Usage } from '@ai-sdk/provider';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst mistralPromptTokensDetailsSchema = z\n .object({\n messages: z.array(z.json()).nullish(),\n cached_tokens: z.number().nullish(),\n audio_tokens: z.number().nullish(),\n })\n .catchall(z.json());\n\nconst mistralCompletionTokensDetailsSchema = z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .catchall(z.json());\n\nexport const mistralUsageSchema = z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_audio_seconds: z.number().nullish(),\n request_count: z.number().nullish(),\n service_tier: z.string().nullish(),\n num_cached_tokens: z.number().nullish(),\n prompt_tokens_details: mistralPromptTokensDetailsSchema.nullish(),\n prompt_token_details: mistralPromptTokensDetailsSchema.nullish(),\n completion_tokens_details: mistralCompletionTokensDetailsSchema.nullish(),\n })\n .catchall(z.json());\n\nexport type MistralUsage = z.infer<typeof mistralUsageSchema>;\n\nexport function convertMistralUsage(\n usage: MistralUsage | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const promptTokens = usage.prompt_tokens;\n const completionTokens = usage.completion_tokens;\n\n const cacheReadTokens =\n usage.num_cached_tokens ??\n usage.prompt_tokens_details?.cached_tokens ??\n usage.prompt_token_details?.cached_tokens ??\n 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens || undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens,\n reasoning: undefined,\n },\n raw: usage,\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n type LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\nimport type {\n MistralAssistantMessageContent,\n MistralPrompt,\n} from './mistral-chat-prompt';\nimport {\n convertToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\n\nfunction formatFileUrl({ part }: { part: LanguageModelV4FilePart }): string {\n if (part.data.type === 'url') {\n return part.data.url.toString();\n }\n\n if (part.data.type === 'data') {\n return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part data type ${part.data.type}`,\n });\n}\n\nexport function convertToMistralChatMessages(\n prompt: LanguageModelV4Prompt,\n): MistralPrompt {\n const messages: MistralPrompt = [];\n\n for (let i = 0; i < prompt.length; i++) {\n const { role, content } = prompt[i];\n const isLastMessage = i === prompt.length - 1;\n\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n\n case 'file': {\n switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n case 'url':\n case 'data': {\n const topLevel = getTopLevelMediaType(part.mediaType);\n\n if (topLevel === 'image') {\n return {\n type: 'image_url',\n image_url: formatFileUrl({ part }),\n };\n } else {\n if (part.data.type === 'data') {\n const fullMediaType = resolveFullMediaType({ part });\n if (fullMediaType !== 'application/pdf') {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Only images and PDF file parts are supported',\n });\n }\n } else if (part.mediaType !== 'application/pdf') {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Only images and PDF file parts are supported',\n });\n }\n\n return {\n type: 'document_url',\n document_url: formatFileUrl({ part }),\n };\n }\n }\n }\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n let hasReasoning = false;\n const contentParts: Array<MistralAssistantMessageContent> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n contentParts.push({ type: 'text', text: part.text });\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n case 'reasoning': {\n hasReasoning = true;\n contentParts.push({\n type: 'thinking',\n thinking: [{ type: 'text', text: part.text }],\n closed: true,\n });\n break;\n }\n default: {\n throw new Error(\n `Unsupported content type in assistant message: ${part.type}`,\n );\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: hasReasoning ? contentParts : text,\n prefix: isLastMessage ? true : undefined,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n const output = toolResponse.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n name: toolResponse.toolName,\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapMistralFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n case 'model_length':\n return 'length';\n case 'tool_calls':\n return 'tool-calls';\n case 'error':\n return 'error';\n default:\n return 'other';\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.mistral.ai/models\nexport type MistralChatModelId =\n | 'codestral-2508'\n | 'codestral-latest'\n | 'glm-5-2'\n | 'labs-leanstral-1-5'\n | 'labs-leanstral-1-5-1'\n | 'magistral-medium-latest'\n | 'magistral-small-latest'\n | 'ministral-14b-2512'\n | 'ministral-14b-latest'\n | 'ministral-3b-2512'\n | 'ministral-3b-latest'\n | 'ministral-8b-2512'\n | 'ministral-8b-latest'\n | 'mistral-code-fim-latest'\n | 'mistral-code-latest'\n | 'mistral-large-4'\n | 'mistral-large-4-0'\n | 'mistral-large-latest'\n | 'mistral-large-2512'\n | 'mistral-medium'\n | 'mistral-medium-latest'\n | 'mistral-medium-2604'\n | 'mistral-medium-3'\n | 'mistral-medium-3-5'\n | 'mistral-medium-3.5'\n | 'mistral-small-2603'\n | 'mistral-small-latest'\n | 'mistral-vibe-cli-fast'\n | 'mistral-vibe-cli-latest'\n | 'mistral-vibe-cli-with-tools'\n | 'voxtral-small-2507'\n | 'voxtral-small-latest'\n | 'zai-glm-5'\n | 'zai-glm-5-2'\n | 'zai-glm-5-3'\n | 'zai-glm-5-3-flash'\n | 'zai-glm-latest'\n | (string & {});\n\nexport const mistralLanguageModelChatOptions = () =>\n z.object({\n /**\n * Whether to inject a safety prompt before all conversations.\n *\n * Defaults to `false`.\n */\n safePrompt: z.boolean().optional(),\n\n documentImageLimit: z.number().optional(),\n documentPageLimit: z.number().optional(),\n\n /**\n * Whether to use structured outputs.\n *\n * @default true\n */\n structuredOutputs: z.boolean().optional(),\n\n /**\n * Whether to use strict JSON schema validation.\n *\n * @default false\n */\n strictJsonSchema: z.boolean().optional(),\n\n /**\n * Whether to enable parallel function calling during tool use.\n * When set to false, the model will use at most one tool per response.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n\n /**\n * A stable identifier used to route requests with shared prompt prefixes to\n * the same cache.\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * Controls the reasoning effort for models that support adjustable reasoning.\n *\n * - `'high'`: Enable reasoning\n * - `'none'`: Disable reasoning\n * - `'low'`, `'max'`: Lowest and highest reasoning effort for models that\n * support them, e.g. `zai-glm-5-3`, which accepts `'low'`, `'high'`, and\n * `'max'` but not `'none'`\n */\n reasoningEffort: z.enum(['high', 'none', 'low', 'max']).optional(),\n });\nexport const mistralLanguageModelChatOptionsValidator = lazySchema(() =>\n zodSchema(mistralLanguageModelChatOptions()),\n);\n\nexport type MistralLanguageModelChatOptions = z.infer<\n ReturnType<typeof mistralLanguageModelChatOptions>\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n createJsonErrorResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst mistralErrorDataSchema = lazySchema(() =>\n zodSchema(\n z.object({\n object: z.literal('error'),\n message: z.string(),\n type: z.string(),\n param: z.string().nullable(),\n code: z.string().nullable(),\n }),\n ),\n);\n\nexport type MistralErrorData = InferSchema<typeof mistralErrorDataSchema>;\n\nexport const mistralFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: mistralErrorDataSchema,\n errorToMessage: data => data.message,\n});\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { MistralToolChoice } from './mistral-chat-prompt';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools:\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>\n | undefined;\n toolChoice: MistralToolChoice | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const mistralTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n mistralTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: mistralTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n return { tools: mistralTools, toolChoice: type, toolWarnings };\n case 'required':\n return { tools: mistralTools, toolChoice: 'any', toolWarnings };\n\n // mistral does not support tool mode directly,\n // so we filter the tools and force the tool choice through 'any'\n case 'tool':\n return {\n tools: mistralTools.filter(\n tool => tool.function.name === toolChoice.toolName,\n ),\n toolChoice: 'any',\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type {\n ModelCapabilities,\n ModelCapability,\n ModelEntry,\n ProviderOptionDefinition,\n ProviderOptionDefinitions,\n} from '@ai-sdk/provider';\nimport type {\n MistralChatModelId,\n MistralLanguageModelChatOptions,\n} from './mistral-chat-language-model-options';\nimport type { MistralEmbeddingModelOptions } from './mistral-embedding-model-options';\nimport type { MistralSpeechModelOptions } from './mistral-speech-model-options';\nimport type { MistralTranscriptionModelOptions } from './mistral-transcription-model-options';\n\nexport const mistralProviderOptions = {\n language: {\n safePrompt: { description: 'Inject a safety prompt. Chat API only.' },\n documentImageLimit: {\n description: 'Maximum document images. Chat API only.',\n },\n documentPageLimit: {\n description: 'Maximum document pages. Chat API only.',\n },\n structuredOutputs: {\n description: 'Whether to send a JSON response schema.',\n },\n strictJsonSchema: {\n description: 'Whether to use strict JSON schema validation.',\n },\n parallelToolCalls: {\n description: 'Allow parallel function calls. Chat API only.',\n },\n promptCacheKey: { description: 'Cache affinity key. Chat API only.' },\n reasoningEffort: {\n description: 'Reasoning effort for configurable reasoning models.',\n },\n } satisfies Record<\n keyof MistralLanguageModelChatOptions,\n ProviderOptionDefinition\n >,\n embedding: {\n metadata: { description: 'Metadata attached to the embedding request.' },\n outputDimension: { description: 'Output embedding dimensions.' },\n outputDtype: { description: 'Output embedding data type.' },\n } satisfies Record<\n keyof MistralEmbeddingModelOptions,\n ProviderOptionDefinition\n >,\n transcription: {\n language: { description: 'Language of the audio.' },\n returnLanguage: { description: 'Return the detected language.' },\n temperature: { description: 'Sampling temperature.' },\n timestampGranularities: {\n description: 'Timestamp granularities to return.',\n },\n diarize: { description: 'Identify speakers in the transcription.' },\n contextBias: {\n description: 'Vocabulary and context to guide transcription.',\n },\n } satisfies Record<\n keyof MistralTranscriptionModelOptions,\n ProviderOptionDefinition\n >,\n speech: {\n refAudio: {\n description: 'Reference audio for voice cloning, overriding voice.',\n },\n expressiveness: { description: 'Speech expressiveness, from 1 to 5.' },\n phonemeHints: { description: 'Pronunciation hints as IPA phonemes.' },\n } satisfies Record<keyof MistralSpeechModelOptions, ProviderOptionDefinition>,\n} as const satisfies ProviderOptionDefinitions;\n\ntype ReasoningEffort = NonNullable<\n MistralLanguageModelChatOptions['reasoningEffort']\n>;\ntype ReasoningCapabilities = {\n support: boolean;\n efforts: readonly ReasoningEffort[];\n};\n\ntype LanguageCapabilities = NonNullable<ModelCapabilities['language']> & {\n reasoning: ReasoningCapabilities;\n endpoints: {\n conversation: {\n reasoning: ReasoningCapabilities;\n };\n };\n};\n\nexport type MistralLanguageModelEntry = {\n capabilities: { language: LanguageCapabilities };\n providerOptions: {\n language: Record<keyof MistralLanguageModelChatOptions, ModelCapability>;\n };\n};\n\ntype TranscriptionCapabilities = NonNullable<\n ModelCapabilities['transcription']\n> & {\n languageWithTimestamps: boolean;\n timestamps: ModelCapability;\n diarization: ModelCapability;\n contextBias: ModelCapability;\n};\n\ntype SpeechCapabilities = NonNullable<ModelCapabilities['speech']> & {\n savedVoices: ModelCapability;\n referenceAudio: ModelCapability;\n nonStreaming: boolean;\n outputFormats: readonly string[];\n};\n\ntype MistralModelEntry = ModelEntry & {\n providerOptions?: {\n [Section in keyof typeof mistralProviderOptions]?: Record<\n keyof (typeof mistralProviderOptions)[Section],\n ModelCapability\n >;\n };\n capabilities: ModelCapabilities & {\n language?: LanguageCapabilities;\n transcription?: TranscriptionCapabilities;\n speech?: SpeechCapabilities;\n };\n};\n\n// Preserve the provider page's documented model set and image-input exceptions.\nconst documentedLanguageModels: Record<string, boolean> = {\n 'labs-leanstral-1-5': true,\n 'magistral-medium-latest': true,\n 'magistral-small-latest': true,\n 'ministral-14b-latest': true,\n 'ministral-8b-latest': true,\n 'mistral-large-latest': true,\n 'mistral-medium-latest': true,\n 'mistral-small-latest': true,\n 'voxtral-small-latest': false,\n 'zai-glm-5-2': false,\n};\n\n// Known non-reasoning models from https://api.mistral.ai/v1/models\n// (2026-10-06). Unknown IDs inherit current reasoning configuration support.\nconst modelsWithoutReasoningEffort = new Set<MistralChatModelId>([\n 'codestral-2508',\n 'codestral-latest',\n 'ministral-14b-2512',\n 'ministral-14b-latest',\n 'ministral-3b-2512',\n 'ministral-3b-latest',\n 'ministral-8b-2512',\n 'ministral-8b-latest',\n 'mistral-code-fim-latest',\n 'mistral-code-latest',\n 'mistral-large-latest',\n 'mistral-large-2512',\n 'voxtral-small-2507',\n 'voxtral-small-latest',\n]);\n\n// GLM-5.3 models accept only low, high, and max reasoning effort and cannot\n// disable reasoning. Omitting reasoning_effort uses max.\n// https://docs.mistral.ai/studio/conversations/reasoning (2026-10-26)\nconst modelsWithLowHighMaxReasoningEffort = new Set<MistralChatModelId>([\n 'zai-glm-5',\n 'zai-glm-5-3',\n 'zai-glm-5-3-flash',\n 'zai-glm-latest',\n]);\n\n// https://api.mistral.ai/v1/models (2026-10-06)\nconst reasoningEffortModelIds = new Set<MistralChatModelId>([\n 'glm-5-2',\n 'labs-leanstral-1-5',\n 'labs-leanstral-1-5-1',\n 'magistral-medium-latest',\n 'magistral-small-latest',\n 'mistral-large-4',\n 'mistral-large-4-0',\n 'mistral-medium',\n 'mistral-medium-2604',\n 'mistral-medium-3',\n 'mistral-medium-3-5',\n 'mistral-medium-3.5',\n 'mistral-medium-latest',\n 'mistral-small-2603',\n 'mistral-small-latest',\n 'mistral-vibe-cli-fast',\n 'mistral-vibe-cli-latest',\n 'mistral-vibe-cli-with-tools',\n 'zai-glm-5-2',\n]);\n\nfunction reasoningCapabilities(\n efforts: readonly ReasoningEffort[],\n): ReasoningCapabilities {\n return { support: efforts.length > 0, efforts };\n}\n\nfunction createLanguageModelEntry(\n modelId: string,\n image?: boolean,\n): MistralLanguageModelEntry {\n const reasoning = reasoningCapabilities(\n modelsWithoutReasoningEffort.has(modelId)\n ? []\n : modelsWithLowHighMaxReasoningEffort.has(modelId)\n ? ['low', 'high', 'max']\n : ['none', 'high'],\n );\n const conversationReasoning = reasoningCapabilities(\n reasoningEffortModelIds.has(modelId) ? ['none', 'high'] : [],\n );\n const chatOnly = { condition: 'Only supported on the Chat API.' };\n return {\n capabilities: {\n language: {\n inputs: { image: image ?? 'unknown', audio: 'unknown' },\n objectGeneration: image != null ? true : 'unknown',\n tools: {\n usage: image != null ? true : 'unknown',\n streaming: image != null ? true : 'unknown',\n },\n reasoning,\n sampling: { temperature: 'unknown', topP: 'unknown', logprobs: false },\n endpoints: { conversation: { reasoning: conversationReasoning } },\n },\n },\n providerOptions: {\n language: declareProviderOptions(\n mistralProviderOptions.language,\n image != null ? true : 'unknown',\n {\n safePrompt: chatOnly,\n documentImageLimit: chatOnly,\n documentPageLimit: chatOnly,\n parallelToolCalls: chatOnly,\n promptCacheKey: chatOnly,\n reasoningEffort:\n reasoning.support && !conversationReasoning.support\n ? chatOnly\n : reasoning.support,\n },\n ),\n },\n };\n}\n\nfunction createTranscriptionModelEntry(modelId: string, declared: boolean) {\n // Only these legacy IDs reject pinned language combined with timestamps.\n // Future and custom IDs keep the existing permissive request behavior.\n const languageWithTimestamps = ![\n 'voxtral-mini-2507',\n 'voxtral-mini-2602',\n 'voxtral-mini-latest',\n ].includes(modelId);\n const support = declared ? true : 'unknown';\n const capabilities: TranscriptionCapabilities = {\n transcription: support,\n streaming: false,\n duration: support,\n segments: support,\n language: support,\n languageWithTimestamps,\n timestamps: support,\n diarization: support,\n contextBias: support,\n };\n return {\n capabilities: { transcription: capabilities },\n providerOptions: {\n transcription: declareProviderOptions(\n mistralProviderOptions.transcription,\n support,\n {\n returnLanguage: {\n condition: 'Only supported when language is not pinned.',\n },\n timestampGranularities: languageWithTimestamps\n ? support\n : {\n condition: 'Only supported when language is not pinned.',\n },\n },\n ),\n },\n };\n}\n\nfunction createSpeechModelEntry(declared: boolean) {\n const support = declared ? true : 'unknown';\n const capabilities: SpeechCapabilities = {\n instructions: false,\n savedVoices: support,\n referenceAudio: support,\n nonStreaming: true,\n outputFormats: ['pcm', 'wav', 'mp3', 'flac', 'opus'],\n };\n return {\n capabilities: { speech: capabilities },\n providerOptions: {\n speech: declareProviderOptions(\n mistralProviderOptions.speech,\n support,\n {},\n ),\n },\n };\n}\n\nfunction createEmbeddingModelEntry(\n defaultDimensions: number,\n customDimensions: boolean,\n) {\n return {\n capabilities: { embedding: { defaultDimensions, customDimensions } },\n providerOptions: {\n embedding: declareProviderOptions(\n mistralProviderOptions.embedding,\n true,\n {\n outputDimension: customDimensions,\n outputDtype: customDimensions,\n },\n ),\n },\n };\n}\n\nexport const mistralModelCatalog: Readonly<Record<string, MistralModelEntry>> =\n {\n ...Object.fromEntries(\n Object.entries(documentedLanguageModels).map(([modelId, image]) => [\n modelId,\n createLanguageModelEntry(modelId, image),\n ]),\n ),\n 'voxtral-mini-transcribe-3-0': createTranscriptionModelEntry(\n 'voxtral-mini-transcribe-3-0',\n true,\n ),\n 'voxtral-small-transcribe-3-0': createTranscriptionModelEntry(\n 'voxtral-small-transcribe-3-0',\n true,\n ),\n 'voxtral-mini-latest': createTranscriptionModelEntry(\n 'voxtral-mini-latest',\n true,\n ),\n 'voxtral-mini-tts-3-0': createSpeechModelEntry(true),\n 'voxtral-mini-tts-2603': createSpeechModelEntry(true),\n 'mistral-embed': createEmbeddingModelEntry(1024, false),\n // https://docs.mistral.ai/studio/knowledge-rag/embeddings/code_embeddings\n 'codestral-embed': createEmbeddingModelEntry(1536, true),\n };\n\nfunction findModelEntry(modelId: string) {\n return Object.prototype.hasOwnProperty.call(mistralModelCatalog, modelId)\n ? mistralModelCatalog[modelId]\n : undefined;\n}\n\nexport function getMistralLanguageModelEntry(\n modelId: string,\n): MistralLanguageModelEntry {\n const entry = findModelEntry(modelId);\n return entry?.capabilities.language != null &&\n entry.providerOptions?.language != null\n ? {\n capabilities: { language: entry.capabilities.language },\n providerOptions: { language: entry.providerOptions.language },\n }\n : createLanguageModelEntry(modelId);\n}\n\nexport function getMistralTranscriptionModelEntry(modelId: string) {\n const capabilities = findModelEntry(modelId)?.capabilities.transcription;\n return capabilities != null\n ? { capabilities: { transcription: capabilities } }\n : createTranscriptionModelEntry(modelId, false);\n}\n\nexport function getMistralSpeechModelEntry(modelId: string) {\n const capabilities = findModelEntry(modelId)?.capabilities.speech;\n return capabilities != null\n ? { capabilities: { speech: capabilities } }\n : createSpeechModelEntry(false);\n}\n\nfunction declareProviderOptions<Option extends string>(\n definitions: Readonly<Record<Option, ProviderOptionDefinition>>,\n support: ModelCapability,\n exceptions: Partial<Record<Option, ModelCapability>>,\n): Record<Option, ModelCapability> {\n return Object.fromEntries(\n (Object.keys(definitions) as Option[]).map(option => [\n option,\n exceptions[option] ?? support,\n ]),\n ) as Record<Option, ModelCapability>;\n}\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n type InferSchema,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type ParseResult,\n type StreamingToolCallDelta,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n convertMistralUsage,\n mistralUsageSchema,\n type MistralUsage,\n} from './convert-mistral-usage';\nimport { convertToMistralChatMessages } from './convert-to-mistral-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapMistralFinishReason } from './map-mistral-finish-reason';\nimport {\n mistralLanguageModelChatOptionsValidator,\n type MistralChatModelId,\n} from './mistral-chat-language-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { prepareTools } from './mistral-prepare-tools';\nimport { getMistralLanguageModelEntry } from './mistral-model-catalog';\n\ntype MistralChatConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport class MistralChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: MistralChatModelId;\n\n private readonly config: MistralChatConfig;\n private readonly generateId: () => string;\n\n static [WORKFLOW_SERIALIZE](model: MistralChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralChatModelId;\n config: MistralChatConfig;\n }) {\n return new MistralChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: MistralChatModelId, config: MistralChatConfig) {\n this.modelId = modelId;\n this.config = config;\n this.generateId = config.generateId ?? generateId;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n reasoning,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const options =\n (await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralLanguageModelChatOptionsValidator,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const { reasoning: reasoningCapabilities } = getMistralLanguageModelEntry(\n this.modelId,\n ).capabilities.language;\n\n let resolvedReasoningEffort: string | undefined;\n if (reasoningCapabilities.support) {\n resolvedReasoningEffort = mapReasoningToProviderEffort({\n reasoning,\n providerOptionsEffort: options.reasoningEffort,\n effortMap: Object.fromEntries(\n reasoningCapabilities.efforts.map(effort => [effort, effort]),\n ),\n warnings,\n });\n } else if (isCustomReasoning(reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This model does not support reasoning configuration.',\n });\n }\n\n const structuredOutputs = options.structuredOutputs ?? true;\n const strictJsonSchema = options.strictJsonSchema ?? false;\n\n // For Mistral we need to instruct the model when using JSON Object mode.\n // https://docs.mistral.ai/capabilities/structured-output/structured_output_overview/\n if (\n responseFormat?.type === 'json' &&\n (!structuredOutputs || responseFormat.schema == null)\n ) {\n prompt = injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema,\n });\n }\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n\n // model specific settings:\n safe_prompt: options.safePrompt,\n\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n ...(frequencyPenalty != null\n ? { frequency_penalty: frequencyPenalty }\n : {}),\n ...(presencePenalty != null ? { presence_penalty: presencePenalty } : {}),\n stop: stopSequences,\n random_seed: seed,\n reasoning_effort: resolvedReasoningEffort,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? structuredOutputs && responseFormat?.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // mistral-specific provider options:\n document_image_limit: options.documentImageLimit,\n document_page_limit: options.documentPageLimit,\n ...(options.promptCacheKey !== undefined\n ? { prompt_cache_key: options.promptCacheKey }\n : {}),\n\n // messages:\n messages: convertToMistralChatMessages(prompt),\n };\n\n const {\n tools: mistralTools,\n toolChoice: mistralToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n\n return {\n args: {\n ...baseArgs,\n tools: mistralTools,\n tool_choice: mistralToolChoice,\n ...(mistralTools != null && options.parallelToolCalls !== undefined\n ? { parallel_tool_calls: options.parallelToolCalls }\n : {}),\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // process content parts in order to preserve sequence\n if (\n choice.message.content != null &&\n Array.isArray(choice.message.content)\n ) {\n for (const part of choice.message.content) {\n if (part.type === 'thinking') {\n const reasoningText = extractReasoningContent(part.thinking);\n if (reasoningText.length > 0) {\n content.push({ type: 'reasoning', text: reasoningText });\n }\n } else if (part.type === 'text') {\n if (part.text.length > 0) {\n content.push({ type: 'text', text: part.text });\n }\n }\n }\n } else {\n // handle legacy string content\n const text = extractTextContent(choice.message.content);\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n }\n\n // when there is a trailing assistant message, mistral will send the\n // content of that message again. we skip this repeated content to\n // avoid duplication, e.g. in continuation mode.\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertMistralUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // A clean end without the provider's completion signal is interrupted.\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'interrupted',\n raw: undefined,\n };\n let usage: MistralUsage | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n let toolCallTracker: StreamingToolCallTracker<StreamingToolCallDelta>;\n\n const generateId = this.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof mistralChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n if (value.usage != null) {\n usage = value.usage;\n }\n\n const choice = value.choices[0];\n const delta = choice.delta;\n\n const textContent = extractTextContent(delta.content);\n\n if (delta.content != null && Array.isArray(delta.content)) {\n for (const part of delta.content) {\n if (part.type === 'thinking') {\n const reasoningDelta = extractReasoningContent(part.thinking);\n if (reasoningDelta.length > 0) {\n if (activeReasoningId == null) {\n // end any active text before starting reasoning\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n activeText = false;\n }\n\n activeReasoningId = generateId();\n controller.enqueue({\n type: 'reasoning-start',\n id: activeReasoningId,\n });\n }\n controller.enqueue({\n type: 'reasoning-delta',\n id: activeReasoningId,\n delta: reasoningDelta,\n });\n }\n }\n }\n }\n\n if (textContent != null && textContent.length > 0) {\n if (!activeText) {\n // if we were in reasoning mode, end it before starting text\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = null;\n }\n controller.enqueue({ type: 'text-start', id: '0' });\n activeText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: textContent,\n });\n }\n\n if (delta?.tool_calls != null) {\n for (const toolCall of delta.tool_calls) {\n toolCallTracker.processDelta(toolCall);\n }\n }\n\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n toolCallTracker.flush();\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertMistralUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction extractReasoningContent(\n thinking: Array<{ type: string; text: string }>,\n) {\n return thinking\n .filter(chunk => chunk.type === 'text')\n .map(chunk => chunk.text)\n .join('');\n}\n\nfunction extractTextContent(\n content: z.infer<ReturnType<typeof mistralContentSchema>>,\n) {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content == null) {\n return undefined;\n }\n\n const textContent: string[] = [];\n\n for (const chunk of content) {\n const { type } = chunk;\n\n switch (type) {\n case 'text':\n textContent.push(chunk.text);\n break;\n case 'thinking':\n case 'image_url':\n case 'reference':\n // thinking, image content, and reference content are currently ignored\n break;\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return textContent.length ? textContent.join('') : undefined;\n}\n\nconst mistralContentSchema = () =>\n z\n .union([\n z.string(),\n z.array(\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('image_url'),\n image_url: z.union([\n z.string(),\n z.object({\n url: z.string(),\n detail: z.string().nullable(),\n }),\n ]),\n }),\n z.object({\n type: z.literal('reference'),\n reference_ids: z.array(z.union([z.string(), z.number()])),\n }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.array(\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n ),\n }),\n ]),\n ),\n ])\n .nullish();\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst mistralChatResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: mistralContentSchema(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.string().nullish(),\n }),\n ),\n object: z.literal('chat.completion'),\n usage: mistralUsageSchema,\n }),\n ),\n);\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst mistralChatChunkSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).optional(),\n content: mistralContentSchema(),\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: mistralUsageSchema.nullish(),\n }),\n ),\n);\n","import {\n UnsupportedFunctionalityError,\n type JSONValue,\n type LanguageModelV4Prompt,\n type LanguageModelV4ToolResultPart,\n} from '@ai-sdk/provider';\nimport type { ToolNameMapping } from '@ai-sdk/provider-utils';\nimport { convertToMistralChatMessages } from './convert-to-mistral-chat-messages';\nimport type {\n MistralAssistantMessageContent,\n MistralToolMessage,\n MistralUserMessageContent,\n} from './mistral-chat-prompt';\n\ntype ConversationInput =\n | {\n type: 'message.input';\n role: 'user' | 'assistant';\n content: Array<\n MistralUserMessageContent | MistralAssistantMessageContent\n >;\n }\n | {\n type: 'function.call';\n tool_call_id: string;\n name: string;\n arguments: string;\n }\n | { type: 'function.result'; tool_call_id: string; result: string };\n\nexport function convertToMistralConversationInputs(\n prompt: LanguageModelV4Prompt,\n toolNameMapping: ToolNameMapping,\n) {\n const inputs: ConversationInput[] = [];\n const instructions: string[] = [];\n const executions = new Set<string>();\n const appendToolResult = (part: LanguageModelV4ToolResultPart) => {\n if (executions.has(part.toolCallId)) {\n let result: JSONValue = null;\n if (part.output.type === 'json') {\n const value = part.output.value;\n const info =\n value != null && typeof value === 'object' && 'info' in value\n ? value.info\n : undefined;\n if (info != null && typeof info === 'object' && !Array.isArray(info)) {\n result = 'result' in info ? (info.result ?? info) : info;\n }\n }\n inputs.push({\n type: 'function.result',\n tool_call_id: part.toolCallId,\n result: typeof result === 'string' ? result : JSON.stringify(result),\n });\n return;\n }\n const converted = convertToMistralChatMessages([\n { role: 'tool', content: [part] },\n ])[0] as MistralToolMessage;\n inputs.push({\n type: 'function.result',\n tool_call_id: part.toolCallId,\n result: converted.content,\n });\n };\n\n for (const message of prompt) {\n switch (message.role) {\n case 'system':\n instructions.push(message.content);\n break;\n case 'user': {\n const converted = convertToMistralChatMessages([message])[0];\n if (converted.role === 'user') {\n inputs.push({\n type: 'message.input',\n role: 'user',\n content: converted.content,\n });\n }\n break;\n }\n case 'assistant': {\n let content: MistralAssistantMessageContent[] = [];\n const flush = () => {\n if (content.length > 0) {\n inputs.push({ type: 'message.input', role: 'assistant', content });\n content = [];\n }\n };\n for (const part of message.content) {\n switch (part.type) {\n case 'text':\n content.push({ type: 'text', text: part.text });\n break;\n case 'reasoning':\n content.push({\n type: 'thinking',\n thinking: [{ type: 'text', text: part.text }],\n closed: true,\n });\n break;\n case 'tool-call': {\n flush();\n if (part.providerExecuted) {\n const name =\n part.providerOptions?.mistral?.function ??\n part.providerOptions?.mistral?.name;\n const args = part.input as { arguments?: unknown } | null;\n // Replay built-in executions as calls and results. Entry IDs\n // and tool.execution output entries cannot be sent as inputs.\n inputs.push({\n type: 'function.call',\n tool_call_id: part.toolCallId,\n name:\n typeof name === 'string'\n ? name\n : toolNameMapping.toProviderToolName(part.toolName),\n arguments:\n typeof args?.arguments === 'string'\n ? args.arguments\n : JSON.stringify(part.input),\n });\n executions.add(part.toolCallId);\n } else {\n inputs.push({\n type: 'function.call',\n tool_call_id: part.toolCallId,\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n });\n }\n break;\n }\n case 'tool-result':\n flush();\n appendToolResult(part);\n break;\n default:\n throw new UnsupportedFunctionalityError({\n functionality: `assistant content type: ${part.type}`,\n });\n }\n }\n flush();\n break;\n }\n case 'tool':\n for (const part of message.content) {\n if (part.type === 'tool-approval-response') {\n continue;\n }\n appendToolResult(part);\n }\n break;\n }\n }\n\n return {\n inputs,\n instructions:\n instructions.length > 0 ? instructions.join('\\n\\n') : undefined,\n };\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport {\n mistralLanguageModelChatOptions,\n type MistralChatModelId,\n type MistralLanguageModelChatOptions,\n} from './mistral-chat-language-model-options';\n\nexport type MistralConversationModelId = MistralChatModelId;\n\nexport const mistralLanguageModelConversationOptions = lazySchema(() =>\n zodSchema(mistralLanguageModelChatOptions()),\n);\n\nexport type MistralLanguageModelConversationOptions =\n MistralLanguageModelChatOptions;\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { MistralToolChoice } from './mistral-chat-prompt';\nimport { createToolNameMapping } from '@ai-sdk/provider-utils';\n\ntype MistralTool =\n | { type: 'web_search' | 'web_search_premium' }\n | {\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n };\n\nexport const mistralProviderToolNames = {\n 'mistral.web_search': 'web_search',\n 'mistral.web_search_premium': 'web_search_premium',\n} as const;\n\nexport function prepareConversationTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: Array<MistralTool> | undefined;\n toolChoice: MistralToolChoice | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const mistralTools: Array<MistralTool> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n if (\n tool.id === 'mistral.web_search' ||\n tool.id === 'mistral.web_search_premium'\n ) {\n mistralTools.push({ type: mistralProviderToolNames[tool.id] });\n continue;\n }\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n mistralTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: mistralTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n return { tools: mistralTools, toolChoice: type, toolWarnings };\n case 'required':\n return { tools: mistralTools, toolChoice: 'any', toolWarnings };\n\n // mistral does not support tool mode directly,\n // so we filter the tools and force the tool choice through 'any'\n case 'tool': {\n const toolName = createToolNameMapping({\n tools,\n providerToolNames: mistralProviderToolNames,\n }).toProviderToolName(toolChoice.toolName);\n return {\n tools: mistralTools.filter(tool =>\n tool.type === 'function'\n ? tool.function.name === toolName\n : tool.type === toolName,\n ),\n toolChoice: 'any',\n toolWarnings,\n };\n }\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4GenerateResult,\n LanguageModelV4Reasoning,\n LanguageModelV4Source,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n LanguageModelV4Text,\n LanguageModelV4ToolCall,\n LanguageModelV4ToolResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n type InferSchema,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n createToolNameMapping,\n generateId,\n injectJsonInstructionIntoMessages,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n convertMistralUsage,\n mistralUsageSchema,\n type MistralUsage,\n} from './convert-mistral-usage';\nimport { convertToMistralConversationInputs } from './convert-to-mistral-conversation-inputs';\nimport {\n mistralLanguageModelConversationOptions,\n type MistralConversationModelId,\n} from './mistral-conversation-language-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { getMistralLanguageModelEntry } from './mistral-model-catalog';\nimport {\n mistralProviderToolNames,\n prepareConversationTools,\n} from './mistral-conversation-prepare-tools';\n\ntype MistralConversationConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport class MistralConversationLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: MistralConversationModelId;\n\n private readonly config: MistralConversationConfig;\n private readonly generateId: () => string;\n\n static [WORKFLOW_SERIALIZE](model: MistralConversationLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralConversationModelId;\n config: MistralConversationConfig;\n }) {\n return new MistralConversationLanguageModel(\n options.modelId,\n options.config,\n );\n }\n\n constructor(\n modelId: MistralConversationModelId,\n config: MistralConversationConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n this.generateId = config.generateId ?? generateId;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n reasoning,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const options =\n (await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralLanguageModelConversationOptions,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const { reasoning: reasoningCapabilities } = getMistralLanguageModelEntry(\n this.modelId,\n ).capabilities.language.endpoints.conversation;\n\n let resolvedReasoningEffort: string | undefined;\n if (reasoningCapabilities.support) {\n resolvedReasoningEffort = mapReasoningToProviderEffort({\n reasoning,\n providerOptionsEffort: options.reasoningEffort,\n effortMap: Object.fromEntries(\n reasoningCapabilities.efforts.map(effort => [effort, effort]),\n ),\n warnings,\n });\n } else if (isCustomReasoning(reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This model does not support reasoning configuration.',\n });\n }\n\n const structuredOutputs = options.structuredOutputs ?? true;\n const strictJsonSchema = options.strictJsonSchema ?? false;\n\n // For Mistral we need to instruct the model when using JSON Object mode.\n // https://docs.mistral.ai/capabilities/structured-output/structured_output_overview/\n if (\n responseFormat?.type === 'json' &&\n (!structuredOutputs || responseFormat.schema == null)\n ) {\n prompt = injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema,\n });\n }\n\n const baseArgs = {\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n ...(frequencyPenalty != null\n ? { frequency_penalty: frequencyPenalty }\n : {}),\n ...(presencePenalty != null ? { presence_penalty: presencePenalty } : {}),\n stop: stopSequences,\n random_seed: seed,\n reasoning_effort: resolvedReasoningEffort,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? structuredOutputs && responseFormat?.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n };\n\n const {\n tools: mistralTools,\n toolChoice: mistralToolChoice,\n toolWarnings,\n } = prepareConversationTools({ tools, toolChoice });\n\n for (const [feature, value] of Object.entries({\n safePrompt: options.safePrompt,\n documentImageLimit: options.documentImageLimit,\n documentPageLimit: options.documentPageLimit,\n promptCacheKey: options.promptCacheKey,\n parallelToolCalls: options.parallelToolCalls,\n })) {\n if (value != null) {\n warnings.push({\n type: 'unsupported',\n feature,\n details: 'Not supported by the Mistral Conversations API.',\n });\n }\n }\n\n return {\n args: {\n model: this.modelId,\n store: false,\n ...convertToMistralConversationInputs(\n prompt,\n createToolNameMapping({\n tools,\n providerToolNames: mistralProviderToolNames,\n }),\n ),\n tools: mistralTools,\n completion_args: { ...baseArgs, tool_choice: mistralToolChoice },\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n rawValue: rawResponse,\n responseHeaders,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/conversations`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralConversationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const converter = createContentConverter({\n tools: options.tools,\n generateId: this.generateId,\n });\n const content: LanguageModelV4Content[] = [];\n let hasFunctionCalls = false;\n let modelId: string | undefined;\n\n for (const output of response.outputs) {\n switch (output.type) {\n case 'tool.execution':\n content.push(...converter.convertTool(output));\n break;\n case 'function.call':\n hasFunctionCalls = true;\n content.push({\n type: 'tool-call',\n toolCallId: output.tool_call_id,\n toolName: output.name,\n input:\n typeof output.arguments === 'string'\n ? output.arguments\n : JSON.stringify(output.arguments),\n });\n break;\n case 'message.output':\n modelId = output.model ?? modelId;\n for (const chunk of typeof output.content === 'string'\n ? [{ type: 'text' as const, text: output.content }]\n : output.content) {\n content.push(...converter.convertChunk(chunk));\n }\n break;\n }\n }\n\n return {\n content,\n finishReason: {\n unified: hasFunctionCalls ? 'tool-calls' : 'stop',\n raw: undefined,\n },\n usage: convertMistralUsage(response.usage),\n request: { body },\n response: {\n id: response.conversation_id,\n modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/conversations`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralConversationChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const converter = createContentConverter({\n tools: options.tools,\n generateId: this.generateId,\n });\n const executions = new Map<\n string,\n { name: string; arguments: string; function?: string | null }\n >();\n let toolCallTracker: StreamingToolCallTracker;\n let active: { id: string; type: 'text' | 'reasoning' } | undefined;\n let usage: MistralUsage | undefined;\n let hasFunctionCalls = false;\n let hasError = false;\n let isDone = false;\n let hasModelId = false;\n const closeContent = (\n controller: TransformStreamDefaultController<LanguageModelV4StreamPart>,\n ) => {\n if (active != null) {\n controller.enqueue({\n type: active.type === 'text' ? 'text-end' : 'reasoning-end',\n id: active.id,\n });\n active = undefined;\n }\n };\n\n const generateId = this.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof mistralConversationChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n hasError = true;\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n const event = chunk.value;\n switch (event.type) {\n case 'conversation.response.started':\n controller.enqueue({\n type: 'response-metadata',\n id: event.conversation_id,\n ...(event.created_at != null\n ? { timestamp: new Date(event.created_at) }\n : {}),\n });\n break;\n case 'conversation.response.done':\n usage = event.usage ?? undefined;\n isDone = true;\n break;\n case 'conversation.response.error':\n hasError = true;\n controller.enqueue({ type: 'error', error: event });\n break;\n case 'message.output.delta': {\n if (!hasModelId && event.model != null) {\n hasModelId = true;\n controller.enqueue({\n type: 'response-metadata',\n modelId: event.model,\n });\n }\n for (const part of converter.convertChunk(\n typeof event.content === 'string'\n ? { type: 'text', text: event.content }\n : event.content,\n )) {\n if (part.type === 'text' || part.type === 'reasoning') {\n const id = `${event.id}-${event.content_index ?? 0}`;\n if (active?.id !== id || active.type !== part.type) {\n closeContent(controller);\n active = { id, type: part.type };\n controller.enqueue({\n type:\n part.type === 'text'\n ? 'text-start'\n : 'reasoning-start',\n id,\n });\n }\n controller.enqueue({\n type:\n part.type === 'text' ? 'text-delta' : 'reasoning-delta',\n id,\n delta: part.text,\n });\n } else if (part.type === 'source') {\n controller.enqueue(part);\n }\n }\n break;\n }\n case 'function.call.delta':\n closeContent(controller);\n hasFunctionCalls = true;\n toolCallTracker.processDelta({\n id: event.tool_call_id,\n index: event.output_index,\n function: { name: event.name, arguments: event.arguments },\n });\n break;\n case 'tool.execution.started':\n case 'tool.execution.delta': {\n closeContent(controller);\n const execution = executions.get(event.id);\n if (execution == null) {\n executions.set(event.id, {\n name: event.name,\n arguments: event.arguments,\n function: event.function,\n });\n controller.enqueue({\n type: 'tool-input-start',\n id: event.id,\n toolName: converter.toolNameMapping.toCustomToolName(\n event.name,\n ),\n providerExecuted: true,\n });\n } else {\n execution.arguments += event.arguments;\n }\n break;\n }\n case 'tool.execution.done': {\n const execution = executions.get(event.id);\n if (execution == null) {\n hasError = true;\n controller.enqueue({\n type: 'error',\n error: new Error(\n `Missing tool execution start for ${event.id}`,\n ),\n });\n break;\n }\n controller.enqueue({\n type: 'tool-input-delta',\n id: event.id,\n delta: JSON.stringify({ arguments: execution.arguments }),\n });\n controller.enqueue({ type: 'tool-input-end', id: event.id });\n for (const part of converter.convertTool({\n type: 'tool.execution',\n id: event.id,\n name: execution.name,\n arguments: execution.arguments,\n function: event.function ?? execution.function,\n info: event.info,\n })) {\n controller.enqueue(part);\n }\n executions.delete(event.id);\n break;\n }\n }\n },\n\n flush(controller) {\n closeContent(controller);\n toolCallTracker.flush();\n controller.enqueue({\n type: 'finish',\n finishReason: {\n unified:\n hasError || !isDone || executions.size > 0\n ? 'error'\n : hasFunctionCalls\n ? 'tool-calls'\n : 'stop',\n raw: undefined,\n },\n usage: convertMistralUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction createContentConverter({\n tools,\n generateId,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n generateId: () => string;\n}) {\n const toolNameMapping = createToolNameMapping({\n tools,\n providerToolNames: mistralProviderToolNames,\n });\n const sourceUrls = new Set<string>();\n\n return {\n toolNameMapping,\n convertChunk(\n chunk: z.infer<ReturnType<typeof mistralConversationContentSchema>>,\n ): Array<\n LanguageModelV4Text | LanguageModelV4Reasoning | LanguageModelV4Source\n > {\n switch (chunk.type) {\n case 'text':\n return chunk.text.length > 0\n ? [{ type: 'text', text: chunk.text }]\n : [];\n case 'thinking': {\n const text = chunk.thinking.map(part => part.text).join('');\n return text.length > 0 ? [{ type: 'reasoning', text }] : [];\n }\n case 'tool_reference':\n if (chunk.url == null || sourceUrls.has(chunk.url)) {\n return [];\n }\n const id = generateId();\n sourceUrls.add(chunk.url);\n return [\n {\n type: 'source',\n sourceType: 'url',\n id,\n url: chunk.url,\n title: chunk.title ?? chunk.url,\n },\n ];\n }\n },\n convertTool(\n output: z.infer<\n ReturnType<typeof mistralConversationToolExecutionSchema>\n >,\n ): [LanguageModelV4ToolCall, LanguageModelV4ToolResult] {\n const toolName = toolNameMapping.toCustomToolName(output.name);\n return [\n {\n type: 'tool-call',\n toolCallId: output.id,\n toolName,\n input: JSON.stringify({ arguments: output.arguments }),\n providerExecuted: true,\n providerMetadata: {\n mistral: {\n type: 'tool.execution',\n name: output.name,\n ...(output.function != null ? { function: output.function } : {}),\n },\n },\n },\n {\n type: 'tool-result',\n toolCallId: output.id,\n toolName,\n result: { ...(output.info != null ? { info: output.info } : {}) },\n },\n ];\n },\n };\n}\n\nconst mistralConversationContentSchema = () =>\n z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), text: z.string() }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.array(\n z.object({ type: z.literal('text'), text: z.string() }),\n ),\n }),\n z.object({\n type: z.literal('tool_reference'),\n tool: z.string().nullish(),\n title: z.string().nullish(),\n url: z.string().nullish(),\n }),\n ]);\nconst mistralConversationMessageContentSchema = () =>\n z.union([z.string(), z.array(mistralConversationContentSchema())]);\nconst mistralConversationToolExecutionSchema = () =>\n z.object({\n type: z.literal('tool.execution'),\n id: z.string(),\n name: z.string(),\n arguments: z.string(),\n function: z.string().nullish(),\n info: z.record(z.string(), z.json()).nullish(),\n });\nconst mistralConversationFunctionCallSchema = () =>\n z.object({\n type: z.literal('function.call'),\n tool_call_id: z.string(),\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.string(), z.json())]),\n });\nconst mistralConversationUsageSchema = () =>\n mistralUsageSchema.extend({\n prompt_tokens: z.number().default(0),\n completion_tokens: z.number().default(0),\n total_tokens: z.number().default(0),\n });\nconst mistralConversationResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n conversation_id: z.string(),\n outputs: z.array(\n z.discriminatedUnion('type', [\n mistralConversationToolExecutionSchema(),\n mistralConversationFunctionCallSchema(),\n z.object({\n type: z.literal('message.output'),\n content: mistralConversationMessageContentSchema(),\n model: z.string().nullish(),\n }),\n ]),\n ),\n usage: mistralConversationUsageSchema().nullish(),\n }),\n ),\n);\nconst mistralConversationChunkSchema = lazySchema(() =>\n zodSchema(\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('conversation.response.started'),\n conversation_id: z.string(),\n created_at: z.string().nullish(),\n }),\n z.object({\n type: z.literal('conversation.response.done'),\n usage: mistralConversationUsageSchema().nullish(),\n }),\n z.object({\n type: z.literal('conversation.response.error'),\n message: z.string(),\n code: z.number(),\n }),\n z.object({\n type: z.literal('message.output.delta'),\n id: z.string(),\n content_index: z.number().nullish(),\n content: z.union([z.string(), mistralConversationContentSchema()]),\n model: z.string().nullish(),\n }),\n z.object({\n type: z.literal('function.call.delta'),\n tool_call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n output_index: z.number().nullish(),\n }),\n z.object({\n type: z.enum(['tool.execution.started', 'tool.execution.delta']),\n id: z.string(),\n name: z.string(),\n arguments: z.string(),\n function: z.string().nullish(),\n }),\n z.object({\n type: z.literal('tool.execution.done'),\n id: z.string(),\n name: z.string(),\n function: z.string().nullish(),\n info: z.record(z.string(), z.json()).nullish(),\n }),\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\nexport type MistralEmbeddingModelId =\n | 'mistral-embed'\n | 'mistral-embed-2312'\n | 'codestral-embed'\n | 'codestral-embed-2505'\n | (string & {});\n\nexport const mistralEmbeddingModelOptions = z.object({\n /**\n * Additional metadata to attach to the embedding request.\n */\n metadata: z.record(z.string(), z.any()).optional(),\n\n /**\n * The dimension of the output embeddings when supported by the model.\n */\n outputDimension: z.number().int().positive().optional(),\n\n /**\n * The data type of the output embeddings when supported by the model.\n */\n outputDtype: z\n .enum(['float', 'int8', 'uint8', 'binary', 'ubinary'])\n .optional(),\n});\n\nexport type MistralEmbeddingModelOptions = z.infer<\n typeof mistralEmbeddingModelOptions\n>;\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n mistralEmbeddingModelOptions,\n type MistralEmbeddingModelId,\n} from './mistral-embedding-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\n\ntype MistralEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n};\n\nexport class MistralEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: MistralEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 32;\n readonly supportsParallelCalls = false;\n\n private readonly config: MistralEmbeddingConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: MistralEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralEmbeddingModelId;\n config: MistralEmbeddingConfig;\n }) {\n return new MistralEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(\n modelId: MistralEmbeddingModelId,\n config: MistralEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n dimensions,\n abortSignal,\n headers,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const mistralOptions =\n (await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralEmbeddingModelOptions,\n })) ?? {};\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/embeddings`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body: {\n model: this.modelId,\n input: values,\n metadata: mistralOptions.metadata,\n output_dimension: mistralOptions.outputDimension ?? dimensions,\n output_dtype: mistralOptions.outputDtype,\n encoding_format: 'float',\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n MistralTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.data.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst MistralTextEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n data: z.array(z.object({ embedding: z.array(z.number()) })),\n usage: z.object({ prompt_tokens: z.number() }).nullish(),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MistralSpeechModelId =\n | 'voxtral-mini-tts-2603'\n | 'voxtral-mini-tts-3-0'\n | 'voxtral-mini-tts-3'\n | 'voxtral-mini-tts-latest'\n | (string & {});\n\nexport const mistralSpeechModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Base64-encoded reference audio for one-off voice cloning.\n *\n * When provided, this takes precedence over the standard `voice` option.\n */\n refAudio: z.string().min(1).optional(),\n\n /**\n * How expressive the speech is, from 1 to 5. Higher values trade voice\n * similarity and stability for stronger delivery. Supported by Voxtral 3.\n */\n expressiveness: z.number().min(1).max(5).optional(),\n\n /**\n * Pronunciation hints mapping words to lists of IPA phonemes.\n * Supported by Voxtral 3.\n */\n phonemeHints: z\n .record(z.string().min(1), z.array(z.string().min(1)).min(1))\n .optional(),\n }),\n ),\n);\n\nexport type MistralSpeechModelOptions = InferSchema<\n typeof mistralSpeechModelOptions\n>;\n","import type { SharedV4Warning, SpeechModelV4 } from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { getMistralSpeechModelEntry } from './mistral-model-catalog';\nimport {\n mistralSpeechModelOptions,\n type MistralSpeechModelId,\n} from './mistral-speech-model-options';\n\ninterface MistralSpeechModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\ntype MistralSpeechOutputFormat = 'pcm' | 'wav' | 'mp3' | 'flac' | 'opus';\n\nexport class MistralSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n static [WORKFLOW_SERIALIZE](model: MistralSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralSpeechModelId;\n config: MistralSpeechModelConfig;\n }) {\n return new MistralSpeechModel(options.modelId, options.config);\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: MistralSpeechModelId,\n private readonly config: MistralSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat = 'mp3',\n instructions,\n speed,\n language,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n const mistralOptions = await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralSpeechModelOptions,\n });\n\n const { speech } = getMistralSpeechModelEntry(this.modelId).capabilities;\n let responseFormat: MistralSpeechOutputFormat = 'mp3';\n if (speech.outputFormats.includes(outputFormat)) {\n responseFormat = outputFormat as MistralSpeechOutputFormat;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n\n if (speech.instructions === false && instructions != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details:\n 'Mistral speech models do not support the `instructions` option. ' +\n 'Use a reference audio clip to guide delivery.',\n });\n }\n\n if (speed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'speed',\n details:\n 'Mistral speech models do not support the `speed` option. It was ignored.',\n });\n }\n\n if (language != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details:\n 'Mistral speech models do not support the `language` option. ' +\n 'Language is inferred from the input text and voice.',\n });\n }\n\n const refAudio = mistralOptions?.refAudio;\n const requestBody = {\n model: this.modelId,\n input: text,\n voice_id: refAudio == null ? voice : undefined,\n ref_audio: refAudio,\n expressiveness: mistralOptions?.expressiveness,\n phoneme_hints: mistralOptions?.phonemeHints,\n response_format: responseFormat,\n stream: false,\n };\n\n const requestBodyValues = {\n ...requestBody,\n ref_audio: refAudio == null ? undefined : '[redacted]',\n };\n\n return { requestBody, requestBodyValues, warnings };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, requestBodyValues, warnings } =\n await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postToApi({\n url: `${this.config.baseURL}/audio/speech`,\n headers: combineHeaders(\n { 'Content-Type': 'application/json' },\n await resolve(this.config.headers),\n options.headers,\n ),\n body: {\n content: JSON.stringify(requestBody),\n values: requestBodyValues,\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralSpeechResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio: response.audio_data,\n warnings,\n request: {\n body: JSON.stringify(requestBodyValues),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst mistralSpeechResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n audio_data: z.string(),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MistralTranscriptionModelId =\n | 'voxtral-mini-2602'\n | 'voxtral-mini-latest'\n | 'voxtral-mini-transcribe-3-0'\n | 'voxtral-mini-transcribe-3'\n | 'voxtral-mini-transcribe-latest'\n | 'voxtral-small-transcribe-3-0'\n | 'voxtral-small-transcribe-3'\n | 'voxtral-small-transcribe-latest'\n | (string & {});\n\n// https://docs.mistral.ai/api/endpoint/audio/transcriptions\nexport const mistralTranscriptionModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * The language of the audio, e.g. \"en\". Providing the language can boost\n * accuracy.\n */\n language: z.string().min(1).optional(),\n\n /**\n * Return the detected language. Cannot be combined with `language`.\n */\n returnLanguage: z.boolean().optional(),\n\n /**\n * The sampling temperature.\n */\n temperature: z.number().optional(),\n\n /**\n * The timestamp granularities to include in the transcription response.\n * Voxtral 3 supports segment timestamps only.\n */\n timestampGranularities: z\n .array(z.enum(['segment', 'word']))\n .min(1)\n .optional(),\n\n /**\n * Whether to identify speakers in the transcription.\n * Voxtral 3 requires segment timestamps when diarization is enabled.\n */\n diarize: z.boolean().optional(),\n\n /**\n * Words or phrases to guide the model toward correct spellings of names,\n * technical terms, or domain-specific vocabulary.\n *\n * Voxtral 3 also accepts phrases and descriptions of the recording,\n * including spaces and punctuation. Entries share the context window\n * with the audio.\n */\n contextBias: z.array(z.string().min(1)).optional(),\n }),\n ),\n);\n\nexport type MistralTranscriptionModelOptions = InferSchema<\n typeof mistralTranscriptionModelOptions\n>;\n","import {\n InvalidArgumentError,\n type JSONObject,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\n parseProviderOptions,\n postFormDataToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { getMistralTranscriptionModelEntry } from './mistral-model-catalog';\nimport {\n mistralTranscriptionModelOptions,\n type MistralTranscriptionModelId,\n} from './mistral-transcription-model-options';\n\ntype MistralTranscriptionModelConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n};\n\nexport class MistralTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n\n static [WORKFLOW_SERIALIZE](model: MistralTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralTranscriptionModelId;\n config: MistralTranscriptionModelConfig;\n }) {\n return new MistralTranscriptionModel(options.modelId, options.config);\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: MistralTranscriptionModelId,\n private readonly config: MistralTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n const mistralOptions = await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralTranscriptionModelOptions,\n });\n\n if (\n !getMistralTranscriptionModelEntry(this.modelId).capabilities\n .transcription.languageWithTimestamps &&\n mistralOptions?.language != null &&\n mistralOptions.timestampGranularities != null\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message:\n 'providerOptions.mistral.language cannot be combined with providerOptions.mistral.timestampGranularities',\n });\n }\n\n if (mistralOptions?.language != null && mistralOptions.returnLanguage) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message:\n 'providerOptions.mistral.language cannot be combined with providerOptions.mistral.returnLanguage',\n });\n }\n\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio as Uint8Array<ArrayBuffer>])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('model', this.modelId);\n formData.append(\n 'file',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${mediaTypeToExtension(mediaType)}`,\n );\n\n if (mistralOptions != null) {\n appendFormValue(formData, 'language', mistralOptions.language);\n appendFormValue(\n formData,\n 'return_language',\n mistralOptions.returnLanguage,\n );\n appendFormValue(formData, 'temperature', mistralOptions.temperature);\n appendFormValue(\n formData,\n 'timestamp_granularities',\n mistralOptions.timestampGranularities,\n );\n appendFormValue(formData, 'diarize', mistralOptions.diarize);\n appendFormValue(formData, 'context_bias', mistralOptions.contextBias);\n }\n\n return { formData, warnings };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: `${this.config.baseURL}/audio/transcriptions`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n formData,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const segments =\n response.segments?.map(segment => ({\n text: segment.text,\n startSecond: segment.start,\n endSecond: segment.end,\n })) ?? [];\n\n const mistralMetadata: JSONObject = {};\n\n if (response.usage != null) {\n mistralMetadata.usage = {\n ...(response.usage.prompt_tokens != null && {\n promptTokens: response.usage.prompt_tokens,\n }),\n ...(response.usage.completion_tokens != null && {\n completionTokens: response.usage.completion_tokens,\n }),\n ...(response.usage.total_tokens != null && {\n totalTokens: response.usage.total_tokens,\n }),\n ...(response.usage.prompt_audio_seconds != null && {\n promptAudioSeconds: response.usage.prompt_audio_seconds,\n }),\n ...(response.usage.request_count != null && {\n requestCount: response.usage.request_count,\n }),\n };\n }\n\n const providerSegments = response.segments\n ?.filter(\n segment =>\n segment.type != null ||\n segment.score != null ||\n segment.speaker_id != null,\n )\n .map(segment => ({\n text: segment.text,\n startSecond: segment.start,\n endSecond: segment.end,\n ...(segment.type != null && { type: segment.type }),\n ...(segment.score != null && { score: segment.score }),\n ...(segment.speaker_id != null && {\n speakerId: segment.speaker_id,\n }),\n }));\n\n if (providerSegments != null && providerSegments.length > 0) {\n mistralMetadata.segments = providerSegments;\n }\n\n return {\n text: response.text,\n segments,\n language: response.language ?? undefined,\n durationInSeconds:\n response.usage?.prompt_audio_seconds ??\n segments.at(-1)?.endSecond ??\n undefined,\n warnings,\n ...(response.usage != null && { usage: response.usage }),\n response: {\n timestamp: currentDate,\n modelId: response.model,\n headers: responseHeaders,\n body: rawResponse,\n },\n ...(Object.keys(mistralMetadata).length > 0 && {\n providerMetadata: {\n mistral: mistralMetadata,\n },\n }),\n };\n }\n}\n\nfunction appendFormValue(\n formData: FormData,\n key: string,\n value: string | number | boolean | string[] | undefined,\n): void {\n if (value == null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n formData.append(key, item);\n }\n return;\n }\n\n formData.append(key, String(value));\n}\n\nconst mistralTranscriptionResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n model: z.string(),\n text: z.string(),\n language: z.string().nullish(),\n segments: z\n .array(\n z.object({\n type: z.literal('transcription_segment').nullish(),\n text: z.string(),\n start: z.number(),\n end: z.number(),\n score: z.number().nullish(),\n speaker_id: z.string().nullish(),\n }),\n )\n .nullish(),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n prompt_audio_seconds: z.number().nullish(),\n request_count: z.number().nullish(),\n })\n .nullish(),\n }),\n ),\n);\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import type { JSONValue } from '@ai-sdk/provider';\nimport {\n createProviderExecutedToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst inputSchema = lazySchema(() =>\n zodSchema(z.object({ arguments: z.string() })),\n);\nconst outputSchema = lazySchema(() =>\n zodSchema(z.object({ info: z.record(z.string(), z.json()).optional() })),\n);\n\nconst webSearchFactory = createProviderExecutedToolFactory<\n { arguments: string },\n { info?: Record<string, JSONValue> },\n {}\n>({ id: 'mistral.web_search', inputSchema, outputSchema });\n\nconst webSearchPremiumFactory = createProviderExecutedToolFactory<\n { arguments: string },\n { info?: Record<string, JSONValue> },\n {}\n>({ id: 'mistral.web_search_premium', inputSchema, outputSchema });\n\n/** Search the web using Mistral's Conversations API. */\nexport const webSearch = (args: Parameters<typeof webSearchFactory>[0] = {}) =>\n webSearchFactory(args);\n\n/** Search the web and verified news using Mistral's Conversations API. */\nexport const webSearchPremium = (\n args: Parameters<typeof webSearchPremiumFactory>[0] = {},\n) => webSearchPremiumFactory(args);\n","import { webSearch, webSearchPremium } from './web-search';\n\nexport const mistralTools = { webSearch, webSearchPremium };\n","import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type ProviderV4,\n type SpeechModelV4,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolveWith,\n type Resolvable,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MistralChatLanguageModel } from './mistral-chat-language-model';\nimport { MistralConversationLanguageModel } from './mistral-conversation-language-model';\nimport type { MistralChatModelId } from './mistral-chat-language-model-options';\nimport { MistralEmbeddingModel } from './mistral-embedding-model';\nimport type { MistralEmbeddingModelId } from './mistral-embedding-model-options';\nimport { MistralSpeechModel } from './mistral-speech-model';\nimport type { MistralSpeechModelId } from './mistral-speech-model-options';\nimport { MistralTranscriptionModel } from './mistral-transcription-model';\nimport type { MistralTranscriptionModelId } from './mistral-transcription-model-options';\nimport { VERSION } from './version';\nimport { mistralTools } from './tool';\n\nexport interface MistralProvider extends ProviderV4 {\n tools: typeof mistralTools;\n (modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model using the Conversations API, with support for web search.\n */\n conversation(modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: MistralEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel: (modelId: MistralEmbeddingModelId) => EmbeddingModelV4;\n\n /**\n * Creates a model for speech generation (text-to-speech).\n */\n speech(modelId: MistralSpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for speech generation (text-to-speech).\n */\n speechModel(modelId: MistralSpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcription(modelId: MistralTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcriptionModel(\n modelId: MistralTranscriptionModelId,\n ): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: MistralEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: MistralEmbeddingModelId): EmbeddingModelV4;\n}\n\nexport interface MistralProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is `https://api.mistral.ai/v1`.\n */\n baseURL?: string;\n\n /**\n * API key that is being send using the `Authorization` header.\n * It defaults to the `MISTRAL_API_KEY` environment variable.\n */\n apiKey?: Resolvable<string>;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n generateId?: () => string;\n}\n\n/**\n * Create a Mistral AI provider instance.\n */\nexport function createMistral(\n options: MistralProviderSettings = {},\n): MistralProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.mistral.ai/v1';\n\n const getHeaders = () =>\n resolveWith(options.apiKey, apiKey =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey,\n environmentVariableName: 'MISTRAL_API_KEY',\n description: 'Mistral',\n })}`,\n ...options.headers,\n },\n `ai-sdk-mistral/${VERSION}`,\n ),\n );\n\n const createChatModel = (modelId: MistralChatModelId) =>\n new MistralChatLanguageModel(modelId, {\n provider: 'mistral.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId,\n });\n\n const createEmbeddingModel = (modelId: MistralEmbeddingModelId) =>\n new MistralEmbeddingModel(modelId, {\n provider: 'mistral.embedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createConversationModel = (modelId: MistralChatModelId) =>\n new MistralConversationLanguageModel(modelId, {\n provider: 'mistral.conversation',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId,\n });\n\n const createSpeechModel = (modelId: MistralSpeechModelId) =>\n new MistralSpeechModel(modelId, {\n provider: 'mistral.speech',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: MistralTranscriptionModelId) =>\n new MistralTranscriptionModel(modelId, {\n provider: 'mistral.transcription',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: MistralChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Mistral model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.conversation = createConversationModel;\n provider.tools = mistralTools;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\n/**\n * Default Mistral provider instance.\n */\nexport const mistral = createMistral();\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_exhaustiveCheck","_exhaustiveCheck","_exhaustiveCheck","_exhaustiveCheck"],"sources":["../src/convert-mistral-usage.ts","../src/convert-to-mistral-chat-messages.ts","../src/map-mistral-finish-reason.ts","../src/mistral-chat-language-model-options.ts","../src/mistral-error.ts","../src/mistral-prepare-tools.ts","../src/mistral-model-catalog.ts","../src/mistral-chat-language-model.ts","../src/convert-to-mistral-conversation-inputs.ts","../src/mistral-conversation-language-model-options.ts","../src/mistral-conversation-prepare-tools.ts","../src/mistral-conversation-language-model.ts","../src/mistral-embedding-model-options.ts","../src/mistral-embedding-model.ts","../src/mistral-speech-model-options.ts","../src/mistral-speech-model.ts","../src/mistral-transcription-model-options.ts","../src/mistral-transcription-model.ts","../src/version.ts","../src/tool/web-search.ts","../src/tool/index.ts","../src/mistral-provider.ts"],"sourcesContent":["import type { LanguageModelV4Usage } from '@ai-sdk/provider';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst mistralPromptTokensDetailsSchema = z\n .object({\n messages: z.array(z.json()).nullish(),\n cached_tokens: z.number().nullish(),\n audio_tokens: z.number().nullish(),\n })\n .catchall(z.json());\n\nconst mistralCompletionTokensDetailsSchema = z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .catchall(z.json());\n\nexport const mistralUsageSchema = z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_audio_seconds: z.number().nullish(),\n request_count: z.number().nullish(),\n service_tier: z.string().nullish(),\n num_cached_tokens: z.number().nullish(),\n prompt_tokens_details: mistralPromptTokensDetailsSchema.nullish(),\n prompt_token_details: mistralPromptTokensDetailsSchema.nullish(),\n completion_tokens_details: mistralCompletionTokensDetailsSchema.nullish(),\n })\n .catchall(z.json());\n\nexport type MistralUsage = z.infer<typeof mistralUsageSchema>;\n\nexport function convertMistralUsage(\n usage: MistralUsage | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const promptTokens = usage.prompt_tokens;\n const completionTokens = usage.completion_tokens;\n\n const cacheReadTokens =\n usage.num_cached_tokens ??\n usage.prompt_tokens_details?.cached_tokens ??\n usage.prompt_token_details?.cached_tokens ??\n 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens || undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens,\n reasoning: undefined,\n },\n raw: usage,\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n type LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\nimport type {\n MistralAssistantMessageContent,\n MistralPrompt,\n} from './mistral-chat-prompt';\nimport {\n secureJsonParse,\n stringifyWithBigIntAndCycles,\n convertToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\n\nfunction formatFileUrl({ part }: { part: LanguageModelV4FilePart }): string {\n if (part.data.type === 'url') {\n return part.data.url.toString();\n }\n\n if (part.data.type === 'data') {\n return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part data type ${part.data.type}`,\n });\n}\n\nexport function serializeMistralToolCallArguments(input: unknown): string {\n if (typeof input === 'string') {\n try {\n secureJsonParse(input);\n return input;\n } catch {\n return JSON.stringify(input);\n }\n }\n return stringifyWithBigIntAndCycles(input);\n}\n\nexport function convertToMistralChatMessages(\n prompt: LanguageModelV4Prompt,\n): MistralPrompt {\n const messages: MistralPrompt = [];\n\n for (let i = 0; i < prompt.length; i++) {\n const { role, content } = prompt[i];\n const isLastMessage = i === prompt.length - 1;\n\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n\n case 'file': {\n switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n case 'url':\n case 'data': {\n const topLevel = getTopLevelMediaType(part.mediaType);\n\n if (topLevel === 'image') {\n return {\n type: 'image_url',\n image_url: formatFileUrl({ part }),\n };\n } else {\n if (part.data.type === 'data') {\n const fullMediaType = resolveFullMediaType({ part });\n if (fullMediaType !== 'application/pdf') {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Only images and PDF file parts are supported',\n });\n }\n } else if (part.mediaType !== 'application/pdf') {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Only images and PDF file parts are supported',\n });\n }\n\n return {\n type: 'document_url',\n document_url: formatFileUrl({ part }),\n };\n }\n }\n }\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n let hasReasoning = false;\n const contentParts: Array<MistralAssistantMessageContent> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n contentParts.push({ type: 'text', text: part.text });\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: serializeMistralToolCallArguments(part.input),\n },\n });\n break;\n }\n case 'reasoning': {\n hasReasoning = true;\n contentParts.push({\n type: 'thinking',\n thinking: [{ type: 'text', text: part.text }],\n closed: true,\n });\n break;\n }\n default: {\n throw new Error(\n `Unsupported content type in assistant message: ${part.type}`,\n );\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: hasReasoning ? contentParts : text,\n prefix: isLastMessage ? true : undefined,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n const output = toolResponse.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = stringifyWithBigIntAndCycles(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n name: toolResponse.toolName,\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapMistralFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n case 'model_length':\n return 'length';\n case 'tool_calls':\n return 'tool-calls';\n case 'error':\n return 'error';\n default:\n return 'other';\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.mistral.ai/models\nexport type MistralChatModelId =\n | 'codestral-2508'\n | 'codestral-latest'\n | 'glm-5-2'\n | 'labs-leanstral-1-5'\n | 'labs-leanstral-1-5-1'\n | 'magistral-medium-latest'\n | 'magistral-small-latest'\n | 'ministral-14b-2512'\n | 'ministral-14b-latest'\n | 'ministral-3b-2512'\n | 'ministral-3b-latest'\n | 'ministral-8b-2512'\n | 'ministral-8b-latest'\n | 'mistral-code-fim-latest'\n | 'mistral-code-latest'\n | 'mistral-large-4'\n | 'mistral-large-4-0'\n | 'mistral-large-latest'\n | 'mistral-large-2512'\n | 'mistral-medium'\n | 'mistral-medium-latest'\n | 'mistral-medium-2604'\n | 'mistral-medium-3'\n | 'mistral-medium-3-5'\n | 'mistral-medium-3.5'\n | 'mistral-small-2603'\n | 'mistral-small-latest'\n | 'mistral-vibe-cli-fast'\n | 'mistral-vibe-cli-latest'\n | 'mistral-vibe-cli-with-tools'\n | 'voxtral-small-2507'\n | 'voxtral-small-latest'\n | 'zai-glm-5'\n | 'zai-glm-5-2'\n | 'zai-glm-5-3'\n | 'zai-glm-5-3-flash'\n | 'zai-glm-latest'\n | (string & {});\n\nexport const mistralLanguageModelChatOptions = () =>\n z.object({\n /**\n * Whether to inject a safety prompt before all conversations.\n *\n * Defaults to `false`.\n */\n safePrompt: z.boolean().optional(),\n\n documentImageLimit: z.number().optional(),\n documentPageLimit: z.number().optional(),\n\n /**\n * Whether to use structured outputs.\n *\n * @default true\n */\n structuredOutputs: z.boolean().optional(),\n\n /**\n * Whether to use strict JSON schema validation.\n *\n * @default false\n */\n strictJsonSchema: z.boolean().optional(),\n\n /**\n * Whether to enable parallel function calling during tool use.\n * When set to false, the model will use at most one tool per response.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n\n /**\n * A stable identifier used to route requests with shared prompt prefixes to\n * the same cache.\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * Controls the reasoning effort for models that support adjustable reasoning.\n *\n * - `'high'`: Enable reasoning\n * - `'none'`: Disable reasoning\n * - `'low'`, `'max'`: Lowest and highest reasoning effort for models that\n * support them, e.g. `zai-glm-5-3`, which accepts `'low'`, `'high'`, and\n * `'max'` but not `'none'`\n */\n reasoningEffort: z.enum(['high', 'none', 'low', 'max']).optional(),\n });\nexport const mistralLanguageModelChatOptionsValidator = lazySchema(() =>\n zodSchema(mistralLanguageModelChatOptions()),\n);\n\nexport type MistralLanguageModelChatOptions = z.infer<\n ReturnType<typeof mistralLanguageModelChatOptions>\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n createJsonErrorResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst mistralErrorDataSchema = lazySchema(() =>\n zodSchema(\n z.object({\n object: z.literal('error'),\n message: z.string(),\n type: z.string(),\n param: z.string().nullable(),\n code: z.string().nullable(),\n }),\n ),\n);\n\nexport type MistralErrorData = InferSchema<typeof mistralErrorDataSchema>;\n\nexport const mistralFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: mistralErrorDataSchema,\n errorToMessage: data => data.message,\n});\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { MistralToolChoice } from './mistral-chat-prompt';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools:\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }>\n | undefined;\n toolChoice: MistralToolChoice | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const mistralTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n mistralTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: mistralTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n return { tools: mistralTools, toolChoice: type, toolWarnings };\n case 'required':\n return { tools: mistralTools, toolChoice: 'any', toolWarnings };\n\n // mistral does not support tool mode directly,\n // so we filter the tools and force the tool choice through 'any'\n case 'tool':\n return {\n tools: mistralTools.filter(\n tool => tool.function.name === toolChoice.toolName,\n ),\n toolChoice: 'any',\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type {\n ModelCapabilities,\n ModelCapability,\n ModelEntry,\n ProviderOptionDefinition,\n ProviderOptionDefinitions,\n} from '@ai-sdk/provider';\nimport type {\n MistralChatModelId,\n MistralLanguageModelChatOptions,\n} from './mistral-chat-language-model-options';\nimport type { MistralEmbeddingModelOptions } from './mistral-embedding-model-options';\nimport type { MistralSpeechModelOptions } from './mistral-speech-model-options';\nimport type { MistralTranscriptionModelOptions } from './mistral-transcription-model-options';\n\nexport const mistralProviderOptions = {\n language: {\n safePrompt: { description: 'Inject a safety prompt. Chat API only.' },\n documentImageLimit: {\n description: 'Maximum document images. Chat API only.',\n },\n documentPageLimit: {\n description: 'Maximum document pages. Chat API only.',\n },\n structuredOutputs: {\n description: 'Whether to send a JSON response schema.',\n },\n strictJsonSchema: {\n description: 'Whether to use strict JSON schema validation.',\n },\n parallelToolCalls: {\n description: 'Allow parallel function calls. Chat API only.',\n },\n promptCacheKey: { description: 'Cache affinity key. Chat API only.' },\n reasoningEffort: {\n description: 'Reasoning effort for configurable reasoning models.',\n },\n } satisfies Record<\n keyof MistralLanguageModelChatOptions,\n ProviderOptionDefinition\n >,\n embedding: {\n metadata: { description: 'Metadata attached to the embedding request.' },\n outputDimension: { description: 'Output embedding dimensions.' },\n outputDtype: { description: 'Output embedding data type.' },\n } satisfies Record<\n keyof MistralEmbeddingModelOptions,\n ProviderOptionDefinition\n >,\n transcription: {\n language: { description: 'Language of the audio.' },\n returnLanguage: { description: 'Return the detected language.' },\n temperature: { description: 'Sampling temperature.' },\n timestampGranularities: {\n description: 'Timestamp granularities to return.',\n },\n diarize: { description: 'Identify speakers in the transcription.' },\n contextBias: {\n description: 'Vocabulary and context to guide transcription.',\n },\n } satisfies Record<\n keyof MistralTranscriptionModelOptions,\n ProviderOptionDefinition\n >,\n speech: {\n refAudio: {\n description: 'Reference audio for voice cloning, overriding voice.',\n },\n expressiveness: { description: 'Speech expressiveness, from 1 to 5.' },\n phonemeHints: { description: 'Pronunciation hints as IPA phonemes.' },\n } satisfies Record<keyof MistralSpeechModelOptions, ProviderOptionDefinition>,\n} as const satisfies ProviderOptionDefinitions;\n\ntype ReasoningEffort = NonNullable<\n MistralLanguageModelChatOptions['reasoningEffort']\n>;\ntype ReasoningCapabilities = {\n support: boolean;\n efforts: readonly ReasoningEffort[];\n};\n\ntype LanguageCapabilities = NonNullable<ModelCapabilities['language']> & {\n reasoning: ReasoningCapabilities;\n endpoints: {\n conversation: {\n reasoning: ReasoningCapabilities;\n };\n };\n};\n\nexport type MistralLanguageModelEntry = {\n capabilities: { language: LanguageCapabilities };\n providerOptions: {\n language: Record<keyof MistralLanguageModelChatOptions, ModelCapability>;\n };\n};\n\ntype TranscriptionCapabilities = NonNullable<\n ModelCapabilities['transcription']\n> & {\n languageWithTimestamps: boolean;\n timestamps: ModelCapability;\n diarization: ModelCapability;\n contextBias: ModelCapability;\n};\n\ntype SpeechCapabilities = NonNullable<ModelCapabilities['speech']> & {\n savedVoices: ModelCapability;\n referenceAudio: ModelCapability;\n nonStreaming: boolean;\n outputFormats: readonly string[];\n};\n\ntype MistralModelEntry = ModelEntry & {\n providerOptions?: {\n [Section in keyof typeof mistralProviderOptions]?: Record<\n keyof (typeof mistralProviderOptions)[Section],\n ModelCapability\n >;\n };\n capabilities: ModelCapabilities & {\n language?: LanguageCapabilities;\n transcription?: TranscriptionCapabilities;\n speech?: SpeechCapabilities;\n };\n};\n\n// Preserve the provider page's documented model set and image-input exceptions.\nconst documentedLanguageModels: Record<string, boolean> = {\n 'labs-leanstral-1-5': true,\n 'magistral-medium-latest': true,\n 'magistral-small-latest': true,\n 'ministral-14b-latest': true,\n 'ministral-8b-latest': true,\n 'mistral-large-latest': true,\n 'mistral-medium-latest': true,\n 'mistral-small-latest': true,\n 'voxtral-small-latest': false,\n 'zai-glm-5-2': false,\n};\n\n// Known non-reasoning models from https://api.mistral.ai/v1/models\n// (2026-10-06). Unknown IDs inherit current reasoning configuration support.\nconst modelsWithoutReasoningEffort = new Set<MistralChatModelId>([\n 'codestral-2508',\n 'codestral-latest',\n 'ministral-14b-2512',\n 'ministral-14b-latest',\n 'ministral-3b-2512',\n 'ministral-3b-latest',\n 'ministral-8b-2512',\n 'ministral-8b-latest',\n 'mistral-code-fim-latest',\n 'mistral-code-latest',\n 'mistral-large-latest',\n 'mistral-large-2512',\n 'voxtral-small-2507',\n 'voxtral-small-latest',\n]);\n\n// GLM-5.3 models accept only low, high, and max reasoning effort and cannot\n// disable reasoning. Omitting reasoning_effort uses max.\n// https://docs.mistral.ai/studio/conversations/reasoning (2026-10-26)\nconst modelsWithLowHighMaxReasoningEffort = new Set<MistralChatModelId>([\n 'zai-glm-5',\n 'zai-glm-5-3',\n 'zai-glm-5-3-flash',\n 'zai-glm-latest',\n]);\n\n// https://api.mistral.ai/v1/models (2026-10-06)\nconst reasoningEffortModelIds = new Set<MistralChatModelId>([\n 'glm-5-2',\n 'labs-leanstral-1-5',\n 'labs-leanstral-1-5-1',\n 'magistral-medium-latest',\n 'magistral-small-latest',\n 'mistral-large-4',\n 'mistral-large-4-0',\n 'mistral-medium',\n 'mistral-medium-2604',\n 'mistral-medium-3',\n 'mistral-medium-3-5',\n 'mistral-medium-3.5',\n 'mistral-medium-latest',\n 'mistral-small-2603',\n 'mistral-small-latest',\n 'mistral-vibe-cli-fast',\n 'mistral-vibe-cli-latest',\n 'mistral-vibe-cli-with-tools',\n 'zai-glm-5-2',\n]);\n\nfunction reasoningCapabilities(\n efforts: readonly ReasoningEffort[],\n): ReasoningCapabilities {\n return { support: efforts.length > 0, efforts };\n}\n\nfunction createLanguageModelEntry(\n modelId: string,\n image?: boolean,\n): MistralLanguageModelEntry {\n const reasoning = reasoningCapabilities(\n modelsWithoutReasoningEffort.has(modelId)\n ? []\n : modelsWithLowHighMaxReasoningEffort.has(modelId)\n ? ['low', 'high', 'max']\n : ['none', 'high'],\n );\n const conversationReasoning = reasoningCapabilities(\n reasoningEffortModelIds.has(modelId) ? ['none', 'high'] : [],\n );\n const chatOnly = { condition: 'Only supported on the Chat API.' };\n return {\n capabilities: {\n language: {\n inputs: { image: image ?? 'unknown', audio: 'unknown' },\n objectGeneration: image != null ? true : 'unknown',\n tools: {\n usage: image != null ? true : 'unknown',\n streaming: image != null ? true : 'unknown',\n },\n reasoning,\n sampling: { temperature: 'unknown', topP: 'unknown', logprobs: false },\n endpoints: { conversation: { reasoning: conversationReasoning } },\n },\n },\n providerOptions: {\n language: declareProviderOptions(\n mistralProviderOptions.language,\n image != null ? true : 'unknown',\n {\n safePrompt: chatOnly,\n documentImageLimit: chatOnly,\n documentPageLimit: chatOnly,\n parallelToolCalls: chatOnly,\n promptCacheKey: chatOnly,\n reasoningEffort:\n reasoning.support && !conversationReasoning.support\n ? chatOnly\n : reasoning.support,\n },\n ),\n },\n };\n}\n\nfunction createTranscriptionModelEntry(modelId: string, declared: boolean) {\n // Only these legacy IDs reject pinned language combined with timestamps.\n // Future and custom IDs keep the existing permissive request behavior.\n const languageWithTimestamps = ![\n 'voxtral-mini-2507',\n 'voxtral-mini-2602',\n 'voxtral-mini-latest',\n ].includes(modelId);\n const support = declared ? true : 'unknown';\n const capabilities: TranscriptionCapabilities = {\n transcription: support,\n streaming: false,\n duration: support,\n segments: support,\n language: support,\n languageWithTimestamps,\n timestamps: support,\n diarization: support,\n contextBias: support,\n };\n return {\n capabilities: { transcription: capabilities },\n providerOptions: {\n transcription: declareProviderOptions(\n mistralProviderOptions.transcription,\n support,\n {\n returnLanguage: {\n condition: 'Only supported when language is not pinned.',\n },\n timestampGranularities: languageWithTimestamps\n ? support\n : {\n condition: 'Only supported when language is not pinned.',\n },\n },\n ),\n },\n };\n}\n\nfunction createSpeechModelEntry(declared: boolean) {\n const support = declared ? true : 'unknown';\n const capabilities: SpeechCapabilities = {\n instructions: false,\n savedVoices: support,\n referenceAudio: support,\n nonStreaming: true,\n outputFormats: ['pcm', 'wav', 'mp3', 'flac', 'opus'],\n };\n return {\n capabilities: { speech: capabilities },\n providerOptions: {\n speech: declareProviderOptions(\n mistralProviderOptions.speech,\n support,\n {},\n ),\n },\n };\n}\n\nfunction createEmbeddingModelEntry(\n defaultDimensions: number,\n customDimensions: boolean,\n) {\n return {\n capabilities: { embedding: { defaultDimensions, customDimensions } },\n providerOptions: {\n embedding: declareProviderOptions(\n mistralProviderOptions.embedding,\n true,\n {\n outputDimension: customDimensions,\n outputDtype: customDimensions,\n },\n ),\n },\n };\n}\n\nexport const mistralModelCatalog: Readonly<Record<string, MistralModelEntry>> =\n {\n ...Object.fromEntries(\n Object.entries(documentedLanguageModels).map(([modelId, image]) => [\n modelId,\n createLanguageModelEntry(modelId, image),\n ]),\n ),\n 'voxtral-mini-transcribe-3-0': createTranscriptionModelEntry(\n 'voxtral-mini-transcribe-3-0',\n true,\n ),\n 'voxtral-small-transcribe-3-0': createTranscriptionModelEntry(\n 'voxtral-small-transcribe-3-0',\n true,\n ),\n 'voxtral-mini-latest': createTranscriptionModelEntry(\n 'voxtral-mini-latest',\n true,\n ),\n 'voxtral-mini-tts-3-0': createSpeechModelEntry(true),\n 'voxtral-mini-tts-2603': createSpeechModelEntry(true),\n 'mistral-embed': createEmbeddingModelEntry(1024, false),\n // https://docs.mistral.ai/studio/knowledge-rag/embeddings/code_embeddings\n 'codestral-embed': createEmbeddingModelEntry(1536, true),\n };\n\nfunction findModelEntry(modelId: string) {\n return Object.prototype.hasOwnProperty.call(mistralModelCatalog, modelId)\n ? mistralModelCatalog[modelId]\n : undefined;\n}\n\nexport function getMistralLanguageModelEntry(\n modelId: string,\n): MistralLanguageModelEntry {\n const entry = findModelEntry(modelId);\n return entry?.capabilities.language != null &&\n entry.providerOptions?.language != null\n ? {\n capabilities: { language: entry.capabilities.language },\n providerOptions: { language: entry.providerOptions.language },\n }\n : createLanguageModelEntry(modelId);\n}\n\nexport function getMistralTranscriptionModelEntry(modelId: string) {\n const capabilities = findModelEntry(modelId)?.capabilities.transcription;\n return capabilities != null\n ? { capabilities: { transcription: capabilities } }\n : createTranscriptionModelEntry(modelId, false);\n}\n\nexport function getMistralSpeechModelEntry(modelId: string) {\n const capabilities = findModelEntry(modelId)?.capabilities.speech;\n return capabilities != null\n ? { capabilities: { speech: capabilities } }\n : createSpeechModelEntry(false);\n}\n\nfunction declareProviderOptions<Option extends string>(\n definitions: Readonly<Record<Option, ProviderOptionDefinition>>,\n support: ModelCapability,\n exceptions: Partial<Record<Option, ModelCapability>>,\n): Record<Option, ModelCapability> {\n return Object.fromEntries(\n (Object.keys(definitions) as Option[]).map(option => [\n option,\n exceptions[option] ?? support,\n ]),\n ) as Record<Option, ModelCapability>;\n}\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n type InferSchema,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type ParseResult,\n type StreamingToolCallDelta,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n convertMistralUsage,\n mistralUsageSchema,\n type MistralUsage,\n} from './convert-mistral-usage';\nimport { convertToMistralChatMessages } from './convert-to-mistral-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapMistralFinishReason } from './map-mistral-finish-reason';\nimport {\n mistralLanguageModelChatOptionsValidator,\n type MistralChatModelId,\n} from './mistral-chat-language-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { prepareTools } from './mistral-prepare-tools';\nimport { getMistralLanguageModelEntry } from './mistral-model-catalog';\n\ntype MistralChatConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport class MistralChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: MistralChatModelId;\n\n private readonly config: MistralChatConfig;\n private readonly generateId: () => string;\n\n static [WORKFLOW_SERIALIZE](model: MistralChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralChatModelId;\n config: MistralChatConfig;\n }) {\n return new MistralChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: MistralChatModelId, config: MistralChatConfig) {\n this.modelId = modelId;\n this.config = config;\n this.generateId = config.generateId ?? generateId;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n reasoning,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const options =\n (await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralLanguageModelChatOptionsValidator,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const { reasoning: reasoningCapabilities } = getMistralLanguageModelEntry(\n this.modelId,\n ).capabilities.language;\n\n let resolvedReasoningEffort: string | undefined;\n if (reasoningCapabilities.support) {\n resolvedReasoningEffort = mapReasoningToProviderEffort({\n reasoning,\n providerOptionsEffort: options.reasoningEffort,\n effortMap: Object.fromEntries(\n reasoningCapabilities.efforts.map(effort => [effort, effort]),\n ),\n warnings,\n });\n } else if (isCustomReasoning(reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This model does not support reasoning configuration.',\n });\n }\n\n const structuredOutputs = options.structuredOutputs ?? true;\n const strictJsonSchema = options.strictJsonSchema ?? false;\n\n // For Mistral we need to instruct the model when using JSON Object mode.\n // https://docs.mistral.ai/capabilities/structured-output/structured_output_overview/\n if (\n responseFormat?.type === 'json' &&\n (!structuredOutputs || responseFormat.schema == null)\n ) {\n prompt = injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema,\n });\n }\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n\n // model specific settings:\n safe_prompt: options.safePrompt,\n\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n ...(frequencyPenalty != null\n ? { frequency_penalty: frequencyPenalty }\n : {}),\n ...(presencePenalty != null ? { presence_penalty: presencePenalty } : {}),\n stop: stopSequences,\n random_seed: seed,\n reasoning_effort: resolvedReasoningEffort,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? structuredOutputs && responseFormat?.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // mistral-specific provider options:\n document_image_limit: options.documentImageLimit,\n document_page_limit: options.documentPageLimit,\n ...(options.promptCacheKey !== undefined\n ? { prompt_cache_key: options.promptCacheKey }\n : {}),\n\n // messages:\n messages: convertToMistralChatMessages(prompt),\n };\n\n const {\n tools: mistralTools,\n toolChoice: mistralToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n\n return {\n args: {\n ...baseArgs,\n tools: mistralTools,\n tool_choice: mistralToolChoice,\n ...(mistralTools != null && options.parallelToolCalls !== undefined\n ? { parallel_tool_calls: options.parallelToolCalls }\n : {}),\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // process content parts in order to preserve sequence\n if (\n choice.message.content != null &&\n Array.isArray(choice.message.content)\n ) {\n for (const part of choice.message.content) {\n if (part.type === 'thinking') {\n const reasoningText = extractReasoningContent(part.thinking);\n if (reasoningText.length > 0) {\n content.push({ type: 'reasoning', text: reasoningText });\n }\n } else if (part.type === 'text') {\n if (part.text.length > 0) {\n content.push({ type: 'text', text: part.text });\n }\n }\n }\n } else {\n // handle legacy string content\n const text = extractTextContent(choice.message.content);\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n }\n\n // when there is a trailing assistant message, mistral will send the\n // content of that message again. we skip this repeated content to\n // avoid duplication, e.g. in continuation mode.\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertMistralUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // A clean end without the provider's completion signal is interrupted.\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'interrupted',\n raw: undefined,\n };\n let usage: MistralUsage | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n let toolCallTracker: StreamingToolCallTracker<StreamingToolCallDelta>;\n\n const generateId = this.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof mistralChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n if (value.usage != null) {\n usage = value.usage;\n }\n\n const choice = value.choices[0];\n const delta = choice.delta;\n\n const textContent = extractTextContent(delta.content);\n\n if (delta.content != null && Array.isArray(delta.content)) {\n for (const part of delta.content) {\n if (part.type === 'thinking') {\n const reasoningDelta = extractReasoningContent(part.thinking);\n if (reasoningDelta.length > 0) {\n if (activeReasoningId == null) {\n // end any active text before starting reasoning\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n activeText = false;\n }\n\n activeReasoningId = generateId();\n controller.enqueue({\n type: 'reasoning-start',\n id: activeReasoningId,\n });\n }\n controller.enqueue({\n type: 'reasoning-delta',\n id: activeReasoningId,\n delta: reasoningDelta,\n });\n }\n }\n }\n }\n\n if (textContent != null && textContent.length > 0) {\n if (!activeText) {\n // if we were in reasoning mode, end it before starting text\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = null;\n }\n controller.enqueue({ type: 'text-start', id: '0' });\n activeText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: textContent,\n });\n }\n\n if (delta?.tool_calls != null) {\n for (const toolCall of delta.tool_calls) {\n toolCallTracker.processDelta(toolCall);\n }\n }\n\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n toolCallTracker.flush();\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertMistralUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction extractReasoningContent(\n thinking: Array<{ type: string; text: string }>,\n) {\n return thinking\n .filter(chunk => chunk.type === 'text')\n .map(chunk => chunk.text)\n .join('');\n}\n\nfunction extractTextContent(\n content: z.infer<ReturnType<typeof mistralContentSchema>>,\n) {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content == null) {\n return undefined;\n }\n\n const textContent: string[] = [];\n\n for (const chunk of content) {\n const { type } = chunk;\n\n switch (type) {\n case 'text':\n textContent.push(chunk.text);\n break;\n case 'thinking':\n case 'image_url':\n case 'reference':\n // thinking, image content, and reference content are currently ignored\n break;\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return textContent.length ? textContent.join('') : undefined;\n}\n\nconst mistralContentSchema = () =>\n z\n .union([\n z.string(),\n z.array(\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('image_url'),\n image_url: z.union([\n z.string(),\n z.object({\n url: z.string(),\n detail: z.string().nullable(),\n }),\n ]),\n }),\n z.object({\n type: z.literal('reference'),\n reference_ids: z.array(z.union([z.string(), z.number()])),\n }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.array(\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n ),\n }),\n ]),\n ),\n ])\n .nullish();\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst mistralChatResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: mistralContentSchema(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.string().nullish(),\n }),\n ),\n object: z.literal('chat.completion'),\n usage: mistralUsageSchema,\n }),\n ),\n);\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst mistralChatChunkSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).optional(),\n content: mistralContentSchema(),\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(),\n id: z.string().nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: mistralUsageSchema.nullish(),\n }),\n ),\n);\n","import {\n UnsupportedFunctionalityError,\n type JSONValue,\n type LanguageModelV4Prompt,\n type LanguageModelV4ToolResultPart,\n} from '@ai-sdk/provider';\nimport {\n stringifyWithBigIntAndCycles,\n type ToolNameMapping,\n} from '@ai-sdk/provider-utils';\nimport {\n convertToMistralChatMessages,\n serializeMistralToolCallArguments,\n} from './convert-to-mistral-chat-messages';\nimport type {\n MistralAssistantMessageContent,\n MistralToolMessage,\n MistralUserMessageContent,\n} from './mistral-chat-prompt';\n\ntype ConversationInput =\n | {\n type: 'message.input';\n role: 'user' | 'assistant';\n content: Array<\n MistralUserMessageContent | MistralAssistantMessageContent\n >;\n }\n | {\n type: 'function.call';\n tool_call_id: string;\n name: string;\n arguments: string;\n }\n | { type: 'function.result'; tool_call_id: string; result: string };\n\nexport function convertToMistralConversationInputs(\n prompt: LanguageModelV4Prompt,\n toolNameMapping: ToolNameMapping,\n) {\n const inputs: ConversationInput[] = [];\n const instructions: string[] = [];\n const executions = new Set<string>();\n const appendToolResult = (part: LanguageModelV4ToolResultPart) => {\n if (executions.has(part.toolCallId)) {\n let result: JSONValue = null;\n if (part.output.type === 'json') {\n const value = part.output.value;\n const info =\n value != null && typeof value === 'object' && 'info' in value\n ? value.info\n : undefined;\n if (info != null && typeof info === 'object' && !Array.isArray(info)) {\n result = 'result' in info ? (info.result ?? info) : info;\n }\n }\n inputs.push({\n type: 'function.result',\n tool_call_id: part.toolCallId,\n result:\n typeof result === 'string'\n ? result\n : stringifyWithBigIntAndCycles(result),\n });\n return;\n }\n const converted = convertToMistralChatMessages([\n { role: 'tool', content: [part] },\n ])[0] as MistralToolMessage;\n inputs.push({\n type: 'function.result',\n tool_call_id: part.toolCallId,\n result: converted.content,\n });\n };\n\n for (const message of prompt) {\n switch (message.role) {\n case 'system':\n instructions.push(message.content);\n break;\n case 'user': {\n const converted = convertToMistralChatMessages([message])[0];\n if (converted.role === 'user') {\n inputs.push({\n type: 'message.input',\n role: 'user',\n content: converted.content,\n });\n }\n break;\n }\n case 'assistant': {\n let content: MistralAssistantMessageContent[] = [];\n const flush = () => {\n if (content.length > 0) {\n inputs.push({ type: 'message.input', role: 'assistant', content });\n content = [];\n }\n };\n for (const part of message.content) {\n switch (part.type) {\n case 'text':\n content.push({ type: 'text', text: part.text });\n break;\n case 'reasoning':\n content.push({\n type: 'thinking',\n thinking: [{ type: 'text', text: part.text }],\n closed: true,\n });\n break;\n case 'tool-call': {\n flush();\n if (part.providerExecuted) {\n const name =\n part.providerOptions?.mistral?.function ??\n part.providerOptions?.mistral?.name;\n const args = part.input as { arguments?: unknown } | null;\n // Replay built-in executions as calls and results. Entry IDs\n // and tool.execution output entries cannot be sent as inputs.\n inputs.push({\n type: 'function.call',\n tool_call_id: part.toolCallId,\n name:\n typeof name === 'string'\n ? name\n : toolNameMapping.toProviderToolName(part.toolName),\n arguments:\n typeof args?.arguments === 'string'\n ? args.arguments\n : serializeMistralToolCallArguments(part.input),\n });\n executions.add(part.toolCallId);\n } else {\n inputs.push({\n type: 'function.call',\n tool_call_id: part.toolCallId,\n name: part.toolName,\n arguments: serializeMistralToolCallArguments(part.input),\n });\n }\n break;\n }\n case 'tool-result':\n flush();\n appendToolResult(part);\n break;\n default:\n throw new UnsupportedFunctionalityError({\n functionality: `assistant content type: ${part.type}`,\n });\n }\n }\n flush();\n break;\n }\n case 'tool':\n for (const part of message.content) {\n if (part.type === 'tool-approval-response') {\n continue;\n }\n appendToolResult(part);\n }\n break;\n }\n }\n\n return {\n inputs,\n instructions:\n instructions.length > 0 ? instructions.join('\\n\\n') : undefined,\n };\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport {\n mistralLanguageModelChatOptions,\n type MistralChatModelId,\n type MistralLanguageModelChatOptions,\n} from './mistral-chat-language-model-options';\n\nexport type MistralConversationModelId = MistralChatModelId;\n\nexport const mistralLanguageModelConversationOptions = lazySchema(() =>\n zodSchema(mistralLanguageModelChatOptions()),\n);\n\nexport type MistralLanguageModelConversationOptions =\n MistralLanguageModelChatOptions;\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { MistralToolChoice } from './mistral-chat-prompt';\nimport { createToolNameMapping } from '@ai-sdk/provider-utils';\n\ntype MistralTool =\n | { type: 'web_search' | 'web_search_premium' }\n | {\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n strict?: boolean;\n };\n };\n\nexport const mistralProviderToolNames = {\n 'mistral.web_search': 'web_search',\n 'mistral.web_search_premium': 'web_search_premium',\n} as const;\n\nexport function prepareConversationTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: Array<MistralTool> | undefined;\n toolChoice: MistralToolChoice | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const mistralTools: Array<MistralTool> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n if (\n tool.id === 'mistral.web_search' ||\n tool.id === 'mistral.web_search_premium'\n ) {\n mistralTools.push({ type: mistralProviderToolNames[tool.id] });\n continue;\n }\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n mistralTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: mistralTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n return { tools: mistralTools, toolChoice: type, toolWarnings };\n case 'required':\n return { tools: mistralTools, toolChoice: 'any', toolWarnings };\n\n // mistral does not support tool mode directly,\n // so we filter the tools and force the tool choice through 'any'\n case 'tool': {\n const toolName = createToolNameMapping({\n tools,\n providerToolNames: mistralProviderToolNames,\n }).toProviderToolName(toolChoice.toolName);\n return {\n tools: mistralTools.filter(tool =>\n tool.type === 'function'\n ? tool.function.name === toolName\n : tool.type === toolName,\n ),\n toolChoice: 'any',\n toolWarnings,\n };\n }\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4GenerateResult,\n LanguageModelV4Reasoning,\n LanguageModelV4Source,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n LanguageModelV4Text,\n LanguageModelV4ToolCall,\n LanguageModelV4ToolResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n type InferSchema,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n createToolNameMapping,\n generateId,\n injectJsonInstructionIntoMessages,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n convertMistralUsage,\n mistralUsageSchema,\n type MistralUsage,\n} from './convert-mistral-usage';\nimport { convertToMistralConversationInputs } from './convert-to-mistral-conversation-inputs';\nimport {\n mistralLanguageModelConversationOptions,\n type MistralConversationModelId,\n} from './mistral-conversation-language-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { getMistralLanguageModelEntry } from './mistral-model-catalog';\nimport {\n mistralProviderToolNames,\n prepareConversationTools,\n} from './mistral-conversation-prepare-tools';\n\ntype MistralConversationConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport class MistralConversationLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: MistralConversationModelId;\n\n private readonly config: MistralConversationConfig;\n private readonly generateId: () => string;\n\n static [WORKFLOW_SERIALIZE](model: MistralConversationLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralConversationModelId;\n config: MistralConversationConfig;\n }) {\n return new MistralConversationLanguageModel(\n options.modelId,\n options.config,\n );\n }\n\n constructor(\n modelId: MistralConversationModelId,\n config: MistralConversationConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n this.generateId = config.generateId ?? generateId;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n reasoning,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const options =\n (await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralLanguageModelConversationOptions,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const { reasoning: reasoningCapabilities } = getMistralLanguageModelEntry(\n this.modelId,\n ).capabilities.language.endpoints.conversation;\n\n let resolvedReasoningEffort: string | undefined;\n if (reasoningCapabilities.support) {\n resolvedReasoningEffort = mapReasoningToProviderEffort({\n reasoning,\n providerOptionsEffort: options.reasoningEffort,\n effortMap: Object.fromEntries(\n reasoningCapabilities.efforts.map(effort => [effort, effort]),\n ),\n warnings,\n });\n } else if (isCustomReasoning(reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This model does not support reasoning configuration.',\n });\n }\n\n const structuredOutputs = options.structuredOutputs ?? true;\n const strictJsonSchema = options.strictJsonSchema ?? false;\n\n // For Mistral we need to instruct the model when using JSON Object mode.\n // https://docs.mistral.ai/capabilities/structured-output/structured_output_overview/\n if (\n responseFormat?.type === 'json' &&\n (!structuredOutputs || responseFormat.schema == null)\n ) {\n prompt = injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema,\n });\n }\n\n const baseArgs = {\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n ...(frequencyPenalty != null\n ? { frequency_penalty: frequencyPenalty }\n : {}),\n ...(presencePenalty != null ? { presence_penalty: presencePenalty } : {}),\n stop: stopSequences,\n random_seed: seed,\n reasoning_effort: resolvedReasoningEffort,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? structuredOutputs && responseFormat?.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n };\n\n const {\n tools: mistralTools,\n toolChoice: mistralToolChoice,\n toolWarnings,\n } = prepareConversationTools({ tools, toolChoice });\n\n for (const [feature, value] of Object.entries({\n safePrompt: options.safePrompt,\n documentImageLimit: options.documentImageLimit,\n documentPageLimit: options.documentPageLimit,\n promptCacheKey: options.promptCacheKey,\n parallelToolCalls: options.parallelToolCalls,\n })) {\n if (value != null) {\n warnings.push({\n type: 'unsupported',\n feature,\n details: 'Not supported by the Mistral Conversations API.',\n });\n }\n }\n\n return {\n args: {\n model: this.modelId,\n store: false,\n ...convertToMistralConversationInputs(\n prompt,\n createToolNameMapping({\n tools,\n providerToolNames: mistralProviderToolNames,\n }),\n ),\n tools: mistralTools,\n completion_args: { ...baseArgs, tool_choice: mistralToolChoice },\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n rawValue: rawResponse,\n responseHeaders,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/conversations`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralConversationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const converter = createContentConverter({\n tools: options.tools,\n generateId: this.generateId,\n });\n const content: LanguageModelV4Content[] = [];\n let hasFunctionCalls = false;\n let modelId: string | undefined;\n\n for (const output of response.outputs) {\n switch (output.type) {\n case 'tool.execution':\n content.push(...converter.convertTool(output));\n break;\n case 'function.call':\n hasFunctionCalls = true;\n content.push({\n type: 'tool-call',\n toolCallId: output.tool_call_id,\n toolName: output.name,\n input:\n typeof output.arguments === 'string'\n ? output.arguments\n : JSON.stringify(output.arguments),\n });\n break;\n case 'message.output':\n modelId = output.model ?? modelId;\n for (const chunk of typeof output.content === 'string'\n ? [{ type: 'text' as const, text: output.content }]\n : output.content) {\n content.push(...converter.convertChunk(chunk));\n }\n break;\n }\n }\n\n return {\n content,\n finishReason: {\n unified: hasFunctionCalls ? 'tool-calls' : 'stop',\n raw: undefined,\n },\n usage: convertMistralUsage(response.usage),\n request: { body },\n response: {\n id: response.conversation_id,\n modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/conversations`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralConversationChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const converter = createContentConverter({\n tools: options.tools,\n generateId: this.generateId,\n });\n const executions = new Map<\n string,\n { name: string; arguments: string; function?: string | null }\n >();\n let toolCallTracker: StreamingToolCallTracker;\n let active: { id: string; type: 'text' | 'reasoning' } | undefined;\n let usage: MistralUsage | undefined;\n let hasFunctionCalls = false;\n let hasError = false;\n let isDone = false;\n let hasModelId = false;\n const closeContent = (\n controller: TransformStreamDefaultController<LanguageModelV4StreamPart>,\n ) => {\n if (active != null) {\n controller.enqueue({\n type: active.type === 'text' ? 'text-end' : 'reasoning-end',\n id: active.id,\n });\n active = undefined;\n }\n };\n\n const generateId = this.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<InferSchema<typeof mistralConversationChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n hasError = true;\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n const event = chunk.value;\n switch (event.type) {\n case 'conversation.response.started':\n controller.enqueue({\n type: 'response-metadata',\n id: event.conversation_id,\n ...(event.created_at != null\n ? { timestamp: new Date(event.created_at) }\n : {}),\n });\n break;\n case 'conversation.response.done':\n usage = event.usage ?? undefined;\n isDone = true;\n break;\n case 'conversation.response.error':\n hasError = true;\n controller.enqueue({ type: 'error', error: event });\n break;\n case 'message.output.delta': {\n if (!hasModelId && event.model != null) {\n hasModelId = true;\n controller.enqueue({\n type: 'response-metadata',\n modelId: event.model,\n });\n }\n for (const part of converter.convertChunk(\n typeof event.content === 'string'\n ? { type: 'text', text: event.content }\n : event.content,\n )) {\n if (part.type === 'text' || part.type === 'reasoning') {\n const id = `${event.id}-${event.content_index ?? 0}`;\n if (active?.id !== id || active.type !== part.type) {\n closeContent(controller);\n active = { id, type: part.type };\n controller.enqueue({\n type:\n part.type === 'text'\n ? 'text-start'\n : 'reasoning-start',\n id,\n });\n }\n controller.enqueue({\n type:\n part.type === 'text' ? 'text-delta' : 'reasoning-delta',\n id,\n delta: part.text,\n });\n } else if (part.type === 'source') {\n controller.enqueue(part);\n }\n }\n break;\n }\n case 'function.call.delta':\n closeContent(controller);\n hasFunctionCalls = true;\n toolCallTracker.processDelta({\n id: event.tool_call_id,\n index: event.output_index,\n function: { name: event.name, arguments: event.arguments },\n });\n break;\n case 'tool.execution.started':\n case 'tool.execution.delta': {\n closeContent(controller);\n const execution = executions.get(event.id);\n if (execution == null) {\n executions.set(event.id, {\n name: event.name,\n arguments: event.arguments,\n function: event.function,\n });\n controller.enqueue({\n type: 'tool-input-start',\n id: event.id,\n toolName: converter.toolNameMapping.toCustomToolName(\n event.name,\n ),\n providerExecuted: true,\n });\n } else {\n execution.arguments += event.arguments;\n }\n break;\n }\n case 'tool.execution.done': {\n const execution = executions.get(event.id);\n if (execution == null) {\n hasError = true;\n controller.enqueue({\n type: 'error',\n error: new Error(\n `Missing tool execution start for ${event.id}`,\n ),\n });\n break;\n }\n controller.enqueue({\n type: 'tool-input-delta',\n id: event.id,\n delta: JSON.stringify({ arguments: execution.arguments }),\n });\n controller.enqueue({ type: 'tool-input-end', id: event.id });\n for (const part of converter.convertTool({\n type: 'tool.execution',\n id: event.id,\n name: execution.name,\n arguments: execution.arguments,\n function: event.function ?? execution.function,\n info: event.info,\n })) {\n controller.enqueue(part);\n }\n executions.delete(event.id);\n break;\n }\n }\n },\n\n flush(controller) {\n closeContent(controller);\n toolCallTracker.flush();\n controller.enqueue({\n type: 'finish',\n finishReason: {\n unified:\n hasError || !isDone || executions.size > 0\n ? 'error'\n : hasFunctionCalls\n ? 'tool-calls'\n : 'stop',\n raw: undefined,\n },\n usage: convertMistralUsage(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction createContentConverter({\n tools,\n generateId,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n generateId: () => string;\n}) {\n const toolNameMapping = createToolNameMapping({\n tools,\n providerToolNames: mistralProviderToolNames,\n });\n const sourceUrls = new Set<string>();\n\n return {\n toolNameMapping,\n convertChunk(\n chunk: z.infer<ReturnType<typeof mistralConversationContentSchema>>,\n ): Array<\n LanguageModelV4Text | LanguageModelV4Reasoning | LanguageModelV4Source\n > {\n switch (chunk.type) {\n case 'text':\n return chunk.text.length > 0\n ? [{ type: 'text', text: chunk.text }]\n : [];\n case 'thinking': {\n const text = chunk.thinking.map(part => part.text).join('');\n return text.length > 0 ? [{ type: 'reasoning', text }] : [];\n }\n case 'tool_reference':\n if (chunk.url == null || sourceUrls.has(chunk.url)) {\n return [];\n }\n const id = generateId();\n sourceUrls.add(chunk.url);\n return [\n {\n type: 'source',\n sourceType: 'url',\n id,\n url: chunk.url,\n title: chunk.title ?? chunk.url,\n },\n ];\n }\n },\n convertTool(\n output: z.infer<\n ReturnType<typeof mistralConversationToolExecutionSchema>\n >,\n ): [LanguageModelV4ToolCall, LanguageModelV4ToolResult] {\n const toolName = toolNameMapping.toCustomToolName(output.name);\n return [\n {\n type: 'tool-call',\n toolCallId: output.id,\n toolName,\n input: JSON.stringify({ arguments: output.arguments }),\n providerExecuted: true,\n providerMetadata: {\n mistral: {\n type: 'tool.execution',\n name: output.name,\n ...(output.function != null ? { function: output.function } : {}),\n },\n },\n },\n {\n type: 'tool-result',\n toolCallId: output.id,\n toolName,\n result: { ...(output.info != null ? { info: output.info } : {}) },\n },\n ];\n },\n };\n}\n\nconst mistralConversationContentSchema = () =>\n z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), text: z.string() }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.array(\n z.object({ type: z.literal('text'), text: z.string() }),\n ),\n }),\n z.object({\n type: z.literal('tool_reference'),\n tool: z.string().nullish(),\n title: z.string().nullish(),\n url: z.string().nullish(),\n }),\n ]);\nconst mistralConversationMessageContentSchema = () =>\n z.union([z.string(), z.array(mistralConversationContentSchema())]);\nconst mistralConversationToolExecutionSchema = () =>\n z.object({\n type: z.literal('tool.execution'),\n id: z.string(),\n name: z.string(),\n arguments: z.string(),\n function: z.string().nullish(),\n info: z.record(z.string(), z.json()).nullish(),\n });\nconst mistralConversationFunctionCallSchema = () =>\n z.object({\n type: z.literal('function.call'),\n tool_call_id: z.string(),\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.string(), z.json())]),\n });\nconst mistralConversationUsageSchema = () =>\n mistralUsageSchema.extend({\n prompt_tokens: z.number().default(0),\n completion_tokens: z.number().default(0),\n total_tokens: z.number().default(0),\n });\nconst mistralConversationResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n conversation_id: z.string(),\n outputs: z.array(\n z.discriminatedUnion('type', [\n mistralConversationToolExecutionSchema(),\n mistralConversationFunctionCallSchema(),\n z.object({\n type: z.literal('message.output'),\n content: mistralConversationMessageContentSchema(),\n model: z.string().nullish(),\n }),\n ]),\n ),\n usage: mistralConversationUsageSchema().nullish(),\n }),\n ),\n);\nconst mistralConversationChunkSchema = lazySchema(() =>\n zodSchema(\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('conversation.response.started'),\n conversation_id: z.string(),\n created_at: z.string().nullish(),\n }),\n z.object({\n type: z.literal('conversation.response.done'),\n usage: mistralConversationUsageSchema().nullish(),\n }),\n z.object({\n type: z.literal('conversation.response.error'),\n message: z.string(),\n code: z.number(),\n }),\n z.object({\n type: z.literal('message.output.delta'),\n id: z.string(),\n content_index: z.number().nullish(),\n content: z.union([z.string(), mistralConversationContentSchema()]),\n model: z.string().nullish(),\n }),\n z.object({\n type: z.literal('function.call.delta'),\n tool_call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n output_index: z.number().nullish(),\n }),\n z.object({\n type: z.enum(['tool.execution.started', 'tool.execution.delta']),\n id: z.string(),\n name: z.string(),\n arguments: z.string(),\n function: z.string().nullish(),\n }),\n z.object({\n type: z.literal('tool.execution.done'),\n id: z.string(),\n name: z.string(),\n function: z.string().nullish(),\n info: z.record(z.string(), z.json()).nullish(),\n }),\n ]),\n ),\n);\n","import { z } from 'zod/v4';\n\nexport type MistralEmbeddingModelId =\n | 'mistral-embed'\n | 'mistral-embed-2312'\n | 'codestral-embed'\n | 'codestral-embed-2505'\n | (string & {});\n\nexport const mistralEmbeddingModelOptions = z.object({\n /**\n * Additional metadata to attach to the embedding request.\n */\n metadata: z.record(z.string(), z.any()).optional(),\n\n /**\n * The dimension of the output embeddings when supported by the model.\n */\n outputDimension: z.number().int().positive().optional(),\n\n /**\n * The data type of the output embeddings when supported by the model.\n */\n outputDtype: z\n .enum(['float', 'int8', 'uint8', 'binary', 'ubinary'])\n .optional(),\n});\n\nexport type MistralEmbeddingModelOptions = z.infer<\n typeof mistralEmbeddingModelOptions\n>;\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n mistralEmbeddingModelOptions,\n type MistralEmbeddingModelId,\n} from './mistral-embedding-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\n\ntype MistralEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n};\n\nexport class MistralEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: MistralEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 32;\n readonly supportsParallelCalls = false;\n\n private readonly config: MistralEmbeddingConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: MistralEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralEmbeddingModelId;\n config: MistralEmbeddingConfig;\n }) {\n return new MistralEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(\n modelId: MistralEmbeddingModelId,\n config: MistralEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n dimensions,\n abortSignal,\n headers,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const mistralOptions =\n (await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralEmbeddingModelOptions,\n })) ?? {};\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/embeddings`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body: {\n model: this.modelId,\n input: values,\n metadata: mistralOptions.metadata,\n output_dimension: mistralOptions.outputDimension ?? dimensions,\n output_dtype: mistralOptions.outputDtype,\n encoding_format: 'float',\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n MistralTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.data.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst MistralTextEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n data: z.array(z.object({ embedding: z.array(z.number()) })),\n usage: z.object({ prompt_tokens: z.number() }).nullish(),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MistralSpeechModelId =\n | 'voxtral-mini-tts-2603'\n | 'voxtral-mini-tts-3-0'\n | 'voxtral-mini-tts-3'\n | 'voxtral-mini-tts-latest'\n | (string & {});\n\nexport const mistralSpeechModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Base64-encoded reference audio for one-off voice cloning.\n *\n * When provided, this takes precedence over the standard `voice` option.\n */\n refAudio: z.string().min(1).optional(),\n\n /**\n * How expressive the speech is, from 1 to 5. Higher values trade voice\n * similarity and stability for stronger delivery. Supported by Voxtral 3.\n */\n expressiveness: z.number().min(1).max(5).optional(),\n\n /**\n * Pronunciation hints mapping words to lists of IPA phonemes.\n * Supported by Voxtral 3.\n */\n phonemeHints: z\n .record(z.string().min(1), z.array(z.string().min(1)).min(1))\n .optional(),\n }),\n ),\n);\n\nexport type MistralSpeechModelOptions = InferSchema<\n typeof mistralSpeechModelOptions\n>;\n","import type { SharedV4Warning, SpeechModelV4 } from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { getMistralSpeechModelEntry } from './mistral-model-catalog';\nimport {\n mistralSpeechModelOptions,\n type MistralSpeechModelId,\n} from './mistral-speech-model-options';\n\ninterface MistralSpeechModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\ntype MistralSpeechOutputFormat = 'pcm' | 'wav' | 'mp3' | 'flac' | 'opus';\n\nexport class MistralSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n\n static [WORKFLOW_SERIALIZE](model: MistralSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralSpeechModelId;\n config: MistralSpeechModelConfig;\n }) {\n return new MistralSpeechModel(options.modelId, options.config);\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: MistralSpeechModelId,\n private readonly config: MistralSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat = 'mp3',\n instructions,\n speed,\n language,\n providerOptions,\n }: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n const mistralOptions = await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralSpeechModelOptions,\n });\n\n const { speech } = getMistralSpeechModelEntry(this.modelId).capabilities;\n let responseFormat: MistralSpeechOutputFormat = 'mp3';\n if (speech.outputFormats.includes(outputFormat)) {\n responseFormat = outputFormat as MistralSpeechOutputFormat;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n\n if (speech.instructions === false && instructions != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details:\n 'Mistral speech models do not support the `instructions` option. ' +\n 'Use a reference audio clip to guide delivery.',\n });\n }\n\n if (speed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'speed',\n details:\n 'Mistral speech models do not support the `speed` option. It was ignored.',\n });\n }\n\n if (language != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details:\n 'Mistral speech models do not support the `language` option. ' +\n 'Language is inferred from the input text and voice.',\n });\n }\n\n const refAudio = mistralOptions?.refAudio;\n const requestBody = {\n model: this.modelId,\n input: text,\n voice_id: refAudio == null ? voice : undefined,\n ref_audio: refAudio,\n expressiveness: mistralOptions?.expressiveness,\n phoneme_hints: mistralOptions?.phonemeHints,\n response_format: responseFormat,\n stream: false,\n };\n\n const requestBodyValues = {\n ...requestBody,\n ref_audio: refAudio == null ? undefined : '[redacted]',\n };\n\n return { requestBody, requestBodyValues, warnings };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, requestBodyValues, warnings } =\n await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postToApi({\n url: `${this.config.baseURL}/audio/speech`,\n headers: combineHeaders(\n { 'Content-Type': 'application/json' },\n await resolve(this.config.headers),\n options.headers,\n ),\n body: {\n content: JSON.stringify(requestBody),\n values: requestBodyValues,\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralSpeechResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio: response.audio_data,\n warnings,\n request: {\n body: JSON.stringify(requestBodyValues),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst mistralSpeechResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n audio_data: z.string(),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MistralTranscriptionModelId =\n | 'voxtral-mini-2602'\n | 'voxtral-mini-latest'\n | 'voxtral-mini-transcribe-3-0'\n | 'voxtral-mini-transcribe-3'\n | 'voxtral-mini-transcribe-latest'\n | 'voxtral-small-transcribe-3-0'\n | 'voxtral-small-transcribe-3'\n | 'voxtral-small-transcribe-latest'\n | (string & {});\n\n// https://docs.mistral.ai/api/endpoint/audio/transcriptions\nexport const mistralTranscriptionModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * The language of the audio, e.g. \"en\". Providing the language can boost\n * accuracy.\n */\n language: z.string().min(1).optional(),\n\n /**\n * Return the detected language. Cannot be combined with `language`.\n */\n returnLanguage: z.boolean().optional(),\n\n /**\n * The sampling temperature.\n */\n temperature: z.number().optional(),\n\n /**\n * The timestamp granularities to include in the transcription response.\n * Voxtral 3 supports segment timestamps only.\n */\n timestampGranularities: z\n .array(z.enum(['segment', 'word']))\n .min(1)\n .optional(),\n\n /**\n * Whether to identify speakers in the transcription.\n * Voxtral 3 requires segment timestamps when diarization is enabled.\n */\n diarize: z.boolean().optional(),\n\n /**\n * Words or phrases to guide the model toward correct spellings of names,\n * technical terms, or domain-specific vocabulary.\n *\n * Voxtral 3 also accepts phrases and descriptions of the recording,\n * including spaces and punctuation. Entries share the context window\n * with the audio.\n */\n contextBias: z.array(z.string().min(1)).optional(),\n }),\n ),\n);\n\nexport type MistralTranscriptionModelOptions = InferSchema<\n typeof mistralTranscriptionModelOptions\n>;\n","import {\n InvalidArgumentError,\n type JSONObject,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonResponseHandler,\n mediaTypeToExtension,\n parseProviderOptions,\n postFormDataToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { getMistralTranscriptionModelEntry } from './mistral-model-catalog';\nimport {\n mistralTranscriptionModelOptions,\n type MistralTranscriptionModelId,\n} from './mistral-transcription-model-options';\n\ntype MistralTranscriptionModelConfig = {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n};\n\nexport class MistralTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n\n static [WORKFLOW_SERIALIZE](model: MistralTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: MistralTranscriptionModelId;\n config: MistralTranscriptionModelConfig;\n }) {\n return new MistralTranscriptionModel(options.modelId, options.config);\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: MistralTranscriptionModelId,\n private readonly config: MistralTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const warnings: SharedV4Warning[] = [];\n const mistralOptions = await parseProviderOptions({\n provider: 'mistral',\n providerOptions,\n schema: mistralTranscriptionModelOptions,\n });\n\n if (\n !getMistralTranscriptionModelEntry(this.modelId).capabilities\n .transcription.languageWithTimestamps &&\n mistralOptions?.language != null &&\n mistralOptions.timestampGranularities != null\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message:\n 'providerOptions.mistral.language cannot be combined with providerOptions.mistral.timestampGranularities',\n });\n }\n\n if (mistralOptions?.language != null && mistralOptions.returnLanguage) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message:\n 'providerOptions.mistral.language cannot be combined with providerOptions.mistral.returnLanguage',\n });\n }\n\n const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio as Uint8Array<ArrayBuffer>])\n : new Blob([convertBase64ToUint8Array(audio)]);\n\n formData.append('model', this.modelId);\n formData.append(\n 'file',\n new File([blob], 'audio', { type: mediaType }),\n `audio.${mediaTypeToExtension(mediaType)}`,\n );\n\n if (mistralOptions != null) {\n appendFormValue(formData, 'language', mistralOptions.language);\n appendFormValue(\n formData,\n 'return_language',\n mistralOptions.returnLanguage,\n );\n appendFormValue(formData, 'temperature', mistralOptions.temperature);\n appendFormValue(\n formData,\n 'timestamp_granularities',\n mistralOptions.timestampGranularities,\n );\n appendFormValue(formData, 'diarize', mistralOptions.diarize);\n appendFormValue(formData, 'context_bias', mistralOptions.contextBias);\n }\n\n return { formData, warnings };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = await this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: `${this.config.baseURL}/audio/transcriptions`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n formData,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const segments =\n response.segments?.map(segment => ({\n text: segment.text,\n startSecond: segment.start,\n endSecond: segment.end,\n })) ?? [];\n\n const mistralMetadata: JSONObject = {};\n\n if (response.usage != null) {\n mistralMetadata.usage = {\n ...(response.usage.prompt_tokens != null && {\n promptTokens: response.usage.prompt_tokens,\n }),\n ...(response.usage.completion_tokens != null && {\n completionTokens: response.usage.completion_tokens,\n }),\n ...(response.usage.total_tokens != null && {\n totalTokens: response.usage.total_tokens,\n }),\n ...(response.usage.prompt_audio_seconds != null && {\n promptAudioSeconds: response.usage.prompt_audio_seconds,\n }),\n ...(response.usage.request_count != null && {\n requestCount: response.usage.request_count,\n }),\n };\n }\n\n const providerSegments = response.segments\n ?.filter(\n segment =>\n segment.type != null ||\n segment.score != null ||\n segment.speaker_id != null,\n )\n .map(segment => ({\n text: segment.text,\n startSecond: segment.start,\n endSecond: segment.end,\n ...(segment.type != null && { type: segment.type }),\n ...(segment.score != null && { score: segment.score }),\n ...(segment.speaker_id != null && {\n speakerId: segment.speaker_id,\n }),\n }));\n\n if (providerSegments != null && providerSegments.length > 0) {\n mistralMetadata.segments = providerSegments;\n }\n\n return {\n text: response.text,\n segments,\n language: response.language ?? undefined,\n durationInSeconds:\n response.usage?.prompt_audio_seconds ??\n segments.at(-1)?.endSecond ??\n undefined,\n warnings,\n ...(response.usage != null && { usage: response.usage }),\n response: {\n timestamp: currentDate,\n modelId: response.model,\n headers: responseHeaders,\n body: rawResponse,\n },\n ...(Object.keys(mistralMetadata).length > 0 && {\n providerMetadata: {\n mistral: mistralMetadata,\n },\n }),\n };\n }\n}\n\nfunction appendFormValue(\n formData: FormData,\n key: string,\n value: string | number | boolean | string[] | undefined,\n): void {\n if (value == null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n formData.append(key, item);\n }\n return;\n }\n\n formData.append(key, String(value));\n}\n\nconst mistralTranscriptionResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n model: z.string(),\n text: z.string(),\n language: z.string().nullish(),\n segments: z\n .array(\n z.object({\n type: z.literal('transcription_segment').nullish(),\n text: z.string(),\n start: z.number(),\n end: z.number(),\n score: z.number().nullish(),\n speaker_id: z.string().nullish(),\n }),\n )\n .nullish(),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n prompt_audio_seconds: z.number().nullish(),\n request_count: z.number().nullish(),\n })\n .nullish(),\n }),\n ),\n);\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import type { JSONValue } from '@ai-sdk/provider';\nimport {\n createProviderExecutedToolFactory,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst inputSchema = lazySchema(() =>\n zodSchema(z.object({ arguments: z.string() })),\n);\nconst outputSchema = lazySchema(() =>\n zodSchema(z.object({ info: z.record(z.string(), z.json()).optional() })),\n);\n\nconst webSearchFactory = createProviderExecutedToolFactory<\n { arguments: string },\n { info?: Record<string, JSONValue> },\n {}\n>({ id: 'mistral.web_search', inputSchema, outputSchema });\n\nconst webSearchPremiumFactory = createProviderExecutedToolFactory<\n { arguments: string },\n { info?: Record<string, JSONValue> },\n {}\n>({ id: 'mistral.web_search_premium', inputSchema, outputSchema });\n\n/** Search the web using Mistral's Conversations API. */\nexport const webSearch = (args: Parameters<typeof webSearchFactory>[0] = {}) =>\n webSearchFactory(args);\n\n/** Search the web and verified news using Mistral's Conversations API. */\nexport const webSearchPremium = (\n args: Parameters<typeof webSearchPremiumFactory>[0] = {},\n) => webSearchPremiumFactory(args);\n","import { webSearch, webSearchPremium } from './web-search';\n\nexport const mistralTools = { webSearch, webSearchPremium };\n","import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type ProviderV4,\n type SpeechModelV4,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolveWith,\n type Resolvable,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MistralChatLanguageModel } from './mistral-chat-language-model';\nimport { MistralConversationLanguageModel } from './mistral-conversation-language-model';\nimport type { MistralChatModelId } from './mistral-chat-language-model-options';\nimport { MistralEmbeddingModel } from './mistral-embedding-model';\nimport type { MistralEmbeddingModelId } from './mistral-embedding-model-options';\nimport { MistralSpeechModel } from './mistral-speech-model';\nimport type { MistralSpeechModelId } from './mistral-speech-model-options';\nimport { MistralTranscriptionModel } from './mistral-transcription-model';\nimport type { MistralTranscriptionModelId } from './mistral-transcription-model-options';\nimport { VERSION } from './version';\nimport { mistralTools } from './tool';\n\nexport interface MistralProvider extends ProviderV4 {\n tools: typeof mistralTools;\n (modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model using the Conversations API, with support for web search.\n */\n conversation(modelId: MistralChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: MistralEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel: (modelId: MistralEmbeddingModelId) => EmbeddingModelV4;\n\n /**\n * Creates a model for speech generation (text-to-speech).\n */\n speech(modelId: MistralSpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for speech generation (text-to-speech).\n */\n speechModel(modelId: MistralSpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcription(modelId: MistralTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcriptionModel(\n modelId: MistralTranscriptionModelId,\n ): TranscriptionModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: MistralEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: MistralEmbeddingModelId): EmbeddingModelV4;\n}\n\nexport interface MistralProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is `https://api.mistral.ai/v1`.\n */\n baseURL?: string;\n\n /**\n * API key that is being send using the `Authorization` header.\n * It defaults to the `MISTRAL_API_KEY` environment variable.\n */\n apiKey?: Resolvable<string>;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n generateId?: () => string;\n}\n\n/**\n * Create a Mistral AI provider instance.\n */\nexport function createMistral(\n options: MistralProviderSettings = {},\n): MistralProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.mistral.ai/v1';\n\n const getHeaders = () =>\n resolveWith(options.apiKey, apiKey =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey,\n environmentVariableName: 'MISTRAL_API_KEY',\n description: 'Mistral',\n })}`,\n ...options.headers,\n },\n `ai-sdk-mistral/${VERSION}`,\n ),\n );\n\n const createChatModel = (modelId: MistralChatModelId) =>\n new MistralChatLanguageModel(modelId, {\n provider: 'mistral.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId,\n });\n\n const createEmbeddingModel = (modelId: MistralEmbeddingModelId) =>\n new MistralEmbeddingModel(modelId, {\n provider: 'mistral.embedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createConversationModel = (modelId: MistralChatModelId) =>\n new MistralConversationLanguageModel(modelId, {\n provider: 'mistral.conversation',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId,\n });\n\n const createSpeechModel = (modelId: MistralSpeechModelId) =>\n new MistralSpeechModel(modelId, {\n provider: 'mistral.speech',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: MistralTranscriptionModelId) =>\n new MistralTranscriptionModel(modelId, {\n provider: 'mistral.transcription',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: MistralChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Mistral model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.conversation = createConversationModel;\n provider.tools = mistralTools;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\n/**\n * Default Mistral provider instance.\n */\nexport const mistral = createMistral();\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/mistral",
3
- "version": "4.0.77",
3
+ "version": "4.0.79",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@ai-sdk/provider": "4.0.35",
33
- "@ai-sdk/provider-utils": "5.0.72"
33
+ "@ai-sdk/provider-utils": "5.0.74"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@ai-sdk/test-server": "2.0.4",
@@ -8,6 +8,8 @@ import type {
8
8
  MistralPrompt,
9
9
  } from './mistral-chat-prompt';
10
10
  import {
11
+ secureJsonParse,
12
+ stringifyWithBigIntAndCycles,
11
13
  convertToBase64,
12
14
  getTopLevelMediaType,
13
15
  resolveFullMediaType,
@@ -27,6 +29,18 @@ function formatFileUrl({ part }: { part: LanguageModelV4FilePart }): string {
27
29
  });
28
30
  }
29
31
 
32
+ export function serializeMistralToolCallArguments(input: unknown): string {
33
+ if (typeof input === 'string') {
34
+ try {
35
+ secureJsonParse(input);
36
+ return input;
37
+ } catch {
38
+ return JSON.stringify(input);
39
+ }
40
+ }
41
+ return stringifyWithBigIntAndCycles(input);
42
+ }
43
+
30
44
  export function convertToMistralChatMessages(
31
45
  prompt: LanguageModelV4Prompt,
32
46
  ): MistralPrompt {
@@ -125,7 +139,7 @@ export function convertToMistralChatMessages(
125
139
  type: 'function',
126
140
  function: {
127
141
  name: part.toolName,
128
- arguments: JSON.stringify(part.input),
142
+ arguments: serializeMistralToolCallArguments(part.input),
129
143
  },
130
144
  });
131
145
  break;
@@ -175,7 +189,7 @@ export function convertToMistralChatMessages(
175
189
  case 'content':
176
190
  case 'json':
177
191
  case 'error-json':
178
- contentValue = JSON.stringify(output.value);
192
+ contentValue = stringifyWithBigIntAndCycles(output.value);
179
193
  break;
180
194
  }
181
195
 
@@ -4,8 +4,14 @@ import {
4
4
  type LanguageModelV4Prompt,
5
5
  type LanguageModelV4ToolResultPart,
6
6
  } from '@ai-sdk/provider';
7
- import type { ToolNameMapping } from '@ai-sdk/provider-utils';
8
- import { convertToMistralChatMessages } from './convert-to-mistral-chat-messages';
7
+ import {
8
+ stringifyWithBigIntAndCycles,
9
+ type ToolNameMapping,
10
+ } from '@ai-sdk/provider-utils';
11
+ import {
12
+ convertToMistralChatMessages,
13
+ serializeMistralToolCallArguments,
14
+ } from './convert-to-mistral-chat-messages';
9
15
  import type {
10
16
  MistralAssistantMessageContent,
11
17
  MistralToolMessage,
@@ -51,7 +57,10 @@ export function convertToMistralConversationInputs(
51
57
  inputs.push({
52
58
  type: 'function.result',
53
59
  tool_call_id: part.toolCallId,
54
- result: typeof result === 'string' ? result : JSON.stringify(result),
60
+ result:
61
+ typeof result === 'string'
62
+ ? result
63
+ : stringifyWithBigIntAndCycles(result),
55
64
  });
56
65
  return;
57
66
  }
@@ -120,7 +129,7 @@ export function convertToMistralConversationInputs(
120
129
  arguments:
121
130
  typeof args?.arguments === 'string'
122
131
  ? args.arguments
123
- : JSON.stringify(part.input),
132
+ : serializeMistralToolCallArguments(part.input),
124
133
  });
125
134
  executions.add(part.toolCallId);
126
135
  } else {
@@ -128,7 +137,7 @@ export function convertToMistralConversationInputs(
128
137
  type: 'function.call',
129
138
  tool_call_id: part.toolCallId,
130
139
  name: part.toolName,
131
- arguments: JSON.stringify(part.input),
140
+ arguments: serializeMistralToolCallArguments(part.input),
132
141
  });
133
142
  }
134
143
  break;