@ai-sdk/mistral 4.0.16 → 4.0.18

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.18
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [d8210b6]
8
+ - Updated dependencies [b192878]
9
+ - @ai-sdk/provider-utils@5.0.16
10
+
11
+ ## 4.0.17
12
+
13
+ ### Patch Changes
14
+
15
+ - 4e116c9: Add Voxtral batch transcription support through `mistral.transcription()` and `mistral.transcriptionModel()`.
16
+ - Updated dependencies [1659cd5]
17
+ - Updated dependencies [6a5bdff]
18
+ - @ai-sdk/provider-utils@5.0.15
19
+
3
20
  ## 4.0.16
4
21
 
5
22
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { ProviderV4, LanguageModelV4, EmbeddingModelV4, SpeechModelV4 } from '@ai-sdk/provider';
2
- import { FetchFunction } from '@ai-sdk/provider-utils';
1
+ import { ProviderV4, LanguageModelV4, EmbeddingModelV4, SpeechModelV4, TranscriptionModelV4 } from '@ai-sdk/provider';
2
+ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
3
+ import { InferSchema, FetchFunction } from '@ai-sdk/provider-utils';
3
4
  import { z } from 'zod/v4';
4
5
 
5
6
  type MistralChatModelId = 'ministral-3b-latest' | 'ministral-8b-latest' | 'ministral-14b-latest' | 'mistral-large-latest' | 'mistral-medium-latest' | 'mistral-medium-3' | 'mistral-large-2512' | 'mistral-medium-2508' | 'mistral-medium-2505' | 'mistral-small-2506' | 'pixtral-large-latest' | 'mistral-medium-3.5' | 'mistral-small-latest' | 'mistral-small-2603' | 'magistral-medium-latest' | 'magistral-small-latest' | 'magistral-medium-2509' | 'magistral-small-2509' | (string & {});
@@ -37,6 +38,16 @@ declare const mistralSpeechModelOptions: z.ZodObject<{
37
38
  }, z.core.$strip>;
38
39
  type MistralSpeechModelOptions = z.infer<typeof mistralSpeechModelOptions>;
39
40
 
41
+ type MistralTranscriptionModelId = 'voxtral-mini-latest' | (string & {});
42
+ declare const mistralTranscriptionModelOptions: _ai_sdk_provider_utils.LazySchema<{
43
+ language?: string | undefined;
44
+ temperature?: number | undefined;
45
+ timestampGranularities?: ("segment" | "word")[] | undefined;
46
+ diarize?: boolean | undefined;
47
+ contextBias?: string[] | undefined;
48
+ }>;
49
+ type MistralTranscriptionModelOptions = InferSchema<typeof mistralTranscriptionModelOptions>;
50
+
40
51
  interface MistralProvider extends ProviderV4 {
41
52
  (modelId: MistralChatModelId): LanguageModelV4;
42
53
  /**
@@ -63,6 +74,14 @@ interface MistralProvider extends ProviderV4 {
63
74
  * Creates a model for speech generation (text-to-speech).
64
75
  */
65
76
  speechModel(modelId: MistralSpeechModelId): SpeechModelV4;
77
+ /**
78
+ * Creates a model for audio transcription.
79
+ */
80
+ transcription(modelId: MistralTranscriptionModelId): TranscriptionModelV4;
81
+ /**
82
+ * Creates a model for audio transcription.
83
+ */
84
+ transcriptionModel(modelId: MistralTranscriptionModelId): TranscriptionModelV4;
66
85
  /**
67
86
  * @deprecated Use `embedding` instead.
68
87
  */
@@ -105,4 +124,4 @@ declare const mistral: MistralProvider;
105
124
 
106
125
  declare const VERSION: string;
107
126
 
108
- export { type MistralEmbeddingModelOptions, type MistralLanguageModelChatOptions, type MistralLanguageModelChatOptions as MistralLanguageModelOptions, type MistralProvider, type MistralProviderSettings, type MistralSpeechModelId, type MistralSpeechModelOptions, VERSION, createMistral, mistral };
127
+ export { type MistralEmbeddingModelOptions, type MistralLanguageModelChatOptions, type MistralLanguageModelChatOptions as MistralLanguageModelOptions, type MistralProvider, type MistralProviderSettings, type MistralSpeechModelId, type MistralSpeechModelOptions, type MistralTranscriptionModelId, type MistralTranscriptionModelOptions, VERSION, createMistral, mistral };
package/dist/index.js CHANGED
@@ -1094,8 +1094,239 @@ var mistralSpeechResponseSchema = z7.object({
1094
1094
  audio_data: z7.string()
1095
1095
  });
1096
1096
 
1097
+ // src/mistral-transcription-model.ts
1098
+ import {
1099
+ InvalidArgumentError
1100
+ } from "@ai-sdk/provider";
1101
+ import {
1102
+ combineHeaders as combineHeaders4,
1103
+ convertBase64ToUint8Array,
1104
+ createJsonResponseHandler as createJsonResponseHandler4,
1105
+ mediaTypeToExtension,
1106
+ parseProviderOptions as parseProviderOptions4,
1107
+ postFormDataToApi,
1108
+ serializeModelOptions as serializeModelOptions4,
1109
+ WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE4,
1110
+ WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE4
1111
+ } from "@ai-sdk/provider-utils";
1112
+ import { z as z9 } from "zod/v4";
1113
+
1114
+ // src/mistral-transcription-model-options.ts
1115
+ import {
1116
+ lazySchema,
1117
+ zodSchema
1118
+ } from "@ai-sdk/provider-utils";
1119
+ import { z as z8 } from "zod/v4";
1120
+ var mistralTranscriptionModelOptions = lazySchema(
1121
+ () => zodSchema(
1122
+ z8.object({
1123
+ /**
1124
+ * The language of the audio, e.g. "en". Providing the language can boost
1125
+ * accuracy.
1126
+ */
1127
+ language: z8.string().min(1).optional(),
1128
+ /**
1129
+ * The sampling temperature.
1130
+ */
1131
+ temperature: z8.number().optional(),
1132
+ /**
1133
+ * The timestamp granularities to include in the transcription response.
1134
+ */
1135
+ timestampGranularities: z8.array(z8.enum(["segment", "word"])).min(1).optional(),
1136
+ /**
1137
+ * Whether to identify speakers in the transcription.
1138
+ */
1139
+ diarize: z8.boolean().optional(),
1140
+ /**
1141
+ * Words or phrases to guide the model toward correct spellings of names,
1142
+ * technical terms, or domain-specific vocabulary.
1143
+ *
1144
+ * Mistral requires each item to omit commas and whitespace. Use
1145
+ * underscores to represent multi-word phrases.
1146
+ */
1147
+ contextBias: z8.array(
1148
+ z8.string().min(1).regex(
1149
+ /^[^\s,]+$/,
1150
+ "Context bias items must not contain commas or whitespace."
1151
+ )
1152
+ ).max(100).optional()
1153
+ })
1154
+ )
1155
+ );
1156
+
1157
+ // src/mistral-transcription-model.ts
1158
+ var MistralTranscriptionModel = class _MistralTranscriptionModel {
1159
+ constructor(modelId, config) {
1160
+ this.modelId = modelId;
1161
+ this.config = config;
1162
+ this.specificationVersion = "v4";
1163
+ }
1164
+ static [WORKFLOW_SERIALIZE4](model) {
1165
+ return serializeModelOptions4({
1166
+ modelId: model.modelId,
1167
+ config: model.config
1168
+ });
1169
+ }
1170
+ static [WORKFLOW_DESERIALIZE4](options) {
1171
+ return new _MistralTranscriptionModel(options.modelId, options.config);
1172
+ }
1173
+ get provider() {
1174
+ return this.config.provider;
1175
+ }
1176
+ async getArgs({
1177
+ audio,
1178
+ mediaType,
1179
+ providerOptions
1180
+ }) {
1181
+ const warnings = [];
1182
+ const mistralOptions = await parseProviderOptions4({
1183
+ provider: "mistral",
1184
+ providerOptions,
1185
+ schema: mistralTranscriptionModelOptions
1186
+ });
1187
+ if ((mistralOptions == null ? void 0 : mistralOptions.language) != null && mistralOptions.timestampGranularities != null) {
1188
+ throw new InvalidArgumentError({
1189
+ argument: "providerOptions",
1190
+ message: "providerOptions.mistral.language cannot be combined with providerOptions.mistral.timestampGranularities"
1191
+ });
1192
+ }
1193
+ const formData = new FormData();
1194
+ const blob = audio instanceof Uint8Array ? new Blob([audio]) : new Blob([convertBase64ToUint8Array(audio)]);
1195
+ formData.append("model", this.modelId);
1196
+ formData.append(
1197
+ "file",
1198
+ new File([blob], "audio", { type: mediaType }),
1199
+ `audio.${mediaTypeToExtension(mediaType)}`
1200
+ );
1201
+ if (mistralOptions != null) {
1202
+ appendFormValue(formData, "language", mistralOptions.language);
1203
+ appendFormValue(formData, "temperature", mistralOptions.temperature);
1204
+ appendFormValue(
1205
+ formData,
1206
+ "timestamp_granularities",
1207
+ mistralOptions.timestampGranularities
1208
+ );
1209
+ appendFormValue(formData, "diarize", mistralOptions.diarize);
1210
+ appendFormValue(formData, "context_bias", mistralOptions.contextBias);
1211
+ }
1212
+ return { formData, warnings };
1213
+ }
1214
+ async doGenerate(options) {
1215
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
1216
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
1217
+ const { formData, warnings } = await this.getArgs(options);
1218
+ const {
1219
+ value: response,
1220
+ responseHeaders,
1221
+ rawValue: rawResponse
1222
+ } = await postFormDataToApi({
1223
+ url: `${this.config.baseURL}/audio/transcriptions`,
1224
+ headers: combineHeaders4((_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d), options.headers),
1225
+ formData,
1226
+ failedResponseHandler: mistralFailedResponseHandler,
1227
+ successfulResponseHandler: createJsonResponseHandler4(
1228
+ mistralTranscriptionResponseSchema
1229
+ ),
1230
+ abortSignal: options.abortSignal,
1231
+ fetch: this.config.fetch
1232
+ });
1233
+ const segments = (_g = (_f = response.segments) == null ? void 0 : _f.map((segment) => ({
1234
+ text: segment.text,
1235
+ startSecond: segment.start,
1236
+ endSecond: segment.end
1237
+ }))) != null ? _g : [];
1238
+ const mistralMetadata = {};
1239
+ if (response.usage != null) {
1240
+ mistralMetadata.usage = {
1241
+ ...response.usage.prompt_tokens != null && {
1242
+ promptTokens: response.usage.prompt_tokens
1243
+ },
1244
+ ...response.usage.completion_tokens != null && {
1245
+ completionTokens: response.usage.completion_tokens
1246
+ },
1247
+ ...response.usage.total_tokens != null && {
1248
+ totalTokens: response.usage.total_tokens
1249
+ },
1250
+ ...response.usage.prompt_audio_seconds != null && {
1251
+ promptAudioSeconds: response.usage.prompt_audio_seconds
1252
+ },
1253
+ ...response.usage.request_count != null && {
1254
+ requestCount: response.usage.request_count
1255
+ }
1256
+ };
1257
+ }
1258
+ const providerSegments = (_h = response.segments) == null ? void 0 : _h.filter(
1259
+ (segment) => segment.type != null || segment.score != null || segment.speaker_id != null
1260
+ ).map((segment) => ({
1261
+ text: segment.text,
1262
+ startSecond: segment.start,
1263
+ endSecond: segment.end,
1264
+ ...segment.type != null && { type: segment.type },
1265
+ ...segment.score != null && { score: segment.score },
1266
+ ...segment.speaker_id != null && {
1267
+ speakerId: segment.speaker_id
1268
+ }
1269
+ }));
1270
+ if (providerSegments != null && providerSegments.length > 0) {
1271
+ mistralMetadata.segments = providerSegments;
1272
+ }
1273
+ return {
1274
+ text: response.text,
1275
+ segments,
1276
+ language: (_i = response.language) != null ? _i : void 0,
1277
+ durationInSeconds: (_m = (_l = (_j = response.usage) == null ? void 0 : _j.prompt_audio_seconds) != null ? _l : (_k = segments.at(-1)) == null ? void 0 : _k.endSecond) != null ? _m : void 0,
1278
+ warnings,
1279
+ response: {
1280
+ timestamp: currentDate,
1281
+ modelId: response.model,
1282
+ headers: responseHeaders,
1283
+ body: rawResponse
1284
+ },
1285
+ ...Object.keys(mistralMetadata).length > 0 && {
1286
+ providerMetadata: {
1287
+ mistral: mistralMetadata
1288
+ }
1289
+ }
1290
+ };
1291
+ }
1292
+ };
1293
+ function appendFormValue(formData, key, value) {
1294
+ if (value == null) {
1295
+ return;
1296
+ }
1297
+ if (Array.isArray(value)) {
1298
+ for (const item of value) {
1299
+ formData.append(key, item);
1300
+ }
1301
+ return;
1302
+ }
1303
+ formData.append(key, String(value));
1304
+ }
1305
+ var mistralTranscriptionResponseSchema = z9.object({
1306
+ model: z9.string(),
1307
+ text: z9.string(),
1308
+ language: z9.string().nullish(),
1309
+ segments: z9.array(
1310
+ z9.object({
1311
+ type: z9.literal("transcription_segment").nullish(),
1312
+ text: z9.string(),
1313
+ start: z9.number(),
1314
+ end: z9.number(),
1315
+ score: z9.number().nullish(),
1316
+ speaker_id: z9.string().nullish()
1317
+ })
1318
+ ).nullish(),
1319
+ usage: z9.object({
1320
+ prompt_tokens: z9.number().nullish(),
1321
+ completion_tokens: z9.number().nullish(),
1322
+ total_tokens: z9.number().nullish(),
1323
+ prompt_audio_seconds: z9.number().nullish(),
1324
+ request_count: z9.number().nullish()
1325
+ }).nullish()
1326
+ });
1327
+
1097
1328
  // src/version.ts
1098
- var VERSION = true ? "4.0.16" : "0.0.0-test";
1329
+ var VERSION = true ? "4.0.18" : "0.0.0-test";
1099
1330
 
1100
1331
  // src/mistral-provider.ts
1101
1332
  function createMistral(options = {}) {
@@ -1131,6 +1362,12 @@ function createMistral(options = {}) {
1131
1362
  headers: getHeaders,
1132
1363
  fetch: options.fetch
1133
1364
  });
1365
+ const createTranscriptionModel = (modelId) => new MistralTranscriptionModel(modelId, {
1366
+ provider: "mistral.transcription",
1367
+ baseURL,
1368
+ headers: getHeaders,
1369
+ fetch: options.fetch
1370
+ });
1134
1371
  const provider = function(modelId) {
1135
1372
  if (new.target) {
1136
1373
  throw new Error(
@@ -1148,6 +1385,8 @@ function createMistral(options = {}) {
1148
1385
  provider.textEmbeddingModel = createEmbeddingModel;
1149
1386
  provider.speech = createSpeechModel;
1150
1387
  provider.speechModel = createSpeechModel;
1388
+ provider.transcription = createTranscriptionModel;
1389
+ provider.transcriptionModel = createTranscriptionModel;
1151
1390
  provider.imageModel = (modelId) => {
1152
1391
  throw new NoSuchModelError({ modelId, modelType: "imageModel" });
1153
1392
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mistral-provider.ts","../src/mistral-chat-language-model.ts","../src/convert-mistral-usage.ts","../src/convert-to-mistral-chat-messages.ts","../src/get-response-metadata.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-embedding-model.ts","../src/mistral-embedding-model-options.ts","../src/mistral-speech-model.ts","../src/mistral-speech-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type ProviderV4,\n type SpeechModelV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MistralChatLanguageModel } from './mistral-chat-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 { VERSION } from './version';\n\nexport interface MistralProvider extends ProviderV4 {\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 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 * @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?: 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 withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MISTRAL_API_KEY',\n description: 'Mistral',\n })}`,\n ...options.headers,\n },\n `ai-sdk/mistral/${VERSION}`,\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 createSpeechModel = (modelId: MistralSpeechModelId) =>\n new MistralSpeechModel(modelId, {\n provider: 'mistral.speech',\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.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\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","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 combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\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 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 mistralLanguageModelChatOptions,\n type MistralChatModelId,\n} from './mistral-chat-language-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { prepareTools } from './mistral-prepare-tools';\n\ntype MistralChatConfig = {\n provider: string;\n baseURL: string;\n headers?: () => 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: mistralLanguageModelChatOptions,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const supportsReasoningEffort =\n this.modelId === 'mistral-small-latest' ||\n this.modelId === 'mistral-small-2603' ||\n this.modelId === 'mistral-medium-3' ||\n this.modelId === 'mistral-medium-3.5';\n\n let resolvedReasoningEffort: string | undefined;\n if (supportsReasoningEffort) {\n resolvedReasoningEffort =\n options.reasoningEffort ??\n (isCustomReasoning(reasoning)\n ? reasoning === 'none'\n ? 'none'\n : mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'high',\n low: 'high',\n medium: 'high',\n high: 'high',\n xhigh: 'high',\n },\n warnings,\n })\n : undefined);\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 need to instruct the model to return a JSON object.\n // https://docs.mistral.ai/capabilities/structured-output/structured_output_overview/\n if (responseFormat?.type === 'json' && !responseFormat?.schema) {\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\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(this.config.headers?.(), options.headers),\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(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\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\n const generateId = this.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof mistralChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\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 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 const toolCallId = toolCall.id;\n const toolName = toolCall.function.name;\n const input = toolCall.function.arguments;\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallId,\n toolName,\n });\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCallId,\n delta: input,\n });\n\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCallId,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input,\n });\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 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(content: z.infer<typeof mistralContentSchema>) {\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 = 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\nconst mistralUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n num_cached_tokens: z.number().nullish(),\n prompt_tokens_details: z\n .object({ cached_tokens: z.number().nullish() })\n .nullish(),\n prompt_token_details: z\n .object({ cached_tokens: z.number().nullish() })\n .nullish(),\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 mistralChatResponseSchema = 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({ name: z.string(), arguments: z.string() }),\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// 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 = 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 id: z.string(),\n function: z.object({ name: z.string(), arguments: z.string() }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: mistralUsageSchema.nullish(),\n});\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type MistralUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n num_cached_tokens?: number | null;\n prompt_tokens_details?: { cached_tokens?: number | null } | null;\n prompt_token_details?: { cached_tokens?: number | null } | null;\n};\n\nexport function convertMistralUsage(\n usage: MistralUsage | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\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","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\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 default:\n return 'other';\n }\n}\n","import { z } from 'zod/v4';\n\n// https://docs.mistral.ai/getting-started/models/models_overview/\nexport type MistralChatModelId =\n | 'ministral-3b-latest'\n | 'ministral-8b-latest'\n | 'ministral-14b-latest'\n | 'mistral-large-latest'\n | 'mistral-medium-latest'\n | 'mistral-medium-3'\n | 'mistral-large-2512'\n | 'mistral-medium-2508'\n | 'mistral-medium-2505'\n | 'mistral-small-2506'\n | 'pixtral-large-latest'\n // reasoning config support models\n | 'mistral-medium-3.5'\n | 'mistral-small-latest'\n | 'mistral-small-2603'\n // reasoning models\n | 'magistral-medium-latest'\n | 'magistral-small-latest'\n | 'magistral-medium-2509'\n | 'magistral-small-2509'\n | (string & {});\n\nexport const mistralLanguageModelChatOptions = 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 * Controls the reasoning effort for models that support adjustable reasoning.\n *\n * - `'high'`: Enable reasoning\n * - `'none'`: Disable reasoning\n */\n reasoningEffort: z.enum(['high', 'none']).optional(),\n});\n\nexport type MistralLanguageModelChatOptions = z.infer<\n typeof mistralLanguageModelChatOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst mistralErrorDataSchema = 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\nexport type MistralErrorData = z.infer<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 {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\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?: () => 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 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(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n input: values,\n metadata: mistralOptions.metadata,\n output_dimension: mistralOptions.outputDimension,\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 = z.object({\n data: z.array(z.object({ embedding: z.array(z.number()) })),\n usage: z.object({ prompt_tokens: z.number() }).nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type MistralEmbeddingModelId =\n | 'mistral-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 type { SharedV4Warning, SpeechModelV4 } from '@ai-sdk/provider';\nimport {\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 {\n mistralSpeechModelOptions,\n type MistralSpeechModelId,\n} from './mistral-speech-model-options';\n\ninterface MistralSpeechModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => 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 let responseFormat: MistralSpeechOutputFormat = 'mp3';\n if (['pcm', 'wav', 'mp3', 'flac', 'opus'].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 (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 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 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 = z.object({\n audio_data: z.string(),\n});\n","import { z } from 'zod/v4';\n\nexport type MistralSpeechModelId = 'voxtral-mini-tts-2603' | (string & {});\n\nexport const mistralSpeechModelOptions = 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\nexport type MistralSpeechModelOptions = z.infer<\n typeof mistralSpeechModelOptions\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"],"mappings":"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","names":["z","z","UnsupportedFunctionalityError","generateId","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","combineHeaders","createJsonResponseHandler","z"]}
1
+ {"version":3,"sources":["../src/mistral-provider.ts","../src/mistral-chat-language-model.ts","../src/convert-mistral-usage.ts","../src/convert-to-mistral-chat-messages.ts","../src/get-response-metadata.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-embedding-model.ts","../src/mistral-embedding-model-options.ts","../src/mistral-speech-model.ts","../src/mistral-speech-model-options.ts","../src/mistral-transcription-model.ts","../src/mistral-transcription-model-options.ts","../src/version.ts"],"sourcesContent":["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 loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { MistralChatLanguageModel } from './mistral-chat-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';\n\nexport interface MistralProvider extends ProviderV4 {\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 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?: 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 withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MISTRAL_API_KEY',\n description: 'Mistral',\n })}`,\n ...options.headers,\n },\n `ai-sdk/mistral/${VERSION}`,\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 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.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","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 combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n isCustomReasoning,\n mapReasoningToProviderEffort,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\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 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 mistralLanguageModelChatOptions,\n type MistralChatModelId,\n} from './mistral-chat-language-model-options';\nimport { mistralFailedResponseHandler } from './mistral-error';\nimport { prepareTools } from './mistral-prepare-tools';\n\ntype MistralChatConfig = {\n provider: string;\n baseURL: string;\n headers?: () => 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: mistralLanguageModelChatOptions,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const supportsReasoningEffort =\n this.modelId === 'mistral-small-latest' ||\n this.modelId === 'mistral-small-2603' ||\n this.modelId === 'mistral-medium-3' ||\n this.modelId === 'mistral-medium-3.5';\n\n let resolvedReasoningEffort: string | undefined;\n if (supportsReasoningEffort) {\n resolvedReasoningEffort =\n options.reasoningEffort ??\n (isCustomReasoning(reasoning)\n ? reasoning === 'none'\n ? 'none'\n : mapReasoningToProviderEffort({\n reasoning,\n effortMap: {\n minimal: 'high',\n low: 'high',\n medium: 'high',\n high: 'high',\n xhigh: 'high',\n },\n warnings,\n })\n : undefined);\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 need to instruct the model to return a JSON object.\n // https://docs.mistral.ai/capabilities/structured-output/structured_output_overview/\n if (responseFormat?.type === 'json' && !responseFormat?.schema) {\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\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(this.config.headers?.(), options.headers),\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(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\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\n const generateId = this.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof mistralChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\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 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 const toolCallId = toolCall.id;\n const toolName = toolCall.function.name;\n const input = toolCall.function.arguments;\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallId,\n toolName,\n });\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCallId,\n delta: input,\n });\n\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCallId,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId,\n toolName,\n input,\n });\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 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(content: z.infer<typeof mistralContentSchema>) {\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 = 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\nconst mistralUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n num_cached_tokens: z.number().nullish(),\n prompt_tokens_details: z\n .object({ cached_tokens: z.number().nullish() })\n .nullish(),\n prompt_token_details: z\n .object({ cached_tokens: z.number().nullish() })\n .nullish(),\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 mistralChatResponseSchema = 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({ name: z.string(), arguments: z.string() }),\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// 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 = 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 id: z.string(),\n function: z.object({ name: z.string(), arguments: z.string() }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: mistralUsageSchema.nullish(),\n});\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type MistralUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n num_cached_tokens?: number | null;\n prompt_tokens_details?: { cached_tokens?: number | null } | null;\n prompt_token_details?: { cached_tokens?: number | null } | null;\n};\n\nexport function convertMistralUsage(\n usage: MistralUsage | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\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","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\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 default:\n return 'other';\n }\n}\n","import { z } from 'zod/v4';\n\n// https://docs.mistral.ai/getting-started/models/models_overview/\nexport type MistralChatModelId =\n | 'ministral-3b-latest'\n | 'ministral-8b-latest'\n | 'ministral-14b-latest'\n | 'mistral-large-latest'\n | 'mistral-medium-latest'\n | 'mistral-medium-3'\n | 'mistral-large-2512'\n | 'mistral-medium-2508'\n | 'mistral-medium-2505'\n | 'mistral-small-2506'\n | 'pixtral-large-latest'\n // reasoning config support models\n | 'mistral-medium-3.5'\n | 'mistral-small-latest'\n | 'mistral-small-2603'\n // reasoning models\n | 'magistral-medium-latest'\n | 'magistral-small-latest'\n | 'magistral-medium-2509'\n | 'magistral-small-2509'\n | (string & {});\n\nexport const mistralLanguageModelChatOptions = 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 * Controls the reasoning effort for models that support adjustable reasoning.\n *\n * - `'high'`: Enable reasoning\n * - `'none'`: Disable reasoning\n */\n reasoningEffort: z.enum(['high', 'none']).optional(),\n});\n\nexport type MistralLanguageModelChatOptions = z.infer<\n typeof mistralLanguageModelChatOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst mistralErrorDataSchema = 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\nexport type MistralErrorData = z.infer<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 {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\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?: () => 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 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(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n input: values,\n metadata: mistralOptions.metadata,\n output_dimension: mistralOptions.outputDimension,\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 = z.object({\n data: z.array(z.object({ embedding: z.array(z.number()) })),\n usage: z.object({ prompt_tokens: z.number() }).nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type MistralEmbeddingModelId =\n | 'mistral-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 type { SharedV4Warning, SpeechModelV4 } from '@ai-sdk/provider';\nimport {\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 {\n mistralSpeechModelOptions,\n type MistralSpeechModelId,\n} from './mistral-speech-model-options';\n\ninterface MistralSpeechModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => 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 let responseFormat: MistralSpeechOutputFormat = 'mp3';\n if (['pcm', 'wav', 'mp3', 'flac', 'opus'].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 (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 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 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 = z.object({\n audio_data: z.string(),\n});\n","import { z } from 'zod/v4';\n\nexport type MistralSpeechModelId = 'voxtral-mini-tts-2603' | (string & {});\n\nexport const mistralSpeechModelOptions = 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\nexport type MistralSpeechModelOptions = z.infer<\n typeof mistralSpeechModelOptions\n>;\n","import {\n InvalidArgumentError,\n type JSONObject,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\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 {\n mistralTranscriptionModelOptions,\n type MistralTranscriptionModelId,\n} from './mistral-transcription-model-options';\n\ntype MistralTranscriptionModelConfig = {\n provider: string;\n baseURL: string;\n headers?: () => 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 // Mistral documents these options as mutually incompatible. Rejecting the\n // combination locally provides a stable SDK error instead of an API 4xx.\n if (\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 const formData = new FormData();\n const blob =\n audio instanceof Uint8Array\n ? new Blob([audio])\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(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(this.config.headers?.(), options.headers),\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: {\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 = 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","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type MistralTranscriptionModelId = 'voxtral-mini-latest' | (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 * The sampling temperature.\n */\n temperature: z.number().optional(),\n\n /**\n * The timestamp granularities to include in the transcription response.\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 */\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 * Mistral requires each item to omit commas and whitespace. Use\n * underscores to represent multi-word phrases.\n */\n contextBias: z\n .array(\n z\n .string()\n .min(1)\n .regex(\n /^[^\\s,]+$/,\n 'Context bias items must not contain commas or whitespace.',\n ),\n )\n .max(100)\n .optional(),\n }),\n ),\n);\n\nexport type MistralTranscriptionModelOptions = InferSchema<\n typeof mistralTranscriptionModelOptions\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"],"mappings":";AAAA;AAAA,EACE;AAAA,OAMK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;;;ACHP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,KAAAA,UAAS;;;ACfX,SAAS,oBACd,OACsB;AAbxB;AAcE,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,MACL,aAAa;AAAA,QACX,OAAO;AAAA,QACP,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,MACd;AAAA,MACA,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,KAAK;AAAA,IACP;AAAA,EACF;AAEA,QAAM,eAAe,MAAM;AAC3B,QAAM,mBAAmB,MAAM;AAE/B,QAAM,mBACJ,uBAAM,sBAAN,aACA,WAAM,0BAAN,mBAA6B,kBAD7B,aAEA,WAAM,yBAAN,mBAA4B,kBAF5B,YAGA;AAEF,SAAO;AAAA,IACL,aAAa;AAAA,MACX,OAAO;AAAA,MACP,SAAS,eAAe;AAAA,MACxB,WAAW,mBAAmB;AAAA,MAC9B,YAAY;AAAA,IACd;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AAAA,IACA,KAAK;AAAA,EACP;AACF;;;ACtDA;AAAA,EACE;AAAA,OAGK;AAKP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,cAAc,EAAE,KAAK,GAA8C;AAC1E,MAAI,KAAK,KAAK,SAAS,OAAO;AAC5B,WAAO,KAAK,KAAK,IAAI,SAAS;AAAA,EAChC;AAEA,MAAI,KAAK,KAAK,SAAS,QAAQ;AAC7B,WAAO,QAAQ,qBAAqB,EAAE,KAAK,CAAC,CAAC,WAAW,gBAAgB,KAAK,KAAK,IAAI,CAAC;AAAA,EACzF;AAEA,QAAM,IAAI,8BAA8B;AAAA,IACtC,eAAe,uBAAuB,KAAK,KAAK,IAAI;AAAA,EACtD,CAAC;AACH;AAEO,SAAS,6BACd,QACe;AA/BjB;AAgCE,QAAM,WAA0B,CAAC;AAEjC,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,EAAE,MAAM,QAAQ,IAAI,OAAO,CAAC;AAClC,UAAM,gBAAgB,MAAM,OAAO,SAAS;AAE5C,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,iBAAS,KAAK,EAAE,MAAM,UAAU,QAAQ,CAAC;AACzC;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,IAAI,UAAQ;AAC3B,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC;AAAA,cAEA,KAAK,QAAQ;AACX,wBAAQ,KAAK,KAAK,MAAM;AAAA,kBACtB,KAAK,aAAa;AAChB,0BAAM,IAAI,8BAA8B;AAAA,sBACtC,eAAe;AAAA,oBACjB,CAAC;AAAA,kBACH;AAAA,kBACA,KAAK,QAAQ;AACX,0BAAM,IAAI,8BAA8B;AAAA,sBACtC,eAAe;AAAA,oBACjB,CAAC;AAAA,kBACH;AAAA,kBACA,KAAK;AAAA,kBACL,KAAK,QAAQ;AACX,0BAAM,WAAW,qBAAqB,KAAK,SAAS;AAEpD,wBAAI,aAAa,SAAS;AACxB,6BAAO;AAAA,wBACL,MAAM;AAAA,wBACN,WAAW,cAAc,EAAE,KAAK,CAAC;AAAA,sBACnC;AAAA,oBACF,OAAO;AACL,0BAAI,KAAK,KAAK,SAAS,QAAQ;AAC7B,8BAAM,gBAAgB,qBAAqB,EAAE,KAAK,CAAC;AACnD,4BAAI,kBAAkB,mBAAmB;AACvC,gCAAM,IAAI,8BAA8B;AAAA,4BACtC,eACE;AAAA,0BACJ,CAAC;AAAA,wBACH;AAAA,sBACF,WAAW,KAAK,cAAc,mBAAmB;AAC/C,8BAAM,IAAI,8BAA8B;AAAA,0BACtC,eACE;AAAA,wBACJ,CAAC;AAAA,sBACH;AAEA,6BAAO;AAAA,wBACL,MAAM;AAAA,wBACN,cAAc,cAAc,EAAE,KAAK,CAAC;AAAA,sBACtC;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,YAAI,OAAO;AACX,YAAI,eAAe;AACnB,cAAM,eAAsD,CAAC;AAC7D,cAAM,YAID,CAAC;AAEN,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,sBAAQ,KAAK;AACb,2BAAa,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AACnD;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,wBAAU,KAAK;AAAA,gBACb,IAAI,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK,UAAU,KAAK,KAAK;AAAA,gBACtC;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,6BAAe;AACf,2BAAa,KAAK;AAAA,gBAChB,MAAM;AAAA,gBACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,gBAC5C,QAAQ;AAAA,cACV,CAAC;AACD;AAAA,YACF;AAAA,YACA,SAAS;AACP,oBAAM,IAAI;AAAA,gBACR,kDAAkD,KAAK,IAAI;AAAA,cAC7D;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,eAAe,eAAe;AAAA,UACvC,QAAQ,gBAAgB,OAAO;AAAA,UAC/B,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,QACjD,CAAC;AAED;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,mBAAW,gBAAgB,SAAS;AAClC,cAAI,aAAa,SAAS,0BAA0B;AAClD;AAAA,UACF;AACA,gBAAM,SAAS,aAAa;AAE5B,cAAI;AACJ,kBAAQ,OAAO,MAAM;AAAA,YACnB,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,OAAO;AACtB;AAAA,YACF,KAAK;AACH,8BAAe,YAAO,WAAP,YAAiB;AAChC;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,KAAK,UAAU,OAAO,KAAK;AAC1C;AAAA,UACJ;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,MAAM,aAAa;AAAA,YACnB,cAAc,aAAa;AAAA,YAC3B,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAAA,MACA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACtMO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL,IAAI,kBAAM;AAAA,IACV,SAAS,wBAAS;AAAA,IAClB,WAAW,WAAW,OAAO,IAAI,KAAK,UAAU,GAAI,IAAI;AAAA,EAC1D;AACF;;;ACZO,SAAS,uBACd,cACwC;AACxC,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AChBA,SAAS,SAAS;AA0BX,IAAM,kCAAkC,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtD,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,EAEjC,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvC,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxC,kBAAkB,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvC,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxC,iBAAiB,EAAE,KAAK,CAAC,QAAQ,MAAM,CAAC,EAAE,SAAS;AACrD,CAAC;;;AClED,SAAS,sCAAsC;AAC/C,SAAS,KAAAC,UAAS;AAElB,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,QAAQA,GAAE,QAAQ,OAAO;AAAA,EACzB,SAASA,GAAE,OAAO;AAAA,EAClB,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAMA,GAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAIM,IAAM,+BAA+B,+BAA+B;AAAA,EACzE,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B,CAAC;;;AChBD;AAAA,EACE,iCAAAC;AAAA,OAGK;AAGA,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAiBE;AAEA,WAAQ,+BAAO,UAAS,QAAQ;AAEhC,QAAM,eAAkC,CAAC;AAEzC,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,YAAY,QAAW,aAAa;AAAA,EACjE;AAEA,QAAM,eAQD,CAAC;AAEN,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,YAAY;AAC5B,mBAAa,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,SAAS,yBAAyB,KAAK,EAAE;AAAA,MAC3C,CAAC;AAAA,IACH,OAAO;AACL,mBAAa,KAAK;AAAA,QAChB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,UACjB,GAAI,KAAK,UAAU,OAAO,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,QACvD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,cAAc,MAAM;AACtB,WAAO,EAAE,OAAO,cAAc,YAAY,QAAW,aAAa;AAAA,EACpE;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,OAAO,cAAc,YAAY,MAAM,aAAa;AAAA,IAC/D,KAAK;AACH,aAAO,EAAE,OAAO,cAAc,YAAY,OAAO,aAAa;AAAA;AAAA;AAAA,IAIhE,KAAK;AACH,aAAO;AAAA,QACL,OAAO,aAAa;AAAA,UAClB,UAAQ,KAAK,SAAS,SAAS,WAAW;AAAA,QAC5C;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAIA,+BAA8B;AAAA,QACtC,eAAe,qBAAqB,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AP/CO,IAAM,2BAAN,MAAM,0BAAoD;AAAA,EAsB/D,YAAY,SAA6B,QAA2B;AArBpE,SAAS,uBAAuB;AA+BhC,SAAS,gBAA0C;AAAA,MACjD,mBAAmB,CAAC,gBAAgB;AAAA,IACtC;AAnFF;AAwEI,SAAK,UAAU;AACf,SAAK,SAAS;AACd,SAAK,cAAa,YAAO,eAAP,YAAqB;AAAA,EACzC;AAAA,EAlBA,QAAQ,kBAAkB,EAAE,OAAiC;AAC3D,WAAO,sBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,oBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,0BAAyB,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACrE;AAAA,EAQA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAMA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+B;AApGjC;AAqGI,UAAM,WAA8B,CAAC;AAErC,UAAM,WACH,WAAM,qBAAqB;AAAA,MAC1B,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC,MAJA,YAIM,CAAC;AAEV,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK,EAAE,MAAM,eAAe,SAAS,OAAO,CAAC;AAAA,IACxD;AAEA,UAAM,0BACJ,KAAK,YAAY,0BACjB,KAAK,YAAY,wBACjB,KAAK,YAAY,sBACjB,KAAK,YAAY;AAEnB,QAAI;AACJ,QAAI,yBAAyB;AAC3B,iCACE,aAAQ,oBAAR,YACC,kBAAkB,SAAS,IACxB,cAAc,SACZ,SACA,6BAA6B;AAAA,QAC3B;AAAA,QACA,WAAW;AAAA,UACT,SAAS;AAAA,UACT,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,QACA;AAAA,MACF,CAAC,IACH;AAAA,IACR,WAAW,kBAAkB,SAAS,GAAG;AACvC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,qBAAoB,aAAQ,sBAAR,YAA6B;AACvD,UAAM,oBAAmB,aAAQ,qBAAR,YAA4B;AAIrD,SAAI,iDAAgB,UAAS,UAAU,EAAC,iDAAgB,SAAQ;AAC9D,eAAS,kCAAkC;AAAA,QACzC,UAAU;AAAA,QACV,QAAQ,eAAe;AAAA,MACzB,CAAC;AAAA,IACH;AAEA,UAAM,WAAW;AAAA;AAAA,MAEf,OAAO,KAAK;AAAA;AAAA,MAGZ,aAAa,QAAQ;AAAA;AAAA,MAGrB,YAAY;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,GAAI,oBAAoB,OACpB,EAAE,mBAAmB,iBAAiB,IACtC,CAAC;AAAA,MACL,GAAI,mBAAmB,OAAO,EAAE,kBAAkB,gBAAgB,IAAI,CAAC;AAAA,MACvE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,kBAAkB;AAAA;AAAA,MAGlB,kBACE,iDAAgB,UAAS,SACrB,sBAAqB,iDAAgB,WAAU,OAC7C;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,UACX,QAAQ,eAAe;AAAA,UACvB,QAAQ;AAAA,UACR,OAAM,oBAAe,SAAf,YAAuB;AAAA,UAC7B,aAAa,eAAe;AAAA,QAC9B;AAAA,MACF,IACA,EAAE,MAAM,cAAc,IACxB;AAAA;AAAA,MAGN,sBAAsB,QAAQ;AAAA,MAC9B,qBAAqB,QAAQ;AAAA;AAAA,MAG7B,UAAU,6BAA6B,MAAM;AAAA,IAC/C;AAEA,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,IACF,IAAI,aAAa;AAAA,MACf;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,OAAO;AAAA,QACP,aAAa;AAAA,QACb,GAAI,gBAAgB,QAAQ,QAAQ,sBAAsB,SACtD,EAAE,qBAAqB,QAAQ,kBAAkB,IACjD,CAAC;AAAA,MACP;AAAA,MACA,UAAU,CAAC,GAAG,UAAU,GAAG,YAAY;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACwC;AAlO5C;AAmOI,UAAM,EAAE,MAAM,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAE3D,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,MAAM,cAAc;AAAA,MACtB,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,gBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,SAAS,SAAS,QAAQ,CAAC;AACjC,UAAM,UAAyC,CAAC;AAGhD,QACE,OAAO,QAAQ,WAAW,QAC1B,MAAM,QAAQ,OAAO,QAAQ,OAAO,GACpC;AACA,iBAAW,QAAQ,OAAO,QAAQ,SAAS;AACzC,YAAI,KAAK,SAAS,YAAY;AAC5B,gBAAM,gBAAgB,wBAAwB,KAAK,QAAQ;AAC3D,cAAI,cAAc,SAAS,GAAG;AAC5B,oBAAQ,KAAK,EAAE,MAAM,aAAa,MAAM,cAAc,CAAC;AAAA,UACzD;AAAA,QACF,WAAW,KAAK,SAAS,QAAQ;AAC/B,cAAI,KAAK,KAAK,SAAS,GAAG;AACxB,oBAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,YAAM,OAAO,mBAAmB,OAAO,QAAQ,OAAO;AACtD,UAAI,QAAQ,QAAQ,KAAK,SAAS,GAAG;AACnC,gBAAQ,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,MACrC;AAAA,IACF;AAOA,QAAI,OAAO,QAAQ,cAAc,MAAM;AACrC,iBAAW,YAAY,OAAO,QAAQ,YAAY;AAChD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS,SAAS;AAAA,UAC5B,OAAO,SAAS,SAAS;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc;AAAA,QACZ,SAAS,uBAAuB,OAAO,aAAa;AAAA,QACpD,MAAK,YAAO,kBAAP,YAAwB;AAAA,MAC/B;AAAA,MACA,OAAO,oBAAoB,SAAS,KAAK;AAAA,MACzC,SAAS,EAAE,KAAK;AAAA,MAChB,UAAU;AAAA,QACR,GAAG,oBAAoB,QAAQ;AAAA,QAC/B,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SACsC;AApT1C;AAqTI,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACrD,UAAM,OAAO,EAAE,GAAG,MAAM,QAAQ,KAAK;AAErC,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,MAAM,cAAc;AAAA,MAC/D,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,gBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,QAAI,eAA4C;AAAA,MAC9C,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AACA,QAAI,QAAkC;AAEtC,QAAI,eAAe;AACnB,QAAI,aAAa;AACjB,QAAI,oBAAmC;AAEvC,UAAMC,cAAa,KAAK;AAExB,WAAO;AAAA,MACL,QAAQ,SAAS;AAAA,QACf,IAAI,gBAGF;AAAA,UACA,MAAM,YAAY;AAChB,uBAAW,QAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AAAA,UACvD;AAAA,UAEA,UAAU,OAAO,YAAY;AAE3B,gBAAI,QAAQ,kBAAkB;AAC5B,yBAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,MAAM,SAAS,CAAC;AAAA,YAC9D;AAEA,gBAAI,CAAC,MAAM,SAAS;AAClB,yBAAW,QAAQ,EAAE,MAAM,SAAS,OAAO,MAAM,MAAM,CAAC;AACxD;AAAA,YACF;AAEA,kBAAM,QAAQ,MAAM;AAEpB,gBAAI,cAAc;AAChB,6BAAe;AAEf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,GAAG,oBAAoB,KAAK;AAAA,cAC9B,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,SAAS,MAAM;AACvB,sBAAQ,MAAM;AAAA,YAChB;AAEA,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAC9B,kBAAM,QAAQ,OAAO;AAErB,kBAAM,cAAc,mBAAmB,MAAM,OAAO;AAEpD,gBAAI,MAAM,WAAW,QAAQ,MAAM,QAAQ,MAAM,OAAO,GAAG;AACzD,yBAAW,QAAQ,MAAM,SAAS;AAChC,oBAAI,KAAK,SAAS,YAAY;AAC5B,wBAAM,iBAAiB,wBAAwB,KAAK,QAAQ;AAC5D,sBAAI,eAAe,SAAS,GAAG;AAC7B,wBAAI,qBAAqB,MAAM;AAE7B,0BAAI,YAAY;AACd,mCAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,IAAI,CAAC;AAChD,qCAAa;AAAA,sBACf;AAEA,0CAAoBA,YAAW;AAC/B,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,IAAI;AAAA,sBACN,CAAC;AAAA,oBACH;AACA,+BAAW,QAAQ;AAAA,sBACjB,MAAM;AAAA,sBACN,IAAI;AAAA,sBACJ,OAAO;AAAA,oBACT,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,eAAe,QAAQ,YAAY,SAAS,GAAG;AACjD,kBAAI,CAAC,YAAY;AAEf,oBAAI,qBAAqB,MAAM;AAC7B,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI;AAAA,kBACN,CAAC;AACD,sCAAoB;AAAA,gBACtB;AACA,2BAAW,QAAQ,EAAE,MAAM,cAAc,IAAI,IAAI,CAAC;AAClD,6BAAa;AAAA,cACf;AAEA,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO;AAAA,cACT,CAAC;AAAA,YACH;AAEA,iBAAI,+BAAO,eAAc,MAAM;AAC7B,yBAAW,YAAY,MAAM,YAAY;AACvC,sBAAM,aAAa,SAAS;AAC5B,sBAAM,WAAW,SAAS,SAAS;AACnC,sBAAM,QAAQ,SAAS,SAAS;AAEhC,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,kBACJ;AAAA,gBACF,CAAC;AAED,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,kBACJ,OAAO;AAAA,gBACT,CAAC;AAED,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AAED,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAEA,gBAAI,OAAO,iBAAiB,MAAM;AAChC,6BAAe;AAAA,gBACb,SAAS,uBAAuB,OAAO,aAAa;AAAA,gBACpD,KAAK,OAAO;AAAA,cACd;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAChB,gBAAI,qBAAqB,MAAM;AAC7B,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,cACN,CAAC;AAAA,YACH;AACA,gBAAI,YAAY;AACd,yBAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,IAAI,CAAC;AAAA,YAClD;AAEA,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA,OAAO,oBAAoB,KAAK;AAAA,YAClC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,MAChB,UAAU,EAAE,SAAS,gBAAgB;AAAA,IACvC;AAAA,EACF;AACF;AAEA,SAAS,wBACP,UACA;AACA,SAAO,SACJ,OAAO,WAAS,MAAM,SAAS,MAAM,EACrC,IAAI,WAAS,MAAM,IAAI,EACvB,KAAK,EAAE;AACZ;AAEA,SAAS,mBAAmB,SAA+C;AACzE,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,cAAwB,CAAC;AAE/B,aAAW,SAAS,SAAS;AAC3B,UAAM,EAAE,KAAK,IAAI;AAEjB,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,oBAAY,KAAK,MAAM,IAAI;AAC3B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAEH;AAAA,MACF,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,YAAY,SAAS,YAAY,KAAK,EAAE,IAAI;AACrD;AAEA,IAAM,uBAAuBC,GAC1B,MAAM;AAAA,EACLA,GAAE,OAAO;AAAA,EACTA,GAAE;AAAA,IACAA,GAAE,mBAAmB,QAAQ;AAAA,MAC3BA,GAAE,OAAO;AAAA,QACP,MAAMA,GAAE,QAAQ,MAAM;AAAA,QACtB,MAAMA,GAAE,OAAO;AAAA,MACjB,CAAC;AAAA,MACDA,GAAE,OAAO;AAAA,QACP,MAAMA,GAAE,QAAQ,WAAW;AAAA,QAC3B,WAAWA,GAAE,MAAM;AAAA,UACjBA,GAAE,OAAO;AAAA,UACTA,GAAE,OAAO;AAAA,YACP,KAAKA,GAAE,OAAO;AAAA,YACd,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,UAC9B,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,MACDA,GAAE,OAAO;AAAA,QACP,MAAMA,GAAE,QAAQ,WAAW;AAAA,QAC3B,eAAeA,GAAE,MAAMA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,CAAC,CAAC;AAAA,MAC1D,CAAC;AAAA,MACDA,GAAE,OAAO;AAAA,QACP,MAAMA,GAAE,QAAQ,UAAU;AAAA,QAC1B,UAAUA,GAAE;AAAA,UACVA,GAAE,OAAO;AAAA,YACP,MAAMA,GAAE,QAAQ,MAAM;AAAA,YACtB,MAAMA,GAAE,OAAO;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF,CAAC,EACA,QAAQ;AAEX,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EAClC,eAAeA,GAAE,OAAO;AAAA,EACxB,mBAAmBA,GAAE,OAAO;AAAA,EAC5B,cAAcA,GAAE,OAAO;AAAA,EACvB,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACtC,uBAAuBA,GACpB,OAAO,EAAE,eAAeA,GAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAC9C,QAAQ;AAAA,EACX,sBAAsBA,GACnB,OAAO,EAAE,eAAeA,GAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAC9C,QAAQ;AACb,CAAC;AAID,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EACzC,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,OAAO;AAAA,QAChB,MAAMA,GAAE,QAAQ,WAAW;AAAA,QAC3B,SAAS;AAAA,QACT,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,IAAIA,GAAE,OAAO;AAAA,YACb,UAAUA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,GAAG,WAAWA,GAAE,OAAO,EAAE,CAAC;AAAA,UAChE,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,OAAOA,GAAE,OAAO;AAAA,MAChB,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,QAAQA,GAAE,QAAQ,iBAAiB;AAAA,EACnC,OAAO;AACT,CAAC;AAID,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,QACd,MAAMA,GAAE,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS;AAAA,QACrC,SAAS;AAAA,QACT,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,IAAIA,GAAE,OAAO;AAAA,YACb,UAAUA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,GAAG,WAAWA,GAAE,OAAO,EAAE,CAAC;AAAA,UAChE,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAClC,OAAOA,GAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EACA,OAAO,mBAAmB,QAAQ;AACpC,CAAC;;;AQ5nBD;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,yBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;;;ACdlB,SAAS,KAAAC,UAAS;AAOX,IAAM,+BAA+BA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAInD,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKjD,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKtD,aAAaA,GACV,KAAK,CAAC,SAAS,QAAQ,SAAS,UAAU,SAAS,CAAC,EACpD,SAAS;AACd,CAAC;;;ADIM,IAAM,wBAAN,MAAM,uBAAkD;AAAA,EA0B7D,YACE,SACA,QACA;AA5BF,SAAS,uBAAuB;AAEhC,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AA0B/B,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAxBA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQC,mBAAkB,EAAE,OAA8B;AACxD,WAAOC,uBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQC,qBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,uBAAsB,QAAQ,SAAS,QAAQ,MAAM;AAAA,EAClE;AAAA,EAUA,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AArEJ;AAsEI,QAAI,OAAO,SAAS,KAAK,sBAAsB;AAC7C,YAAM,IAAI,mCAAmC;AAAA,QAC3C,UAAU,KAAK;AAAA,QACf,SAAS,KAAK;AAAA,QACd,sBAAsB,KAAK;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,kBACH,WAAMC,sBAAqB;AAAA,MAC1B,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC,MAJA,YAIM,CAAC;AAEV,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF,IAAI,MAAMC,eAAc;AAAA,MACtB,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAASC,iBAAe,gBAAK,QAAO,YAAZ,6BAAyB,OAAO;AAAA,MACxD,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ,OAAO;AAAA,QACP,UAAU,eAAe;AAAA,QACzB,kBAAkB,eAAe;AAAA,QACjC,cAAc,eAAe;AAAA,QAC7B,iBAAiB;AAAA,MACnB;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,UAAU,CAAC;AAAA,MACX,YAAY,SAAS,KAAK,IAAI,UAAQ,KAAK,SAAS;AAAA,MACpD,OAAO,SAAS,QACZ,EAAE,QAAQ,SAAS,MAAM,cAAc,IACvC;AAAA,MACJ,UAAU,EAAE,SAAS,iBAAiB,MAAM,SAAS;AAAA,IACvD;AAAA,EACF;AACF;AAIA,IAAM,qCAAqCC,GAAE,OAAO;AAAA,EAClD,MAAMA,GAAE,MAAMA,GAAE,OAAO,EAAE,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,CAAC,CAAC;AAAA,EAC1D,OAAOA,GAAE,OAAO,EAAE,eAAeA,GAAE,OAAO,EAAE,CAAC,EAAE,QAAQ;AACzD,CAAC;;;AE5HD;AAAA,EACE,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,wBAAAC;AAAA,EACA;AAAA,EACA,yBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,sBAAAC;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;;;ACXlB,SAAS,KAAAC,UAAS;AAIX,IAAM,4BAA4BA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhD,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACvC,CAAC;;;ADmBM,IAAM,qBAAN,MAAM,oBAA4C;AAAA,EAqBvD,YACW,SACQ,QACjB;AAFS;AACQ;AAtBnB,SAAS,uBAAuB;AAAA,EAuB7B;AAAA,EArBH,QAAQC,mBAAkB,EAAE,OAA2B;AACrD,WAAOC,uBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQC,qBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,oBAAmB,QAAQ,SAAS,QAAQ,MAAM;AAAA,EAC/D;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+C;AAC7C,UAAM,WAA8B,CAAC;AACrC,UAAM,iBAAiB,MAAMC,sBAAqB;AAAA,MAChD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,iBAA4C;AAChD,QAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,MAAM,EAAE,SAAS,YAAY,GAAG;AAChE,uBAAiB;AAAA,IACnB,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,8BAA8B,YAAY;AAAA,MACrD,CAAC;AAAA,IACH;AAEA,QAAI,gBAAgB,MAAM;AACxB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,MAAM;AACjB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,QAAI,YAAY,MAAM;AACpB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,iDAAgB;AACjC,UAAM,cAAc;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,UAAU,YAAY,OAAO,QAAQ;AAAA,MACrC,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,QAAQ;AAAA,IACV;AAEA,UAAM,oBAAoB;AAAA,MACxB,GAAG;AAAA,MACH,WAAW,YAAY,OAAO,SAAY;AAAA,IAC5C;AAEA,WAAO,EAAE,aAAa,mBAAmB,SAAS;AAAA,EACpD;AAAA,EAEA,MAAM,WACJ,SAC2D;AApI/D;AAqII,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,aAAa,mBAAmB,SAAS,IAC/C,MAAM,KAAK,QAAQ,OAAO;AAE5B,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,MAAM,UAAU;AAAA,MAClB,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAASC;AAAA,QACP,EAAE,gBAAgB,mBAAmB;AAAA,SACrC,gBAAK,QAAO,YAAZ;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACJ,SAAS,KAAK,UAAU,WAAW;AAAA,QACnC,QAAQ;AAAA,MACV;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,OAAO,SAAS;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACP,MAAM,KAAK,UAAU,iBAAiB;AAAA,MACxC;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,8BAA8BC,GAAE,OAAO;AAAA,EAC3C,YAAYA,GAAE,OAAO;AACvB,CAAC;;;AElLD;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE,kBAAAC;AAAA,EACA;AAAA,EACA,6BAAAC;AAAA,EACA;AAAA,EACA,wBAAAC;AAAA,EACA;AAAA,EACA,yBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,sBAAAC;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;;;AClBlB;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;AAKX,IAAM,mCAAmC;AAAA,EAAW,MACzD;AAAA,IACEA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,MAKrC,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,MAKjC,wBAAwBA,GACrB,MAAMA,GAAE,KAAK,CAAC,WAAW,MAAM,CAAC,CAAC,EACjC,IAAI,CAAC,EACL,SAAS;AAAA;AAAA;AAAA;AAAA,MAKZ,SAASA,GAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS9B,aAAaA,GACV;AAAA,QACCA,GACG,OAAO,EACP,IAAI,CAAC,EACL;AAAA,UACC;AAAA,UACA;AAAA,QACF;AAAA,MACJ,EACC,IAAI,GAAG,EACP,SAAS;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;ADvBO,IAAM,4BAAN,MAAM,2BAA0D;AAAA,EAqBrE,YACW,SACQ,QACjB;AAFS;AACQ;AAtBnB,SAAS,uBAAuB;AAAA,EAuB7B;AAAA,EArBH,QAAQC,mBAAkB,EAAE,OAAkC;AAC5D,WAAOC,uBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQC,qBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,2BAA0B,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACtE;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAsD;AACpD,UAAM,WAA8B,CAAC;AACrC,UAAM,iBAAiB,MAAMC,sBAAqB;AAAA,MAChD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAID,SACE,iDAAgB,aAAY,QAC5B,eAAe,0BAA0B,MACzC;AACA,YAAM,IAAI,qBAAqB;AAAA,QAC7B,UAAU;AAAA,QACV,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OACJ,iBAAiB,aACb,IAAI,KAAK,CAAC,KAAK,CAAC,IAChB,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,CAAC;AAEjD,aAAS,OAAO,SAAS,KAAK,OAAO;AACrC,aAAS;AAAA,MACP;AAAA,MACA,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,EAAE,MAAM,UAAU,CAAC;AAAA,MAC7C,SAAS,qBAAqB,SAAS,CAAC;AAAA,IAC1C;AAEA,QAAI,kBAAkB,MAAM;AAC1B,sBAAgB,UAAU,YAAY,eAAe,QAAQ;AAC7D,sBAAgB,UAAU,eAAe,eAAe,WAAW;AACnE;AAAA,QACE;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MACjB;AACA,sBAAgB,UAAU,WAAW,eAAe,OAAO;AAC3D,sBAAgB,UAAU,gBAAgB,eAAe,WAAW;AAAA,IACtE;AAEA,WAAO,EAAE,UAAU,SAAS;AAAA,EAC9B;AAAA,EAEA,MAAM,WACJ,SACkE;AApHtE;AAqHI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,UAAU,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAEzD,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,MAAM,kBAAkB;AAAA,MAC1B,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAASC,iBAAe,gBAAK,QAAO,YAAZ,6BAAyB,QAAQ,OAAO;AAAA,MAChE;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,YACJ,oBAAS,aAAT,mBAAmB,IAAI,cAAY;AAAA,MACjC,MAAM,QAAQ;AAAA,MACd,aAAa,QAAQ;AAAA,MACrB,WAAW,QAAQ;AAAA,IACrB,QAJA,YAIO,CAAC;AAEV,UAAM,kBAA8B,CAAC;AAErC,QAAI,SAAS,SAAS,MAAM;AAC1B,sBAAgB,QAAQ;AAAA,QACtB,GAAI,SAAS,MAAM,iBAAiB,QAAQ;AAAA,UAC1C,cAAc,SAAS,MAAM;AAAA,QAC/B;AAAA,QACA,GAAI,SAAS,MAAM,qBAAqB,QAAQ;AAAA,UAC9C,kBAAkB,SAAS,MAAM;AAAA,QACnC;AAAA,QACA,GAAI,SAAS,MAAM,gBAAgB,QAAQ;AAAA,UACzC,aAAa,SAAS,MAAM;AAAA,QAC9B;AAAA,QACA,GAAI,SAAS,MAAM,wBAAwB,QAAQ;AAAA,UACjD,oBAAoB,SAAS,MAAM;AAAA,QACrC;AAAA,QACA,GAAI,SAAS,MAAM,iBAAiB,QAAQ;AAAA,UAC1C,cAAc,SAAS,MAAM;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAmB,cAAS,aAAT,mBACrB;AAAA,MACA,aACE,QAAQ,QAAQ,QAChB,QAAQ,SAAS,QACjB,QAAQ,cAAc;AAAA,MAEzB,IAAI,cAAY;AAAA,MACf,MAAM,QAAQ;AAAA,MACd,aAAa,QAAQ;AAAA,MACrB,WAAW,QAAQ;AAAA,MACnB,GAAI,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,KAAK;AAAA,MACjD,GAAI,QAAQ,SAAS,QAAQ,EAAE,OAAO,QAAQ,MAAM;AAAA,MACpD,GAAI,QAAQ,cAAc,QAAQ;AAAA,QAChC,WAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AAEF,QAAI,oBAAoB,QAAQ,iBAAiB,SAAS,GAAG;AAC3D,sBAAgB,WAAW;AAAA,IAC7B;AAEA,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf;AAAA,MACA,WAAU,cAAS,aAAT,YAAqB;AAAA,MAC/B,oBACE,0BAAS,UAAT,mBAAgB,yBAAhB,aACA,cAAS,GAAG,EAAE,MAAd,mBAAiB,cADjB,YAEA;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,SAAS;AAAA,QAClB,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,GAAI,OAAO,KAAK,eAAe,EAAE,SAAS,KAAK;AAAA,QAC7C,kBAAkB;AAAA,UAChB,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,gBACP,UACA,KACA,OACM;AACN,MAAI,SAAS,MAAM;AACjB;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAW,QAAQ,OAAO;AACxB,eAAS,OAAO,KAAK,IAAI;AAAA,IAC3B;AACA;AAAA,EACF;AAEA,WAAS,OAAO,KAAK,OAAO,KAAK,CAAC;AACpC;AAEA,IAAM,qCAAqCC,GAAE,OAAO;AAAA,EAClD,OAAOA,GAAE,OAAO;AAAA,EAChB,MAAMA,GAAE,OAAO;AAAA,EACf,UAAUA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC7B,UAAUA,GACP;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,QAAQ,uBAAuB,EAAE,QAAQ;AAAA,MACjD,MAAMA,GAAE,OAAO;AAAA,MACf,OAAOA,GAAE,OAAO;AAAA,MAChB,KAAKA,GAAE,OAAO;AAAA,MACd,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAC1B,YAAYA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACjC,CAAC;AAAA,EACH,EACC,QAAQ;AAAA,EACX,OAAOA,GACJ,OAAO;AAAA,IACN,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAClC,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACtC,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACjC,sBAAsBA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACzC,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACpC,CAAC,EACA,QAAQ;AACb,CAAC;;;AE7PM,IAAM,UACX,OACI,WACA;;;AfyGC,SAAS,cACd,UAAmC,CAAC,GACnB;AAhHnB;AAiHE,QAAM,WACJ,0BAAqB,QAAQ,OAAO,MAApC,YAAyC;AAE3C,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,eAAe,UAAU,WAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,kBAAkB,OAAO;AAAA,EAC3B;AAEF,QAAM,kBAAkB,CAAC,YACvB,IAAI,yBAAyB,SAAS;AAAA,IACpC,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,YAAY,QAAQ;AAAA,EACtB,CAAC;AAEH,QAAM,uBAAuB,CAAC,YAC5B,IAAI,sBAAsB,SAAS;AAAA,IACjC,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,oBAAoB,CAAC,YACzB,IAAI,mBAAmB,SAAS;AAAA,IAC9B,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,2BAA2B,CAAC,YAChC,IAAI,0BAA0B,SAAS;AAAA,IACrC,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,SAAU,SAA6B;AACtD,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,OAAO;AAAA,EAChC;AAEA,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,YAAY;AACrB,WAAS,iBAAiB;AAC1B,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAC9B,WAAS,SAAS;AAClB,WAAS,cAAc;AACvB,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAE9B,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAKO,IAAM,UAAU,cAAc;","names":["z","z","UnsupportedFunctionalityError","generateId","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","combineHeaders","createJsonResponseHandler","z"]}
@@ -6,7 +6,8 @@ description: Learn how to use Mistral.
6
6
  # Mistral AI Provider
7
7
 
8
8
  The [Mistral AI](https://mistral.ai/) provider contains language model,
9
- embedding model, and speech model support for Mistral APIs.
9
+ embedding model, speech model, and transcription model support for Mistral
10
+ APIs.
10
11
 
11
12
  ## Setup
12
13
 
@@ -313,6 +314,98 @@ const result = await generateText({
313
314
  also pass any available provider model ID as a string if needed.
314
315
  </Note>
315
316
 
317
+ ## Transcription Models
318
+
319
+ You can create models that call the
320
+ [Mistral audio transcription API](https://docs.mistral.ai/api/endpoint/audio/transcriptions)
321
+ using the `.transcription()` factory method:
322
+
323
+ ```ts
324
+ const model = mistral.transcription('voxtral-mini-latest');
325
+ ```
326
+
327
+ Use Mistral transcription models with [`transcribe`](/docs/reference/ai-sdk-core/transcribe):
328
+
329
+ ```ts
330
+ import { mistral } from '@ai-sdk/mistral';
331
+ import { transcribe } from 'ai';
332
+ import { readFile } from 'node:fs/promises';
333
+
334
+ const result = await transcribe({
335
+ model: mistral.transcription('voxtral-mini-latest'),
336
+ audio: await readFile('audio.mp3'),
337
+ });
338
+ ```
339
+
340
+ Mistral transcription models support additional provider options. Pass them
341
+ through `providerOptions.mistral` and use
342
+ `MistralTranscriptionModelOptions` for type checking:
343
+
344
+ ```ts highlight="9-13"
345
+ import {
346
+ mistral,
347
+ type MistralTranscriptionModelOptions,
348
+ } from '@ai-sdk/mistral';
349
+ import { transcribe } from 'ai';
350
+ import { readFile } from 'node:fs/promises';
351
+
352
+ const result = await transcribe({
353
+ model: mistral.transcription('voxtral-mini-latest'),
354
+ audio: await readFile('audio.mp3'),
355
+ providerOptions: {
356
+ mistral: {
357
+ timestampGranularities: ['segment'],
358
+ diarize: true,
359
+ contextBias: ['Vercel', 'AI_SDK'],
360
+ } satisfies MistralTranscriptionModelOptions,
361
+ },
362
+ });
363
+ ```
364
+
365
+ The following optional provider options are available:
366
+
367
+ - **language** _string_
368
+
369
+ The language of the audio, such as `en`. Providing it can improve accuracy.
370
+
371
+ - **temperature** _number_
372
+
373
+ The sampling temperature for the transcription.
374
+
375
+ - **timestampGranularities** _Array&lt;'segment' | 'word'&gt;_
376
+
377
+ Timestamp granularities to include in the response. Mistral does not support
378
+ combining this option with `language`; the SDK throws an
379
+ `InvalidArgumentError` when both are provided.
380
+
381
+ - **diarize** _boolean_
382
+
383
+ Whether to identify speakers in the transcription.
384
+
385
+ - **contextBias** _string[]_
386
+
387
+ Up to 100 words or phrases that guide spelling for names, technical terms,
388
+ or domain-specific vocabulary. Items cannot contain commas or whitespace;
389
+ use underscores for multi-word phrases.
390
+
391
+ The normalized result includes transcript text, language, timed segments, and
392
+ duration when returned by Mistral. Mistral token and prompt-audio usage is
393
+ available under `result.providerMetadata.mistral.usage`. Segment scores and
394
+ speaker IDs from diarization are available under
395
+ `result.providerMetadata.mistral.segments`.
396
+
397
+ <Note>
398
+ Audio is uploaded to Mistral for processing. This integration supports batch
399
+ transcription only; Mistral realtime transcription is not exposed by this
400
+ model.
401
+ </Note>
402
+
403
+ ### Model Capabilities
404
+
405
+ | Model | Timestamps | Diarization | Context Bias |
406
+ | --------------------- | ---------- | ----------- | ------------ |
407
+ | `voxtral-mini-latest` | <Check /> | <Check /> | <Check /> |
408
+
316
409
  ## Speech Models
317
410
 
318
411
  You can create models that call the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/mistral",
3
- "version": "4.0.16",
3
+ "version": "4.0.18",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -30,14 +30,14 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@ai-sdk/provider": "4.0.4",
33
- "@ai-sdk/provider-utils": "5.0.14"
33
+ "@ai-sdk/provider-utils": "5.0.16"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "22.19.19",
37
37
  "tsup": "^8.5.1",
38
38
  "typescript": "5.8.3",
39
39
  "zod": "3.25.76",
40
- "@ai-sdk/test-server": "2.0.0",
40
+ "@ai-sdk/test-server": "2.0.1",
41
41
  "@vercel/ai-tsconfig": "0.0.0"
42
42
  },
43
43
  "peerDependencies": {
package/src/index.ts CHANGED
@@ -13,4 +13,8 @@ export type {
13
13
  MistralSpeechModelId,
14
14
  MistralSpeechModelOptions,
15
15
  } from './mistral-speech-model-options';
16
+ export type {
17
+ MistralTranscriptionModelId,
18
+ MistralTranscriptionModelOptions,
19
+ } from './mistral-transcription-model-options';
16
20
  export { VERSION } from './version';
@@ -4,6 +4,7 @@ import {
4
4
  type LanguageModelV4,
5
5
  type ProviderV4,
6
6
  type SpeechModelV4,
7
+ type TranscriptionModelV4,
7
8
  } from '@ai-sdk/provider';
8
9
  import {
9
10
  loadApiKey,
@@ -17,6 +18,8 @@ import { MistralEmbeddingModel } from './mistral-embedding-model';
17
18
  import type { MistralEmbeddingModelId } from './mistral-embedding-model-options';
18
19
  import { MistralSpeechModel } from './mistral-speech-model';
19
20
  import type { MistralSpeechModelId } from './mistral-speech-model-options';
21
+ import { MistralTranscriptionModel } from './mistral-transcription-model';
22
+ import type { MistralTranscriptionModelId } from './mistral-transcription-model-options';
20
23
  import { VERSION } from './version';
21
24
 
22
25
  export interface MistralProvider extends ProviderV4 {
@@ -52,6 +55,18 @@ export interface MistralProvider extends ProviderV4 {
52
55
  */
53
56
  speechModel(modelId: MistralSpeechModelId): SpeechModelV4;
54
57
 
58
+ /**
59
+ * Creates a model for audio transcription.
60
+ */
61
+ transcription(modelId: MistralTranscriptionModelId): TranscriptionModelV4;
62
+
63
+ /**
64
+ * Creates a model for audio transcription.
65
+ */
66
+ transcriptionModel(
67
+ modelId: MistralTranscriptionModelId,
68
+ ): TranscriptionModelV4;
69
+
55
70
  /**
56
71
  * @deprecated Use `embedding` instead.
57
72
  */
@@ -137,6 +152,14 @@ export function createMistral(
137
152
  fetch: options.fetch,
138
153
  });
139
154
 
155
+ const createTranscriptionModel = (modelId: MistralTranscriptionModelId) =>
156
+ new MistralTranscriptionModel(modelId, {
157
+ provider: 'mistral.transcription',
158
+ baseURL,
159
+ headers: getHeaders,
160
+ fetch: options.fetch,
161
+ });
162
+
140
163
  const provider = function (modelId: MistralChatModelId) {
141
164
  if (new.target) {
142
165
  throw new Error(
@@ -156,6 +179,8 @@ export function createMistral(
156
179
  provider.textEmbeddingModel = createEmbeddingModel;
157
180
  provider.speech = createSpeechModel;
158
181
  provider.speechModel = createSpeechModel;
182
+ provider.transcription = createTranscriptionModel;
183
+ provider.transcriptionModel = createTranscriptionModel;
159
184
 
160
185
  provider.imageModel = (modelId: string) => {
161
186
  throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
@@ -0,0 +1,63 @@
1
+ import {
2
+ lazySchema,
3
+ zodSchema,
4
+ type InferSchema,
5
+ } from '@ai-sdk/provider-utils';
6
+ import { z } from 'zod/v4';
7
+
8
+ export type MistralTranscriptionModelId = 'voxtral-mini-latest' | (string & {});
9
+
10
+ // https://docs.mistral.ai/api/endpoint/audio/transcriptions
11
+ export const mistralTranscriptionModelOptions = lazySchema(() =>
12
+ zodSchema(
13
+ z.object({
14
+ /**
15
+ * The language of the audio, e.g. "en". Providing the language can boost
16
+ * accuracy.
17
+ */
18
+ language: z.string().min(1).optional(),
19
+
20
+ /**
21
+ * The sampling temperature.
22
+ */
23
+ temperature: z.number().optional(),
24
+
25
+ /**
26
+ * The timestamp granularities to include in the transcription response.
27
+ */
28
+ timestampGranularities: z
29
+ .array(z.enum(['segment', 'word']))
30
+ .min(1)
31
+ .optional(),
32
+
33
+ /**
34
+ * Whether to identify speakers in the transcription.
35
+ */
36
+ diarize: z.boolean().optional(),
37
+
38
+ /**
39
+ * Words or phrases to guide the model toward correct spellings of names,
40
+ * technical terms, or domain-specific vocabulary.
41
+ *
42
+ * Mistral requires each item to omit commas and whitespace. Use
43
+ * underscores to represent multi-word phrases.
44
+ */
45
+ contextBias: z
46
+ .array(
47
+ z
48
+ .string()
49
+ .min(1)
50
+ .regex(
51
+ /^[^\s,]+$/,
52
+ 'Context bias items must not contain commas or whitespace.',
53
+ ),
54
+ )
55
+ .max(100)
56
+ .optional(),
57
+ }),
58
+ ),
59
+ );
60
+
61
+ export type MistralTranscriptionModelOptions = InferSchema<
62
+ typeof mistralTranscriptionModelOptions
63
+ >;
@@ -0,0 +1,256 @@
1
+ import {
2
+ InvalidArgumentError,
3
+ type JSONObject,
4
+ type SharedV4Warning,
5
+ type TranscriptionModelV4,
6
+ } from '@ai-sdk/provider';
7
+ import {
8
+ combineHeaders,
9
+ convertBase64ToUint8Array,
10
+ createJsonResponseHandler,
11
+ mediaTypeToExtension,
12
+ parseProviderOptions,
13
+ postFormDataToApi,
14
+ serializeModelOptions,
15
+ WORKFLOW_DESERIALIZE,
16
+ WORKFLOW_SERIALIZE,
17
+ type FetchFunction,
18
+ } from '@ai-sdk/provider-utils';
19
+ import { z } from 'zod/v4';
20
+ import { mistralFailedResponseHandler } from './mistral-error';
21
+ import {
22
+ mistralTranscriptionModelOptions,
23
+ type MistralTranscriptionModelId,
24
+ } from './mistral-transcription-model-options';
25
+
26
+ type MistralTranscriptionModelConfig = {
27
+ provider: string;
28
+ baseURL: string;
29
+ headers?: () => Record<string, string | undefined>;
30
+ fetch?: FetchFunction;
31
+ _internal?: {
32
+ currentDate?: () => Date;
33
+ };
34
+ };
35
+
36
+ export class MistralTranscriptionModel implements TranscriptionModelV4 {
37
+ readonly specificationVersion = 'v4';
38
+
39
+ static [WORKFLOW_SERIALIZE](model: MistralTranscriptionModel) {
40
+ return serializeModelOptions({
41
+ modelId: model.modelId,
42
+ config: model.config,
43
+ });
44
+ }
45
+
46
+ static [WORKFLOW_DESERIALIZE](options: {
47
+ modelId: MistralTranscriptionModelId;
48
+ config: MistralTranscriptionModelConfig;
49
+ }) {
50
+ return new MistralTranscriptionModel(options.modelId, options.config);
51
+ }
52
+
53
+ get provider(): string {
54
+ return this.config.provider;
55
+ }
56
+
57
+ constructor(
58
+ readonly modelId: MistralTranscriptionModelId,
59
+ private readonly config: MistralTranscriptionModelConfig,
60
+ ) {}
61
+
62
+ private async getArgs({
63
+ audio,
64
+ mediaType,
65
+ providerOptions,
66
+ }: Parameters<TranscriptionModelV4['doGenerate']>[0]) {
67
+ const warnings: SharedV4Warning[] = [];
68
+ const mistralOptions = await parseProviderOptions({
69
+ provider: 'mistral',
70
+ providerOptions,
71
+ schema: mistralTranscriptionModelOptions,
72
+ });
73
+
74
+ // Mistral documents these options as mutually incompatible. Rejecting the
75
+ // combination locally provides a stable SDK error instead of an API 4xx.
76
+ if (
77
+ mistralOptions?.language != null &&
78
+ mistralOptions.timestampGranularities != null
79
+ ) {
80
+ throw new InvalidArgumentError({
81
+ argument: 'providerOptions',
82
+ message:
83
+ 'providerOptions.mistral.language cannot be combined with providerOptions.mistral.timestampGranularities',
84
+ });
85
+ }
86
+
87
+ const formData = new FormData();
88
+ const blob =
89
+ audio instanceof Uint8Array
90
+ ? new Blob([audio])
91
+ : new Blob([convertBase64ToUint8Array(audio)]);
92
+
93
+ formData.append('model', this.modelId);
94
+ formData.append(
95
+ 'file',
96
+ new File([blob], 'audio', { type: mediaType }),
97
+ `audio.${mediaTypeToExtension(mediaType)}`,
98
+ );
99
+
100
+ if (mistralOptions != null) {
101
+ appendFormValue(formData, 'language', mistralOptions.language);
102
+ appendFormValue(formData, 'temperature', mistralOptions.temperature);
103
+ appendFormValue(
104
+ formData,
105
+ 'timestamp_granularities',
106
+ mistralOptions.timestampGranularities,
107
+ );
108
+ appendFormValue(formData, 'diarize', mistralOptions.diarize);
109
+ appendFormValue(formData, 'context_bias', mistralOptions.contextBias);
110
+ }
111
+
112
+ return { formData, warnings };
113
+ }
114
+
115
+ async doGenerate(
116
+ options: Parameters<TranscriptionModelV4['doGenerate']>[0],
117
+ ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {
118
+ const currentDate = this.config._internal?.currentDate?.() ?? new Date();
119
+ const { formData, warnings } = await this.getArgs(options);
120
+
121
+ const {
122
+ value: response,
123
+ responseHeaders,
124
+ rawValue: rawResponse,
125
+ } = await postFormDataToApi({
126
+ url: `${this.config.baseURL}/audio/transcriptions`,
127
+ headers: combineHeaders(this.config.headers?.(), options.headers),
128
+ formData,
129
+ failedResponseHandler: mistralFailedResponseHandler,
130
+ successfulResponseHandler: createJsonResponseHandler(
131
+ mistralTranscriptionResponseSchema,
132
+ ),
133
+ abortSignal: options.abortSignal,
134
+ fetch: this.config.fetch,
135
+ });
136
+
137
+ const segments =
138
+ response.segments?.map(segment => ({
139
+ text: segment.text,
140
+ startSecond: segment.start,
141
+ endSecond: segment.end,
142
+ })) ?? [];
143
+
144
+ const mistralMetadata: JSONObject = {};
145
+
146
+ if (response.usage != null) {
147
+ mistralMetadata.usage = {
148
+ ...(response.usage.prompt_tokens != null && {
149
+ promptTokens: response.usage.prompt_tokens,
150
+ }),
151
+ ...(response.usage.completion_tokens != null && {
152
+ completionTokens: response.usage.completion_tokens,
153
+ }),
154
+ ...(response.usage.total_tokens != null && {
155
+ totalTokens: response.usage.total_tokens,
156
+ }),
157
+ ...(response.usage.prompt_audio_seconds != null && {
158
+ promptAudioSeconds: response.usage.prompt_audio_seconds,
159
+ }),
160
+ ...(response.usage.request_count != null && {
161
+ requestCount: response.usage.request_count,
162
+ }),
163
+ };
164
+ }
165
+
166
+ const providerSegments = response.segments
167
+ ?.filter(
168
+ segment =>
169
+ segment.type != null ||
170
+ segment.score != null ||
171
+ segment.speaker_id != null,
172
+ )
173
+ .map(segment => ({
174
+ text: segment.text,
175
+ startSecond: segment.start,
176
+ endSecond: segment.end,
177
+ ...(segment.type != null && { type: segment.type }),
178
+ ...(segment.score != null && { score: segment.score }),
179
+ ...(segment.speaker_id != null && {
180
+ speakerId: segment.speaker_id,
181
+ }),
182
+ }));
183
+
184
+ if (providerSegments != null && providerSegments.length > 0) {
185
+ mistralMetadata.segments = providerSegments;
186
+ }
187
+
188
+ return {
189
+ text: response.text,
190
+ segments,
191
+ language: response.language ?? undefined,
192
+ durationInSeconds:
193
+ response.usage?.prompt_audio_seconds ??
194
+ segments.at(-1)?.endSecond ??
195
+ undefined,
196
+ warnings,
197
+ response: {
198
+ timestamp: currentDate,
199
+ modelId: response.model,
200
+ headers: responseHeaders,
201
+ body: rawResponse,
202
+ },
203
+ ...(Object.keys(mistralMetadata).length > 0 && {
204
+ providerMetadata: {
205
+ mistral: mistralMetadata,
206
+ },
207
+ }),
208
+ };
209
+ }
210
+ }
211
+
212
+ function appendFormValue(
213
+ formData: FormData,
214
+ key: string,
215
+ value: string | number | boolean | string[] | undefined,
216
+ ): void {
217
+ if (value == null) {
218
+ return;
219
+ }
220
+
221
+ if (Array.isArray(value)) {
222
+ for (const item of value) {
223
+ formData.append(key, item);
224
+ }
225
+ return;
226
+ }
227
+
228
+ formData.append(key, String(value));
229
+ }
230
+
231
+ const mistralTranscriptionResponseSchema = z.object({
232
+ model: z.string(),
233
+ text: z.string(),
234
+ language: z.string().nullish(),
235
+ segments: z
236
+ .array(
237
+ z.object({
238
+ type: z.literal('transcription_segment').nullish(),
239
+ text: z.string(),
240
+ start: z.number(),
241
+ end: z.number(),
242
+ score: z.number().nullish(),
243
+ speaker_id: z.string().nullish(),
244
+ }),
245
+ )
246
+ .nullish(),
247
+ usage: z
248
+ .object({
249
+ prompt_tokens: z.number().nullish(),
250
+ completion_tokens: z.number().nullish(),
251
+ total_tokens: z.number().nullish(),
252
+ prompt_audio_seconds: z.number().nullish(),
253
+ request_count: z.number().nullish(),
254
+ })
255
+ .nullish(),
256
+ });