@ai-sdk/azure 4.0.92 → 4.0.94
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 +25 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/src/azure-speech-transcription-model.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @ai-sdk/azure
|
|
2
2
|
|
|
3
|
+
## 4.0.94
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [d3bcad9]
|
|
8
|
+
- @ai-sdk/provider@4.0.24
|
|
9
|
+
- @ai-sdk/openai@4.0.86
|
|
10
|
+
- @ai-sdk/deepseek@3.0.61
|
|
11
|
+
- @ai-sdk/provider-utils@5.0.56
|
|
12
|
+
|
|
13
|
+
## 4.0.93
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 0af2f7c: chore: upgrade to TypeScript 6
|
|
18
|
+
- Updated dependencies [fc1e19e]
|
|
19
|
+
- Updated dependencies [5094ebd]
|
|
20
|
+
- Updated dependencies [99bdcd2]
|
|
21
|
+
- Updated dependencies [268225c]
|
|
22
|
+
- Updated dependencies [0af2f7c]
|
|
23
|
+
- @ai-sdk/provider-utils@5.0.55
|
|
24
|
+
- @ai-sdk/openai@4.0.85
|
|
25
|
+
- @ai-sdk/provider@4.0.23
|
|
26
|
+
- @ai-sdk/deepseek@3.0.60
|
|
27
|
+
|
|
3
28
|
## 4.0.92
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -785,7 +785,7 @@ const responseSchema = z.object({
|
|
|
785
785
|
});
|
|
786
786
|
//#endregion
|
|
787
787
|
//#region src/version.ts
|
|
788
|
-
const VERSION = "4.0.
|
|
788
|
+
const VERSION = "4.0.94";
|
|
789
789
|
//#endregion
|
|
790
790
|
//#region src/azure-openai-provider.ts
|
|
791
791
|
function getAzureOpenAIBaseURLInfo(baseURL) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/azure-mai-image-model-options.ts","../src/azure-image-model-options.ts","../src/azure-mai-image-model.ts","../src/azure-mai-transcription-model.ts","../src/azure-openai-tools.ts","../src/azure-speech-speech-model-options.ts","../src/azure-speech-model-options.ts","../src/azure-speech-speech-model.ts","../src/azure-mai-transcription-model-options.ts","../src/azure-speech-transcription-model-options.ts","../src/azure-transcription-model-options.ts","../src/azure-speech-transcription-model.ts","../src/version.ts","../src/azure-openai-provider.ts"],"sourcesContent":["import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const azureMaiImageModelOptionsShape = () => ({\n /**\n * Let the model pick the output aspect ratio from the prompt and any\n * reference images. MAI-Image-2.6 models only.\n */\n autoAspectRatio: z.boolean().optional(),\n\n /**\n * Ground generation in Bing web search results. MAI-Image-2.6 models only.\n */\n webGrounding: z.boolean().optional(),\n});\n\nexport const azureMaiImageModelOptions = lazySchema(() =>\n zodSchema(z.object(azureMaiImageModelOptionsShape())),\n);\n\nexport type AzureImageModelMaiOptions = InferSchema<\n typeof azureMaiImageModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { azureMaiImageModelOptionsShape } from './azure-mai-image-model-options';\n\nexport const azureImageModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * API to use. Defaults to MAI for MAI-Image models, OpenAI otherwise.\n */\n api: z.enum(['openai', 'mai']).optional(),\n ...azureMaiImageModelOptionsShape(),\n }),\n ),\n);\n\nexport type AzureImageModelOptions = InferSchema<typeof azureImageModelOptions>;\n\n// Lowercase model IDs served by the MAI image API.\nconst maiImageModels = new Set([\n 'mai-image-2.5',\n 'mai-image-2.5-flash',\n 'mai-image-2.5-pro',\n 'mai-image-2.6',\n 'mai-image-2.6-flash',\n]);\n\nexport function isMAIImageModel(modelId: string) {\n return maiImageModels.has(modelId.toLowerCase());\n}\n","import type {\n ImageModelV4,\n ImageModelV4File,\n ImageModelV4Usage,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n downloadBlob,\n postFormDataToApi,\n postJsonToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AzureImageModelMaiOptions } from './azure-mai-image-model-options';\n\n// MAI rejects either side below 768px; 1024x1024 is its default output.\nconst MIN_SIDE = 768;\nconst DEFAULT_PIXELS = 1024 * 1024;\n\n/**\n * MAI image generations and edits (`/mai/v1/images/*`) on Azure AI Foundry.\n * The API returns one PNG per request and takes `width`/`height`, not `size`.\n */\nexport class AzureMaiImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.image';\n readonly maxImagesPerCall = 1;\n readonly supportsFileInputs = true;\n readonly supportsMaskInputs = false;\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: (path: string) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n _internal?: { currentDate?: () => Date };\n },\n ) {}\n\n async doGenerate(\n {\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n files,\n mask,\n headers,\n abortSignal,\n }: Parameters<ImageModelV4['doGenerate']>[0],\n { autoAspectRatio, webGrounding }: AzureImageModelMaiOptions = {},\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n if (mask != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'mask',\n details: 'MAI image edits do not support masks.',\n });\n }\n\n let dimensions = parseSize(size);\n if (size != null && aspectRatio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details: 'aspectRatio is ignored when size is set.',\n });\n } else if (aspectRatio != null) {\n dimensions = dimensionsForAspectRatio(aspectRatio);\n if (dimensions == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details: `Invalid aspect ratio: ${aspectRatio}.`,\n });\n }\n }\n\n const fields = {\n model: this.modelId,\n prompt,\n width: dimensions?.width,\n height: dimensions?.height,\n auto_aspect_ratio: autoAspectRatio,\n web_grounding: webGrounding,\n };\n const requestOptions = {\n headers: combineHeaders(this.config.headers(), headers),\n failedResponseHandler: maiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n maiImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n };\n const images =\n files != null && files.length > 0\n ? await Promise.all(files.map(file => fileToBlob(file, abortSignal)))\n : undefined;\n\n // The API ignores `n`, so a call reached with n > 1 (e.g. through an\n // `api: 'mai'` override) sends one request per image.\n const responses = await Promise.all(\n Array.from({ length: Math.max(1, n) }, () =>\n images != null\n ? postFormDataToApi({\n ...requestOptions,\n url: this.config.url('/images/edits'),\n formData: toFormData(fields, images),\n })\n : postJsonToApi({\n ...requestOptions,\n url: this.config.url('/images/generations'),\n body: fields,\n }),\n ),\n );\n\n let usage: ImageModelV4Usage | undefined;\n const metadata: Array<Record<string, number | string>> = [];\n for (const { value: response } of responses) {\n const textTokens = response.usage?.num_input_text_tokens ?? undefined;\n const imageTokens = response.usage?.num_input_image_tokens ?? undefined;\n if (response.usage != null) {\n const inputTokens = addTokens(textTokens, imageTokens);\n const outputTokens = response.usage.num_output_tokens ?? undefined;\n usage = {\n inputTokens: addTokens(usage?.inputTokens, inputTokens),\n outputTokens: addTokens(usage?.outputTokens, outputTokens),\n totalTokens: addTokens(\n usage?.totalTokens,\n addTokens(inputTokens, outputTokens),\n ),\n };\n }\n metadata.push(\n ...response.data.map(() => ({\n ...(response.created != null ? { created: response.created } : {}),\n ...(response.size != null ? { size: response.size } : {}),\n ...(textTokens != null ? { textTokens } : {}),\n ...(imageTokens != null ? { imageTokens } : {}),\n })),\n );\n }\n\n return {\n images: responses.flatMap(({ value }) =>\n value.data.map(item => item.b64_json),\n ),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responses[0]?.responseHeaders,\n },\n usage,\n providerMetadata: { azure: { images: metadata } },\n };\n }\n}\n\nfunction addTokens(a: number | undefined, b: number | undefined) {\n return a == null && b == null ? undefined : (a ?? 0) + (b ?? 0);\n}\n\nfunction parseSize(size: `${number}x${number}` | undefined) {\n if (size == null) return undefined;\n const [width, height] = size.split('x').map(Number);\n return { width, height };\n}\n\n// Keeps the default 1024x1024 pixel budget, raising the short side to 768.\nexport function dimensionsForAspectRatio(aspectRatio: string) {\n const [w, h] = aspectRatio.split(':').map(Number);\n if (!(w > 0 && h > 0)) return undefined;\n\n const ratio = w / h;\n let width = Math.sqrt(DEFAULT_PIXELS * ratio);\n let height = width / ratio;\n if (Math.min(width, height) < MIN_SIDE) {\n [width, height] =\n width < height\n ? [MIN_SIDE, MIN_SIDE / ratio]\n : [MIN_SIDE * ratio, MIN_SIDE];\n }\n\n const floor16 = (value: number) => Math.floor(value / 16 + 1e-9) * 16;\n return {\n width: Math.max(MIN_SIDE, floor16(width)),\n height: Math.max(MIN_SIDE, floor16(height)),\n };\n}\n\nfunction toFormData(\n fields: Record<string, string | number | boolean | undefined>,\n images: Blob[],\n) {\n const formData = new FormData();\n for (const [key, value] of Object.entries(fields)) {\n if (value != null) formData.append(key, String(value));\n }\n\n images.forEach((blob, index) => {\n const extension = blob.type === 'image/jpeg' ? 'jpg' : 'png';\n formData.append('image', blob, `image-${index + 1}.${extension}`);\n });\n return formData;\n}\n\nasync function fileToBlob(\n file: ImageModelV4File,\n abortSignal: AbortSignal | undefined,\n): Promise<Blob> {\n if (file.type === 'url') {\n return downloadBlob(file.url, { abortSignal });\n }\n\n const data =\n file.data instanceof Uint8Array\n ? file.data\n : convertBase64ToUint8Array(file.data);\n return new Blob([data as BlobPart], { type: file.mediaType });\n}\n\nconst maiErrorSchema = z.object({\n error: z.object({\n code: z.union([z.string(), z.number()]).nullish(),\n message: z.string(),\n }),\n});\n\nconst maiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: maiErrorSchema,\n errorToMessage: data => data.error.message,\n});\n\n// Only the fields used here, to tolerate API additions.\nconst maiImageResponseSchema = z.object({\n created: z.number().nullish(),\n size: z.string().nullish(),\n usage: z\n .object({\n num_input_text_tokens: z.number().nullish(),\n num_input_image_tokens: z.number().nullish(),\n num_output_tokens: z.number().nullish(),\n })\n .nullish(),\n data: z.array(z.object({ b64_json: z.string() })),\n});\n","import {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type Experimental_TranscriptionModelV4StreamPart as TranscriptionModelV4StreamPart,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n connectToWebSocket,\n convertToBase64,\n safeParseJSON,\n toWebSocketUrl,\n waitForWebSocketBufferDrain,\n type WebSocketConnection,\n type WebSocketConstructor,\n type WebSocketLike,\n} from '@ai-sdk/provider-utils';\nimport type { AzureTranscriptionModelMaiOptions } from './azure-mai-transcription-model-options';\n\ntype StreamOptions = Parameters<\n NonNullable<TranscriptionModelV4['doStream']>\n>[0];\n\nconst SUPPORTED_SAMPLE_RATES = [16000, 24000];\nconst DEFAULT_SAMPLE_RATE = 24000;\n\n/**\n * MAI streaming transcription over the OpenAI Realtime-compatible\n * `/mai/v1/realtime` WebSocket. The model ID is the Foundry deployment name.\n */\nexport class AzureMaiTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.transcription';\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: () => string;\n headers: () =>\n | Record<string, string | undefined>\n | PromiseLike<Record<string, string | undefined>>;\n webSocket?: WebSocketConstructor;\n _internal?: { currentDate?: () => Date };\n },\n ) {}\n\n async doGenerate(): Promise<\n Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>\n > {\n throw new UnsupportedFunctionalityError({\n functionality: `file transcription with ${this.modelId} (use streaming transcription)`,\n });\n }\n\n async doStream(\n options: StreamOptions,\n maiOptions: AzureTranscriptionModelMaiOptions = {},\n warnings: SharedV4Warning[] = [],\n ): Promise<\n Awaited<ReturnType<NonNullable<TranscriptionModelV4['doStream']>>>\n > {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { type, rate = DEFAULT_SAMPLE_RATE } = options.inputAudioFormat;\n if (type !== 'audio/pcm' || !SUPPORTED_SAMPLE_RATES.includes(rate)) {\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message: `MAI streaming transcription requires 16-bit mono PCM (audio/pcm) at 16000 or 24000 Hz, got ${type}${options.inputAudioFormat.rate != null ? ` at ${rate} Hz` : ''}.`,\n });\n }\n\n const sessionUpdate = {\n type: 'session.update',\n session: {\n type: 'transcription',\n audio: {\n input: {\n format: { type: 'audio/pcm', rate },\n transcription: {\n model: this.modelId,\n ...(maiOptions.language != null\n ? { language: maiOptions.language }\n : {}),\n },\n // MAI supports neither server VAD nor noise reduction; the stream\n // commits once when the input audio ends.\n turn_detection: null,\n noise_reduction: null,\n },\n },\n },\n };\n\n const headers = {\n ...(await this.config.headers()),\n ...options.headers,\n };\n // Native WebSocket constructors drop headers, so bearer auth would be lost.\n if (\n this.config.webSocket == null &&\n Object.entries(headers).some(\n ([key, value]) =>\n key.toLowerCase() === 'authorization' && value != null,\n )\n ) {\n throw new InvalidArgumentError({\n argument: 'webSocket',\n message:\n 'MAI streaming transcription with Microsoft Entra ID (tokenProvider) or an Authorization header requires a custom webSocket implementation such as `ws`, because the native WebSocket cannot send headers.',\n });\n }\n\n return {\n request: { body: sessionUpdate },\n response: { timestamp: currentDate, modelId: this.modelId },\n stream: createMaiTranscriptionStream({\n ...getConnection({\n url: toWebSocketUrl(this.config.url()),\n headers,\n supportsHeaders: this.config.webSocket != null,\n }),\n webSocket: this.config.webSocket,\n sessionUpdate,\n bytesPerSecond: rate * 2,\n language: maiOptions.language,\n warnings,\n audio: options.audio,\n abortSignal: options.abortSignal,\n includeRawChunks: options.includeRawChunks,\n }),\n };\n }\n}\n\n// Native WebSocket constructors cannot send headers, so the key moves to the\n// `api-key` query parameter that MAI also accepts.\nfunction getConnection({\n url,\n headers,\n supportsHeaders,\n}: {\n url: URL;\n headers: Record<string, string | undefined>;\n supportsHeaders: boolean;\n}) {\n if (supportsHeaders) {\n return { url, headers };\n }\n const remaining: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === 'api-key') {\n if (value != null) url.searchParams.set('api-key', value);\n } else {\n remaining[key] = value;\n }\n }\n return { url, headers: remaining };\n}\n\ntype MaiRealtimeEvent = {\n type?: string;\n item_id?: string;\n delta?: string;\n intermediate?: string;\n transcript?: string;\n error?: { message?: string; code?: string };\n};\n\nfunction createMaiTranscriptionStream({\n url,\n headers,\n webSocket,\n sessionUpdate,\n bytesPerSecond,\n language,\n warnings,\n audio,\n abortSignal,\n includeRawChunks,\n}: {\n url: URL;\n headers: Record<string, string | undefined>;\n webSocket: WebSocketConstructor | undefined;\n sessionUpdate: unknown;\n bytesPerSecond: number;\n language: string | undefined;\n warnings: SharedV4Warning[];\n audio: ReadableStream<Uint8Array | string>;\n abortSignal: AbortSignal | undefined;\n includeRawChunks: boolean | undefined;\n}) {\n let finished = false;\n let cleanup: (closeCode?: number) => void = () => {};\n\n return new ReadableStream<TranscriptionModelV4StreamPart>({\n start: controller => {\n let audioReader:\n | ReadableStreamDefaultReader<Uint8Array | string>\n | undefined;\n let connection: WebSocketConnection | undefined;\n let audioStarted = false;\n let committed = false;\n let audioBytes = 0;\n let deltas = '';\n\n cleanup = (closeCode?: number) => {\n if (audioReader != null) {\n void audioReader.cancel().catch(() => {});\n } else {\n void audio.cancel().catch(() => {});\n }\n connection?.close(closeCode);\n };\n\n const finishWithError = (error: unknown) => {\n if (finished) return;\n finished = true;\n cleanup();\n controller.error(error);\n };\n\n const finish = (text: string) => {\n if (finished) return;\n finished = true;\n controller.enqueue({\n type: 'finish',\n text,\n segments: [],\n language,\n ...(audioBytes > 0\n ? { durationInSeconds: audioBytes / bytesPerSecond }\n : {}),\n });\n controller.close();\n cleanup(1000);\n };\n\n const sendAudio = async (socket: WebSocketLike) => {\n audioReader = audio.getReader();\n try {\n while (true) {\n const { done, value } = await audioReader.read();\n if (done || finished) break;\n const base64 = convertToBase64(value);\n if (base64.length === 0) continue;\n audioBytes +=\n typeof value === 'string'\n ? base64ByteLength(base64)\n : value.byteLength;\n socket.send(\n JSON.stringify({\n type: 'input_audio_buffer.append',\n audio: base64,\n }),\n );\n await waitForWebSocketBufferDrain(socket);\n }\n } finally {\n audioReader.releaseLock();\n audioReader = undefined;\n }\n if (finished) return;\n if (audioBytes === 0) {\n finish('');\n return;\n }\n committed = true;\n socket.send(JSON.stringify({ type: 'input_audio_buffer.commit' }));\n };\n\n connection = connectToWebSocket({\n url,\n headers,\n webSocket,\n abortSignal,\n onAbort: finishWithError,\n onProcessingError: finishWithError,\n onOpen: () => {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n onMessageText: async text => {\n const parsed = await safeParseJSON({ text });\n if (!parsed.success) return;\n const event = parsed.value as MaiRealtimeEvent;\n const socket = connection?.socket;\n\n if (includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: event });\n }\n\n switch (event.type) {\n case 'session.created': {\n socket?.send(JSON.stringify(sessionUpdate));\n break;\n }\n\n // Settings are locked after the first append, so audio waits for\n // the server to acknowledge the session configuration.\n case 'session.updated': {\n if (audioStarted || socket == null) break;\n audioStarted = true;\n void sendAudio(socket).catch(finishWithError);\n break;\n }\n\n case 'conversation.item.input_audio_transcription.delta': {\n deltas += event.delta ?? '';\n controller.enqueue({\n type: 'transcript-delta',\n id: event.item_id,\n delta: event.delta ?? '',\n });\n break;\n }\n\n // MAI-specific: the provisional text after the latest delta.\n case 'conversation.item.input_audio_transcription.intermediate': {\n controller.enqueue({\n type: 'transcript-partial',\n id: event.item_id,\n text: event.intermediate ?? '',\n });\n break;\n }\n\n case 'conversation.item.input_audio_transcription.completed': {\n const transcript = event.transcript ?? deltas;\n controller.enqueue({\n type: 'transcript-final',\n id: event.item_id,\n text: transcript,\n });\n if (committed) finish(transcript);\n break;\n }\n\n case 'conversation.item.input_audio_transcription.failed':\n case 'error': {\n finishWithError(\n new Error(\n `Azure MAI transcription error${event.error?.code != null ? ` (${event.error.code})` : ''}: ${event.error?.message ?? 'unknown error'}`,\n ),\n );\n break;\n }\n }\n },\n onSocketError: () => {\n finishWithError(new Error('Azure MAI transcription WebSocket error'));\n },\n onClose: ({ code, reason }) => {\n finishWithError(\n new Error(\n `Azure MAI transcription connection closed before the transcript completed${code != null ? ` (code ${code}${reason ? `: ${reason}` : ''})` : ''}`,\n ),\n );\n },\n });\n },\n\n cancel: () => {\n if (finished) return;\n finished = true;\n cleanup();\n },\n });\n}\n\nfunction base64ByteLength(base64: string) {\n const padding = base64.endsWith('==') ? 2 : base64.endsWith('=') ? 1 : 0;\n return (base64.length * 3) / 4 - padding;\n}\n","import {\n codeInterpreter,\n fileSearch,\n imageGeneration,\n webSearch,\n webSearchPreview,\n} from '@ai-sdk/openai/internal';\n\nexport const azureOpenaiTools: {\n codeInterpreter: typeof codeInterpreter;\n fileSearch: typeof fileSearch;\n imageGeneration: typeof imageGeneration;\n webSearch: typeof webSearch;\n webSearchPreview: typeof webSearchPreview;\n} = {\n codeInterpreter,\n fileSearch,\n imageGeneration,\n webSearch,\n webSearchPreview,\n};\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const azureSpeechSpeechModelOptionsShape = () => ({\n /**\n * Speaking style applied with `mstts:express-as`, e.g. `excited` or\n * `whispering`. Supported styles vary by voice.\n */\n style: z.string().min(1).optional(),\n\n /**\n * Intensity of `style`, from 0.01 to 2. Azure defaults to 1.\n */\n styleDegree: z.number().min(0.01).max(2).optional(),\n});\n\nexport const azureSpeechSpeechModelOptions = lazySchema(() =>\n zodSchema(z.strictObject(azureSpeechSpeechModelOptionsShape())),\n);\n\nexport type AzureSpeechModelSpeechOptions = InferSchema<\n typeof azureSpeechSpeechModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { azureSpeechSpeechModelOptionsShape } from './azure-speech-speech-model-options';\n\nexport const azureSpeechModelOptions = lazySchema(() =>\n zodSchema(\n z.strictObject({\n /**\n * API to use. Defaults to Speech for MAI-Voice models, OpenAI otherwise.\n */\n api: z.enum(['openai', 'speech']).optional(),\n ...azureSpeechSpeechModelOptionsShape(),\n }),\n ),\n);\n\nexport type AzureSpeechModelOptions = InferSchema<\n typeof azureSpeechModelOptions\n>;\n\n// Azure voice-name suffixes by lowercase model ID.\nconst maiVoiceModels = new Map([\n ['mai-voice-2.1-flash', 'MAI-Voice-2.1-Flash'],\n ['mai-voice-2.1', 'MAI-Voice-2.1'],\n ['mai-voice-2-flash', 'MAI-Voice-2-Flash'],\n ['mai-voice-2', 'MAI-Voice-2'],\n]);\n\nexport function getMAIVoiceModel(modelId: string) {\n return maiVoiceModels.get(modelId.toLowerCase());\n}\n","import {\n APICallError,\n type SharedV4Warning,\n type SpeechModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n extractResponseHeaders,\n postToApi,\n safeParseJSON,\n type FetchFunction,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { getMAIVoiceModel } from './azure-speech-model-options';\nimport type { AzureSpeechModelSpeechOptions } from './azure-speech-speech-model-options';\n\nconst DEFAULT_VOICE = 'en-US-Harper';\n\n// Default voice per ISO 639-1 language; available on MAI-Voice-2,\n// MAI-Voice-2.1, and their Flash variants.\nconst DEFAULT_VOICES = new Map([\n ['de', 'de-DE-Mia'],\n ['en', DEFAULT_VOICE],\n ['es', 'es-MX-Valeria'],\n ['fr', 'fr-FR-Soleil'],\n ['hi', 'hi-IN-Kavya'],\n ['hu', 'hu-HU-Lilla'],\n ['it', 'it-IT-Rosa'],\n ['ko', 'ko-KR-Haena'],\n ['nl', 'nl-NL-Fleur'],\n ['pt', 'pt-BR-Luana'],\n ['ro', 'ro-RO-Elena'],\n ['ru', 'ru-RU-Masha'],\n ['th', 'th-TH-Krit'],\n ['tr', 'tr-TR-Elif'],\n ['zh', 'zh-CN-Mei'],\n]);\nconst DEFAULT_OUTPUT_FORMAT = 'audio-24khz-160kbitrate-mono-mp3';\n\n// Shorthand formats for `outputFormat`; other X-Microsoft-OutputFormat values\n// (e.g. `audio-48khz-192kbitrate-mono-mp3`) are passed through unchanged.\nconst OUTPUT_FORMATS = new Map([\n ['mp3', DEFAULT_OUTPUT_FORMAT],\n ['opus', 'ogg-24khz-16bit-mono-opus'],\n ['pcm', 'raw-24khz-16bit-mono-pcm'],\n ['wav', 'riff-24khz-16bit-mono-pcm'],\n]);\nconst NATIVE_OUTPUT_FORMAT =\n /^(?:amr|audio|g722|ogg|raw|riff|webm)-[a-z0-9-]+$/;\n\n/**\n * Azure Speech text to speech with SSML. The model is appended to the voice\n * name, e.g. `en-US-Harper:MAI-Voice-2`.\n */\nexport class AzureSpeechSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.speech';\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: () => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n _internal?: { currentDate?: () => Date };\n },\n ) {}\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n azureOptions: AzureSpeechModelSpeechOptions = {},\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n const { style, styleDegree } = azureOptions;\n\n if (options.instructions != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details: 'Use providerOptions.azure.style to control speaking style.',\n });\n }\n const { voice, languageWarning } = resolveVoice(\n options.voice,\n options.language,\n );\n if (languageWarning != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details: languageWarning,\n });\n }\n if (styleDegree != null && style == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.azure.styleDegree',\n details: 'styleDegree requires style.',\n });\n }\n\n let outputFormat = DEFAULT_OUTPUT_FORMAT;\n if (options.outputFormat != null) {\n const format = options.outputFormat.toLowerCase();\n const shorthand = OUTPUT_FORMATS.get(format);\n if (shorthand != null) {\n outputFormat = shorthand;\n } else if (NATIVE_OUTPUT_FORMAT.test(format)) {\n outputFormat = format;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${options.outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n const ssml = buildSsml({\n text: options.text,\n voiceName: voice.includes(':')\n ? voice\n : `${voice}:${getMAIVoiceModel(this.modelId) ?? this.modelId}`,\n locale: /^([a-z]{2,3}-[a-z]{2,4})-/i.exec(voice)?.[1],\n speed: options.speed,\n style,\n styleDegree: style != null ? styleDegree : undefined,\n });\n\n const {\n value: audio,\n responseHeaders,\n rawValue,\n } = await postToApi({\n url: this.config.url(),\n headers: combineHeaders(\n this.config.headers(),\n {\n 'Content-Type': 'application/ssml+xml',\n 'X-Microsoft-OutputFormat': outputFormat,\n },\n options.headers,\n ),\n body: { content: ssml, values: ssml },\n failedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: { body: ssml },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nfunction buildSsml({\n text,\n voiceName,\n locale = 'en-US',\n speed,\n style,\n styleDegree,\n}: {\n text: string;\n voiceName: string;\n locale?: string;\n speed?: number;\n style?: string;\n styleDegree?: number;\n}) {\n let content = escapeXml(text);\n if (speed != null) {\n content = `<prosody rate=\"${speed}\">${content}</prosody>`;\n }\n if (style != null) {\n const degree = styleDegree != null ? ` styledegree=\"${styleDegree}\"` : '';\n content = `<mstts:express-as style=\"${escapeXml(style)}\"${degree}>${content}</mstts:express-as>`;\n }\n return (\n `<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" ` +\n `xmlns:mstts=\"http://www.w3.org/2001/mstts\" xml:lang=\"${escapeXml(locale)}\">` +\n `<voice name=\"${escapeXml(voiceName)}\">${content}</voice></speak>`\n );\n}\n\nconst XML_ESCAPES: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\n\nfunction escapeXml(value: string) {\n return value.replace(/[&<>\"']/g, char => XML_ESCAPES[char]);\n}\n\n// Uses the language's default voice when no voice is set. An explicit voice\n// wins, and its locale selects the language.\nfunction resolveVoice(\n voice: string | undefined,\n language: string | undefined,\n): { voice: string; languageWarning?: string } {\n const code = language ? language.split('-')[0].toLowerCase() : undefined;\n if (voice == null) {\n if (code == null) return { voice: DEFAULT_VOICE };\n if (code === 'auto') {\n return {\n voice: DEFAULT_VOICE,\n languageWarning: `Automatic language detection is not supported. ${DEFAULT_VOICE} was used.`,\n };\n }\n const defaultVoice = DEFAULT_VOICES.get(code);\n return defaultVoice != null\n ? { voice: defaultVoice }\n : {\n voice: DEFAULT_VOICE,\n languageWarning: `No default MAI voice for language \"${language}\". ${DEFAULT_VOICE} was used.`,\n };\n }\n const voiceLanguage = /^([a-z]{2,3})-[a-z]{2,4}-/i\n .exec(voice)?.[1]\n ?.toLowerCase();\n return code != null &&\n code !== 'auto' &&\n voiceLanguage != null &&\n code !== voiceLanguage\n ? {\n voice,\n languageWarning: `The voice ${voice} selects the language. Language \"${language}\" was ignored.`,\n }\n : { voice };\n}\n\nconst errorSchema = z.object({\n error: z.object({ message: z.string() }),\n});\n\n// Azure Speech answers invalid requests (style or output format) with an empty\n// 400 body. Unknown voices or styles reset the connection with an Envoy 502\n// whose reason is `protocol error`; that is a client input error, so it is\n// reported as a non-retryable 400. Other 502s stay retryable.\nconst failedResponseHandler: ResponseHandler<APICallError> = async ({\n response,\n url,\n requestBodyValues,\n}) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n const parsed = await safeParseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n const isVoiceReset =\n response.status === 502 &&\n responseBody.includes('reset reason: protocol error');\n\n const message = parsed.success\n ? parsed.value.error.message\n : isVoiceReset\n ? 'Azure Speech could not synthesize the request. Check that the voice is available for this model and that the style is supported by the voice.'\n : response.status === 400\n ? 'Azure Speech request failed with status 400. Check the voice name, style, and output format.'\n : `Azure Speech request failed with status ${response.status}.`;\n\n return {\n responseHeaders,\n value: new APICallError({\n message,\n url,\n requestBodyValues,\n statusCode: isVoiceReset ? 400 : response.status,\n responseHeaders,\n responseBody,\n isRetryable: isVoiceReset ? false : undefined,\n }),\n };\n};\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const azureMaiTranscriptionModelOptionsShape = () => ({\n /**\n * Language hint for streaming transcription, e.g. `en`. Omit for automatic\n * language detection.\n */\n language: z.string().min(1).optional(),\n});\n\nexport const azureMaiTranscriptionModelOptions = lazySchema(() =>\n zodSchema(z.strictObject(azureMaiTranscriptionModelOptionsShape())),\n);\n\nexport type AzureTranscriptionModelMaiOptions = InferSchema<\n typeof azureMaiTranscriptionModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// Strict objects reject unknown keys (e.g. `diarization.maxSpeakers`, which\n// MAI-Transcribe-2 does not support) instead of silently dropping them.\nexport const azureSpeechTranscriptionModelOptionsShape = () => ({\n /**\n * Timing granularity. Defaults to `segment` so that transcription results\n * include timed segments (Azure's own default is `none`).\n */\n timestamps: z.enum(['word', 'segment', 'none']).optional(),\n\n /**\n * `verbatim` keeps fillers and false starts, `clean` removes them.\n * Azure defaults to `verbatim`.\n */\n transcribeStyle: z.enum(['verbatim', 'clean']).optional(),\n\n /**\n * Forces a single language, e.g. `['en']`. Omit for automatic language\n * detection and code switching.\n */\n locales: z.array(z.string()).length(1).optional(),\n\n /**\n * Speaker diarization. Speaker IDs are available in provider metadata.\n */\n diarization: z.strictObject({ enabled: z.boolean() }).optional(),\n\n /**\n * Keyword biasing for names and domain terminology.\n */\n phraseList: z.strictObject({ phrases: z.array(z.string()) }).optional(),\n});\n\nexport const azureSpeechTranscriptionModelOptions = lazySchema(() =>\n zodSchema(z.strictObject(azureSpeechTranscriptionModelOptionsShape())),\n);\n\nexport type AzureTranscriptionModelSpeechOptions = InferSchema<\n typeof azureSpeechTranscriptionModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { azureMaiTranscriptionModelOptionsShape } from './azure-mai-transcription-model-options';\nimport { azureSpeechTranscriptionModelOptionsShape } from './azure-speech-transcription-model-options';\n\nexport const azureTranscriptionModelOptions = lazySchema(() =>\n zodSchema(\n z.strictObject({\n /**\n * API to use. Defaults to Speech for MAI-Transcribe models, MAI for\n * MAI-Transcribe-2-Streaming, and OpenAI otherwise.\n */\n api: z.enum(['openai', 'speech', 'mai']).optional(),\n ...azureSpeechTranscriptionModelOptionsShape(),\n ...azureMaiTranscriptionModelOptionsShape(),\n }),\n ),\n);\n\nexport type AzureTranscriptionModelOptions = InferSchema<\n typeof azureTranscriptionModelOptions\n>;\n\n// Azure Speech model names by lowercase model ID. MAI-Transcribe-1.5 only\n// accepts Azure's default timestamps (`none`).\nconst maiTranscribeModels = new Map([\n ['mai-transcribe-2', { name: 'MAI-Transcribe-2', supportsTimestamps: true }],\n [\n 'mai-transcribe-1.5',\n { name: 'MAI-Transcribe-1.5', supportsTimestamps: false },\n ],\n]);\n\nexport function getMAITranscribeModel(modelId: string) {\n return maiTranscribeModels.get(modelId.toLowerCase());\n}\n\nexport function isMAITranscribeStreaming(modelId: string): boolean {\n return modelId.toLowerCase() === 'mai-transcribe-2-streaming';\n}\n","import type { TranscriptionModelV4 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n mediaTypeToExtension,\n postFormDataToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AzureTranscriptionProviderMetadata } from './azure-transcription-provider-metadata';\nimport type { AzureTranscriptionModelSpeechOptions } from './azure-speech-transcription-model-options';\nimport { getMAITranscribeModel } from './azure-transcription-model-options';\n\nexport class AzureSpeechTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.transcription';\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: () => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n },\n ) {}\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n azureOptions: AzureTranscriptionModelSpeechOptions = {},\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const timestamp = new Date();\n const maiModel = getMAITranscribeModel(this.modelId);\n const formData = new FormData();\n formData.append(\n 'audio',\n new Blob(\n [\n typeof options.audio === 'string'\n ? convertBase64ToUint8Array(options.audio)\n : options.audio,\n ],\n { type: options.mediaType },\n ),\n `audio.${mediaTypeToExtension(options.mediaType)}`,\n );\n formData.append(\n 'definition',\n JSON.stringify({\n enhancedMode: {\n enabled: true,\n model: maiModel?.name ?? this.modelId,\n modelOptions: {\n timestamps:\n azureOptions.timestamps ??\n (maiModel?.supportsTimestamps === false ? undefined : 'segment'),\n transcribeStyle: azureOptions.transcribeStyle,\n },\n },\n locales: azureOptions.locales,\n diarization: azureOptions.diarization,\n phraseList: azureOptions.phraseList,\n }),\n );\n\n const { value, rawValue, responseHeaders } = await postFormDataToApi({\n url: this.config.url(),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.union([\n z.object({ error: z.object({ message: z.string() }) }),\n z.object({ message: z.string() }),\n ]),\n errorToMessage: data =>\n 'error' in data ? data.error.message : data.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(responseSchema),\n });\n\n const phrases = value.phrases ?? [];\n // Consider every reported locale so mixed results (e.g. en + fil) are not\n // collapsed to one language; only ISO-639-1 codes are reported.\n const languages = new Set(\n phrases.flatMap(phrase =>\n phrase.locale ? [phrase.locale.split('-')[0].toLowerCase()] : [],\n ),\n );\n const [language] = languages;\n const reportedLanguage =\n languages.size === 1 && /^[a-z]{2}$/.test(language)\n ? language\n : undefined;\n\n return {\n text: value.combinedPhrases.map(phrase => phrase.text).join(' '),\n segments: phrases.flatMap(phrase =>\n phrase.offsetMilliseconds != null && phrase.durationMilliseconds != null\n ? [\n {\n text: phrase.text,\n startSecond: phrase.offsetMilliseconds / 1000,\n endSecond:\n (phrase.offsetMilliseconds + phrase.durationMilliseconds) /\n 1000,\n },\n ]\n : [],\n ),\n language: reportedLanguage,\n durationInSeconds:\n value.durationMilliseconds != null\n ? value.durationMilliseconds / 1000\n : undefined,\n warnings: [],\n providerMetadata: {\n azure: { phrases },\n } satisfies AzureTranscriptionProviderMetadata,\n response: {\n timestamp,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst responseSchema = z.object({\n combinedPhrases: z.array(z.object({ text: z.string() })),\n durationMilliseconds: z.number().nullish(),\n phrases: z\n .array(\n z.object({\n text: z.string(),\n offsetMilliseconds: z.number().nullish(),\n durationMilliseconds: z.number().nullish(),\n locale: z.string().nullish(),\n speaker: z.number().nullish(),\n confidence: z.number().nullish(),\n words: z\n .array(\n z.object({\n text: z.string(),\n offsetMilliseconds: z.number().nullish(),\n durationMilliseconds: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n OpenAIChatLanguageModel,\n OpenAICompletionLanguageModel,\n OpenAIEmbeddingModel,\n OpenAIImageModel,\n OpenAIResponsesLanguageModel,\n OpenAISpeechModel,\n OpenAITranscriptionModel,\n} from '@ai-sdk/openai/internal';\nimport { DeepSeekChatLanguageModel } from '@ai-sdk/deepseek/internal';\nimport {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type ProviderV4,\n type ImageModelV4,\n type SharedV4Warning,\n type SpeechModelV4,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n isValidHostnamePart,\n loadApiKey,\n loadSetting,\n normalizeHeaders,\n parseProviderOptions,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n type WebSocketConstructor,\n} from '@ai-sdk/provider-utils';\nimport {\n azureImageModelOptions,\n isMAIImageModel,\n} from './azure-image-model-options';\nimport { AzureMaiImageModel } from './azure-mai-image-model';\nimport { AzureMaiTranscriptionModel } from './azure-mai-transcription-model';\nimport { azureOpenaiTools } from './azure-openai-tools';\nimport {\n azureSpeechModelOptions,\n getMAIVoiceModel,\n} from './azure-speech-model-options';\nimport { AzureSpeechSpeechModel } from './azure-speech-speech-model';\nimport { AzureSpeechTranscriptionModel } from './azure-speech-transcription-model';\nimport {\n azureTranscriptionModelOptions,\n getMAITranscribeModel,\n isMAITranscribeStreaming,\n} from './azure-transcription-model-options';\nimport { VERSION } from './version';\n\nexport interface AzureOpenAIProvider extends ProviderV4 {\n (deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI responses API model for text generation.\n */\n languageModel(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI chat model for text generation.\n */\n chat(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure-hosted DeepSeek chat model for text generation.\n */\n deepseek(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI responses API model for text generation.\n */\n responses(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI completion model for text generation.\n */\n completion(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI model for text embeddings.\n */\n embedding(deploymentId: string): EmbeddingModelV4;\n\n /**\n * Creates an Azure OpenAI model for text embeddings.\n */\n embeddingModel(deploymentId: string): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(deploymentId: string): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(deploymentId: string): EmbeddingModelV4;\n\n /**\n * Creates an Azure image model. MAI-Image models use the MAI image API by\n * default; other IDs use OpenAI. Override with providerOptions.azure.api.\n */\n image(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure image model. Alias of `image`.\n */\n imageModel(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure transcription model. MAI-Transcribe models use the Speech\n * API and MAI-Transcribe-2-Streaming the MAI realtime API by default; other\n * IDs use OpenAI. Override with providerOptions.azure.api.\n */\n transcription(deploymentId: string): TranscriptionModelV4;\n\n /**\n * Creates an Azure transcription model. Alias of `transcription`.\n */\n transcriptionModel(deploymentId: string): TranscriptionModelV4;\n\n /**\n * Creates an Azure speech generation model. MAI-Voice models use the Speech\n * API by default; other IDs use OpenAI. Override with providerOptions.azure.api.\n */\n speech(deploymentId: string): SpeechModelV4;\n\n /**\n * Creates an Azure speech generation model. Alias of `speech`.\n */\n speechModel(deploymentId: string): SpeechModelV4;\n\n /**\n * AzureOpenAI-specific tools.\n */\n tools: typeof azureOpenaiTools;\n}\n\nexport interface AzureOpenAIProviderSettings {\n /**\n * Name of the Azure OpenAI resource. Either this or `baseURL` can be used.\n *\n * The resource name is used in the assembled URL: `https://{resourceName}.openai.azure.com/openai/v1{path}`.\n * It must be a single DNS label (letters, digits, and hyphens).\n */\n resourceName?: string;\n\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers. Either this or `resourceName` can be used.\n * When a baseURL is provided, the resourceName is ignored.\n *\n * With an unversioned Azure OpenAI baseURL, the resolved URL is `{baseURL}/v1{path}`.\n * Azure OpenAI base URLs that already end in `/openai/v1` are used as-is.\n * With a non-Azure custom gateway baseURL, the resolved URL is `{baseURL}{path}`.\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * A function that returns an access token for Microsoft Entra\n * (formerly known as Azure Active Directory), which will be invoked\n * on every request.\n */\n tokenProvider?: (() => Promise<string>) | undefined;\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 /**\n * Custom api version to use. Defaults to `v1`.\n * Complete v1 base URLs are used as-is.\n */\n apiVersion?: string;\n\n /**\n * Use deployment-based URLs for specific model types. Set to true to use legacy deployment format:\n * `{baseURL}/deployments/{deploymentId}{path}?api-version={apiVersion}` instead of\n * `{baseURL}/v1{path}?api-version={apiVersion}`.\n */\n useDeploymentBasedUrls?: boolean;\n\n /**\n * URL prefix for Azure Speech (MAI-Transcribe transcription and MAI-Voice\n * speech), e.g. a regional endpoint like\n * `https://eastus.api.cognitive.microsoft.com`.\n * Defaults to `https://{resourceName}.cognitiveservices.azure.com`.\n * Speech requests do not use `baseURL` or `apiVersion`.\n */\n speechBaseURL?: string;\n\n /**\n * URL prefix for MAI APIs (MAI-Image, MAI-Transcribe-2-Streaming). Defaults\n * to `https://{resourceName}.services.ai.azure.com/mai/v1`.\n */\n maiBaseURL?: string;\n\n /**\n * Custom WebSocket implementation for MAI streaming transcription, e.g.\n * `ws` in Node.js. With a custom implementation the API key is sent as a\n * header; otherwise it is sent as the `api-key` query parameter. Entra ID\n * tokens require a custom implementation; streaming rejects them otherwise.\n */\n webSocket?: WebSocketConstructor;\n}\n\nfunction getAzureOpenAIBaseURLInfo(baseURL: string | undefined) {\n if (baseURL == null) {\n return {\n isAzureOpenAI: true,\n isFoundryProject: false,\n isVersioned: false,\n };\n }\n\n const url = new URL(baseURL);\n const hostname = url.hostname;\n const isAzureOpenAI =\n hostname.endsWith('.openai.azure.com') ||\n hostname.endsWith('.services.ai.azure.com') ||\n hostname.endsWith('.cognitiveservices.azure.com');\n const pathname = url.pathname.replace(/\\/+$/, '');\n\n return {\n isAzureOpenAI,\n isFoundryProject:\n hostname.endsWith('.services.ai.azure.com') &&\n pathname.startsWith('/api/projects/'),\n isVersioned: isAzureOpenAI && pathname.toLowerCase().endsWith('/openai/v1'),\n };\n}\n\n/**\n * Create an Azure OpenAI provider instance.\n */\nexport function createAzure(\n options: AzureOpenAIProviderSettings = {},\n): AzureOpenAIProvider {\n const tokenProvider = options.tokenProvider;\n\n if (options.apiKey && tokenProvider) {\n throw new InvalidArgumentError({\n argument: 'apiKey/tokenProvider',\n message:\n 'Both apiKey and tokenProvider were provided. Please use only one authentication method.',\n });\n }\n\n const getHeaders = (api: 'openai' | 'speech' | 'mai' = 'openai') => {\n const authHeaders = tokenProvider\n ? {}\n : {\n [api === 'speech' ? 'Ocp-Apim-Subscription-Key' : 'api-key']:\n loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AZURE_API_KEY',\n description:\n api === 'speech'\n ? 'Azure Speech'\n : api === 'mai'\n ? 'Azure MAI'\n : 'Azure OpenAI',\n }),\n };\n\n return withUserAgentSuffix(\n {\n ...authHeaders,\n ...options.headers,\n },\n `ai-sdk-azure/${VERSION}`,\n );\n };\n\n const fetch: FetchFunction | undefined = tokenProvider\n ? async (input, init) => {\n const headers = normalizeHeaders(init?.headers);\n\n if (headers.authorization == null) {\n headers.authorization = `Bearer ${await tokenProvider()}`;\n }\n\n return (options.fetch ?? globalThis.fetch)(input, {\n ...init,\n headers,\n });\n }\n : options.fetch;\n\n const getResourceName = () => {\n const resourceName = loadSetting({\n settingValue: options.resourceName,\n settingName: 'resourceName',\n environmentVariableName: 'AZURE_RESOURCE_NAME',\n description: 'Azure OpenAI resource name',\n });\n\n // The resource name becomes part of the request host, so only a DNS label\n // is accepted (e.g. `user@internal:8080/#` would rewrite the host).\n if (!isValidHostnamePart(resourceName)) {\n throw new InvalidArgumentError({\n argument: 'resourceName',\n message:\n 'Invalid Azure resource name. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',\n });\n }\n\n return resourceName;\n };\n\n const apiVersion = options.apiVersion ?? 'v1';\n const {\n isAzureOpenAI,\n isFoundryProject,\n isVersioned: isAzureOpenAIVersioned,\n } = getAzureOpenAIBaseURLInfo(options.baseURL);\n\n const url = ({ path, modelId }: { path: string; modelId: string }) => {\n const baseUrlPrefix = withoutTrailingSlash(\n options.baseURL ?? `https://${getResourceName()}.openai.azure.com/openai`,\n );\n\n let fullUrl: URL;\n if (options.useDeploymentBasedUrls) {\n // Use deployment-based format for compatibility with certain Azure OpenAI models\n fullUrl = new URL(`${baseUrlPrefix}/deployments/${modelId}${path}`);\n } else if (!isAzureOpenAI || isAzureOpenAIVersioned) {\n // Custom gateways can own Azure routing and versioning themselves.\n // Complete Azure OpenAI v1 URLs also own their versioning.\n fullUrl = new URL(`${baseUrlPrefix}${path}`);\n } else {\n // Use v1 API format - no deployment ID in URL\n fullUrl = new URL(`${baseUrlPrefix}/v1${path}`);\n }\n\n if (\n options.useDeploymentBasedUrls ||\n (isAzureOpenAI && !isAzureOpenAIVersioned && !isFoundryProject)\n ) {\n fullUrl.searchParams.set('api-version', apiVersion);\n }\n\n return fullUrl.toString();\n };\n\n const createChatModel = (deploymentName: string) =>\n new OpenAIChatLanguageModel(deploymentName, {\n provider: 'azure.chat',\n url,\n headers: getHeaders,\n fetch,\n });\n\n const createDeepSeekModel = (deploymentName: string) =>\n new DeepSeekChatLanguageModel(deploymentName, {\n provider: 'azure.deepseek',\n url,\n headers: getHeaders,\n fetch,\n supportsPenaltySampling: true,\n supportsThinking: false,\n // json_object with thinking enabled makes Azure return the JSON in reasoning_content with empty content\n supportsStructuredOutputs: true,\n });\n\n const createCompletionModel = (modelId: string) =>\n new OpenAICompletionLanguageModel(modelId, {\n provider: 'azure.completion',\n url,\n headers: getHeaders,\n fetch,\n });\n\n const createEmbeddingModel = (modelId: string) =>\n new OpenAIEmbeddingModel(modelId, {\n provider: 'azure.embeddings',\n headers: getHeaders,\n url,\n fetch,\n });\n\n const createResponsesModel = (modelId: string) =>\n new OpenAIResponsesLanguageModel(modelId, {\n provider: 'azure.responses',\n url,\n headers: getHeaders,\n fetch,\n explicitMessageItemType: isFoundryProject,\n // Soft-deprecated. TODO: remove in v8\n fileIdPrefixes: ['assistant-'],\n });\n\n const maiBaseURL = () =>\n withoutTrailingSlash(options.maiBaseURL) ??\n `https://${getResourceName()}.services.ai.azure.com/mai/v1`;\n\n const createImageModel = (modelId: string) =>\n new AzureImageModel(\n modelId,\n options,\n new OpenAIImageModel(modelId, {\n provider: 'azure.image',\n url,\n headers: getHeaders,\n fetch,\n // Azure model IDs are user-defined deployment names, so OpenAI model\n // family capabilities cannot be inferred from them.\n imageInputCapabilities: {\n supportsFileInputs: undefined,\n supportsMaskInputs: undefined,\n },\n }),\n new AzureMaiImageModel(modelId, {\n url: path => `${maiBaseURL()}${path}`,\n headers: () => getHeaders('mai'),\n fetch,\n }),\n );\n\n const speechBaseURL = () =>\n withoutTrailingSlash(options.speechBaseURL) ??\n `https://${getResourceName()}.cognitiveservices.azure.com`;\n\n const createTranscriptionModel = (modelId: string) =>\n new AzureTranscriptionModel(\n modelId,\n options,\n new OpenAITranscriptionModel(modelId, {\n provider: 'azure.transcription',\n url,\n headers: getHeaders,\n fetch,\n }),\n new AzureSpeechTranscriptionModel(modelId, {\n url: () =>\n `${speechBaseURL()}/speechtotext/transcriptions:transcribe?api-version=2025-10-15`,\n headers: () => getHeaders('speech'),\n fetch,\n }),\n new AzureMaiTranscriptionModel(modelId, {\n url: () => `${maiBaseURL()}/realtime?intent=transcription`,\n headers: async () =>\n tokenProvider\n ? {\n authorization: `Bearer ${await tokenProvider()}`,\n ...getHeaders('mai'),\n }\n : getHeaders('mai'),\n webSocket: options.webSocket,\n }),\n );\n\n const createSpeechModel = (modelId: string) =>\n new AzureSpeechModel(\n modelId,\n options,\n new OpenAISpeechModel(modelId, {\n provider: 'azure.speech',\n url,\n headers: getHeaders,\n fetch,\n }),\n new AzureSpeechSpeechModel(modelId, {\n url: () => `${speechBaseURL()}/tts/cognitiveservices/v1`,\n headers: () => getHeaders('speech'),\n fetch,\n }),\n );\n\n const provider = function (deploymentId: string) {\n if (new.target) {\n throw new Error(\n 'The Azure OpenAI model function cannot be called with the new keyword.',\n );\n }\n\n return createResponsesModel(deploymentId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createResponsesModel;\n provider.chat = createChatModel;\n provider.deepseek = createDeepSeekModel;\n provider.completion = createCompletionModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.responses = createResponsesModel;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n provider.tools = azureOpenaiTools;\n return provider;\n}\n\n/**\n * Default Azure OpenAI provider instance.\n */\nexport const azure = createAzure();\n\n// Resolves the API per request: providerOptions also reach this model via Gateway.\nclass AzureTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.transcription';\n\n constructor(\n readonly modelId: string,\n private readonly config: AzureOpenAIProviderSettings,\n private readonly openai: OpenAITranscriptionModel,\n private readonly speech: AzureSpeechTranscriptionModel,\n private readonly mai: AzureMaiTranscriptionModel,\n ) {}\n\n static [WORKFLOW_SERIALIZE](model: AzureTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: AzureOpenAIProviderSettings;\n }) {\n return createAzure(options.config).transcription(options.modelId);\n }\n\n async doGenerate(options: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const { api, speechOptions, maiOptions } = await this.getOptions(\n options.providerOptions,\n );\n if (api === 'mai') {\n return this.mai.doGenerate();\n }\n if (api === 'speech') {\n const result = await this.speech.doGenerate(options, speechOptions);\n return {\n ...result,\n warnings: [...result.warnings, ...maiOnlyWarnings(maiOptions)],\n };\n }\n\n const result = await this.openai.doGenerate(options);\n return {\n ...result,\n warnings: [\n ...result.warnings,\n ...speechOnlyWarnings(speechOptions),\n ...maiOnlyWarnings(maiOptions),\n ],\n };\n }\n\n async doStream(\n options: Parameters<NonNullable<TranscriptionModelV4['doStream']>>[0],\n ) {\n const { api, speechOptions, maiOptions } = await this.getOptions(\n options.providerOptions,\n );\n if (api === 'speech') {\n throw new UnsupportedFunctionalityError({\n functionality: 'streaming transcription with the Azure Speech API',\n });\n }\n if (api === 'mai') {\n return this.mai.doStream(\n options,\n maiOptions,\n speechOnlyWarnings(speechOptions),\n );\n }\n return this.openai.doStream(options);\n }\n\n private async getOptions(\n providerOptions: Parameters<\n TranscriptionModelV4['doGenerate']\n >[0]['providerOptions'],\n ) {\n const { api, language, ...speechOptions } =\n (await parseProviderOptions({\n provider: 'azure',\n providerOptions,\n schema: azureTranscriptionModelOptions,\n })) ?? {};\n return {\n api:\n api ??\n (isMAITranscribeStreaming(this.modelId)\n ? ('mai' as const)\n : getMAITranscribeModel(this.modelId)\n ? ('speech' as const)\n : ('openai' as const)),\n speechOptions,\n maiOptions: language != null ? { language } : {},\n };\n }\n}\n\n// Resolves the API per request: providerOptions also reach this model via Gateway.\nclass AzureSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.speech';\n\n constructor(\n readonly modelId: string,\n private readonly config: AzureOpenAIProviderSettings,\n private readonly openai: OpenAISpeechModel,\n private readonly speech: AzureSpeechSpeechModel,\n ) {}\n\n static [WORKFLOW_SERIALIZE](model: AzureSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: AzureOpenAIProviderSettings;\n }) {\n return createAzure(options.config).speech(options.modelId);\n }\n\n async doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const { api, ...speechOptions } =\n (await parseProviderOptions({\n provider: 'azure',\n providerOptions: options.providerOptions,\n schema: azureSpeechModelOptions,\n })) ?? {};\n if (\n (api ?? (getMAIVoiceModel(this.modelId) ? 'speech' : 'openai')) ===\n 'speech'\n ) {\n return this.speech.doGenerate(options, speechOptions);\n }\n\n const result = await this.openai.doGenerate(options);\n return {\n ...result,\n warnings: [...result.warnings, ...speechOnlyWarnings(speechOptions)],\n };\n }\n}\n\n// Resolves the API per request: providerOptions also reach this model via Gateway.\nclass AzureImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.image';\n\n constructor(\n readonly modelId: string,\n private readonly config: AzureOpenAIProviderSettings,\n private readonly openai: OpenAIImageModel,\n private readonly mai: AzureMaiImageModel,\n ) {}\n\n // Capabilities follow the default route; an `api` override is per request.\n private get defaultModel() {\n return isMAIImageModel(this.modelId) ? this.mai : this.openai;\n }\n\n get maxImagesPerCall() {\n return this.defaultModel.maxImagesPerCall;\n }\n\n get supportsFileInputs() {\n return this.defaultModel.supportsFileInputs;\n }\n\n get supportsMaskInputs() {\n return this.defaultModel.supportsMaskInputs;\n }\n\n static [WORKFLOW_SERIALIZE](model: AzureImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: AzureOpenAIProviderSettings;\n }) {\n return createAzure(options.config).image(options.modelId);\n }\n\n async doGenerate(options: Parameters<ImageModelV4['doGenerate']>[0]) {\n const { api, ...maiOptions } =\n (await parseProviderOptions({\n provider: 'azure',\n providerOptions: options.providerOptions,\n schema: azureImageModelOptions,\n })) ?? {};\n if ((api ?? (isMAIImageModel(this.modelId) ? 'mai' : 'openai')) === 'mai') {\n return this.mai.doGenerate(options, maiOptions);\n }\n\n const result = await this.openai.doGenerate(options);\n return {\n ...result,\n warnings: [\n ...result.warnings,\n ...unsupportedOptionWarnings(\n maiOptions,\n 'This option requires the MAI image API.',\n ),\n ],\n };\n }\n}\n\nfunction speechOnlyWarnings(options: Record<string, unknown>) {\n return unsupportedOptionWarnings(\n options,\n 'This option requires the Azure Speech API.',\n );\n}\n\nfunction maiOnlyWarnings(options: Record<string, unknown>) {\n return unsupportedOptionWarnings(\n options,\n 'This option requires MAI streaming transcription.',\n );\n}\n\nfunction unsupportedOptionWarnings(\n options: Record<string, unknown>,\n details: string,\n): SharedV4Warning[] {\n return Object.entries(options)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => ({\n type: 'unsupported',\n feature: `providerOptions.azure.${key}`,\n details,\n }));\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/azure-mai-image-model-options.ts","../src/azure-image-model-options.ts","../src/azure-mai-image-model.ts","../src/azure-mai-transcription-model.ts","../src/azure-openai-tools.ts","../src/azure-speech-speech-model-options.ts","../src/azure-speech-model-options.ts","../src/azure-speech-speech-model.ts","../src/azure-mai-transcription-model-options.ts","../src/azure-speech-transcription-model-options.ts","../src/azure-transcription-model-options.ts","../src/azure-speech-transcription-model.ts","../src/version.ts","../src/azure-openai-provider.ts"],"sourcesContent":["import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const azureMaiImageModelOptionsShape = () => ({\n /**\n * Let the model pick the output aspect ratio from the prompt and any\n * reference images. MAI-Image-2.6 models only.\n */\n autoAspectRatio: z.boolean().optional(),\n\n /**\n * Ground generation in Bing web search results. MAI-Image-2.6 models only.\n */\n webGrounding: z.boolean().optional(),\n});\n\nexport const azureMaiImageModelOptions = lazySchema(() =>\n zodSchema(z.object(azureMaiImageModelOptionsShape())),\n);\n\nexport type AzureImageModelMaiOptions = InferSchema<\n typeof azureMaiImageModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { azureMaiImageModelOptionsShape } from './azure-mai-image-model-options';\n\nexport const azureImageModelOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * API to use. Defaults to MAI for MAI-Image models, OpenAI otherwise.\n */\n api: z.enum(['openai', 'mai']).optional(),\n ...azureMaiImageModelOptionsShape(),\n }),\n ),\n);\n\nexport type AzureImageModelOptions = InferSchema<typeof azureImageModelOptions>;\n\n// Lowercase model IDs served by the MAI image API.\nconst maiImageModels = new Set([\n 'mai-image-2.5',\n 'mai-image-2.5-flash',\n 'mai-image-2.5-pro',\n 'mai-image-2.6',\n 'mai-image-2.6-flash',\n]);\n\nexport function isMAIImageModel(modelId: string) {\n return maiImageModels.has(modelId.toLowerCase());\n}\n","import type {\n ImageModelV4,\n ImageModelV4File,\n ImageModelV4Usage,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n downloadBlob,\n postFormDataToApi,\n postJsonToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AzureImageModelMaiOptions } from './azure-mai-image-model-options';\n\n// MAI rejects either side below 768px; 1024x1024 is its default output.\nconst MIN_SIDE = 768;\nconst DEFAULT_PIXELS = 1024 * 1024;\n\n/**\n * MAI image generations and edits (`/mai/v1/images/*`) on Azure AI Foundry.\n * The API returns one PNG per request and takes `width`/`height`, not `size`.\n */\nexport class AzureMaiImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.image';\n readonly maxImagesPerCall = 1;\n readonly supportsFileInputs = true;\n readonly supportsMaskInputs = false;\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: (path: string) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n _internal?: { currentDate?: () => Date };\n },\n ) {}\n\n async doGenerate(\n {\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n files,\n mask,\n headers,\n abortSignal,\n }: Parameters<ImageModelV4['doGenerate']>[0],\n { autoAspectRatio, webGrounding }: AzureImageModelMaiOptions = {},\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n if (mask != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'mask',\n details: 'MAI image edits do not support masks.',\n });\n }\n\n let dimensions = parseSize(size);\n if (size != null && aspectRatio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details: 'aspectRatio is ignored when size is set.',\n });\n } else if (aspectRatio != null) {\n dimensions = dimensionsForAspectRatio(aspectRatio);\n if (dimensions == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details: `Invalid aspect ratio: ${aspectRatio}.`,\n });\n }\n }\n\n const fields = {\n model: this.modelId,\n prompt,\n width: dimensions?.width,\n height: dimensions?.height,\n auto_aspect_ratio: autoAspectRatio,\n web_grounding: webGrounding,\n };\n const requestOptions = {\n headers: combineHeaders(this.config.headers(), headers),\n failedResponseHandler: maiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n maiImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n };\n const images =\n files != null && files.length > 0\n ? await Promise.all(files.map(file => fileToBlob(file, abortSignal)))\n : undefined;\n\n // The API ignores `n`, so a call reached with n > 1 (e.g. through an\n // `api: 'mai'` override) sends one request per image.\n const responses = await Promise.all(\n Array.from({ length: Math.max(1, n) }, () =>\n images != null\n ? postFormDataToApi({\n ...requestOptions,\n url: this.config.url('/images/edits'),\n formData: toFormData(fields, images),\n })\n : postJsonToApi({\n ...requestOptions,\n url: this.config.url('/images/generations'),\n body: fields,\n }),\n ),\n );\n\n let usage: ImageModelV4Usage | undefined;\n const metadata: Array<Record<string, number | string>> = [];\n for (const { value: response } of responses) {\n const textTokens = response.usage?.num_input_text_tokens ?? undefined;\n const imageTokens = response.usage?.num_input_image_tokens ?? undefined;\n if (response.usage != null) {\n const inputTokens = addTokens(textTokens, imageTokens);\n const outputTokens = response.usage.num_output_tokens ?? undefined;\n usage = {\n inputTokens: addTokens(usage?.inputTokens, inputTokens),\n outputTokens: addTokens(usage?.outputTokens, outputTokens),\n totalTokens: addTokens(\n usage?.totalTokens,\n addTokens(inputTokens, outputTokens),\n ),\n };\n }\n metadata.push(\n ...response.data.map(() => ({\n ...(response.created != null ? { created: response.created } : {}),\n ...(response.size != null ? { size: response.size } : {}),\n ...(textTokens != null ? { textTokens } : {}),\n ...(imageTokens != null ? { imageTokens } : {}),\n })),\n );\n }\n\n return {\n images: responses.flatMap(({ value }) =>\n value.data.map(item => item.b64_json),\n ),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responses[0]?.responseHeaders,\n },\n usage,\n providerMetadata: { azure: { images: metadata } },\n };\n }\n}\n\nfunction addTokens(a: number | undefined, b: number | undefined) {\n return a == null && b == null ? undefined : (a ?? 0) + (b ?? 0);\n}\n\nfunction parseSize(size: `${number}x${number}` | undefined) {\n if (size == null) return undefined;\n const [width, height] = size.split('x').map(Number);\n return { width, height };\n}\n\n// Keeps the default 1024x1024 pixel budget, raising the short side to 768.\nexport function dimensionsForAspectRatio(aspectRatio: string) {\n const [w, h] = aspectRatio.split(':').map(Number);\n if (!(w > 0 && h > 0)) return undefined;\n\n const ratio = w / h;\n let width = Math.sqrt(DEFAULT_PIXELS * ratio);\n let height = width / ratio;\n if (Math.min(width, height) < MIN_SIDE) {\n [width, height] =\n width < height\n ? [MIN_SIDE, MIN_SIDE / ratio]\n : [MIN_SIDE * ratio, MIN_SIDE];\n }\n\n const floor16 = (value: number) => Math.floor(value / 16 + 1e-9) * 16;\n return {\n width: Math.max(MIN_SIDE, floor16(width)),\n height: Math.max(MIN_SIDE, floor16(height)),\n };\n}\n\nfunction toFormData(\n fields: Record<string, string | number | boolean | undefined>,\n images: Blob[],\n) {\n const formData = new FormData();\n for (const [key, value] of Object.entries(fields)) {\n if (value != null) formData.append(key, String(value));\n }\n\n images.forEach((blob, index) => {\n const extension = blob.type === 'image/jpeg' ? 'jpg' : 'png';\n formData.append('image', blob, `image-${index + 1}.${extension}`);\n });\n return formData;\n}\n\nasync function fileToBlob(\n file: ImageModelV4File,\n abortSignal: AbortSignal | undefined,\n): Promise<Blob> {\n if (file.type === 'url') {\n return downloadBlob(file.url, { abortSignal });\n }\n\n const data =\n file.data instanceof Uint8Array\n ? file.data\n : convertBase64ToUint8Array(file.data);\n return new Blob([data as BlobPart], { type: file.mediaType });\n}\n\nconst maiErrorSchema = z.object({\n error: z.object({\n code: z.union([z.string(), z.number()]).nullish(),\n message: z.string(),\n }),\n});\n\nconst maiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: maiErrorSchema,\n errorToMessage: data => data.error.message,\n});\n\n// Only the fields used here, to tolerate API additions.\nconst maiImageResponseSchema = z.object({\n created: z.number().nullish(),\n size: z.string().nullish(),\n usage: z\n .object({\n num_input_text_tokens: z.number().nullish(),\n num_input_image_tokens: z.number().nullish(),\n num_output_tokens: z.number().nullish(),\n })\n .nullish(),\n data: z.array(z.object({ b64_json: z.string() })),\n});\n","import {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type Experimental_TranscriptionModelV4StreamPart as TranscriptionModelV4StreamPart,\n type SharedV4Warning,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n connectToWebSocket,\n convertToBase64,\n safeParseJSON,\n toWebSocketUrl,\n waitForWebSocketBufferDrain,\n type WebSocketConnection,\n type WebSocketConstructor,\n type WebSocketLike,\n} from '@ai-sdk/provider-utils';\nimport type { AzureTranscriptionModelMaiOptions } from './azure-mai-transcription-model-options';\n\ntype StreamOptions = Parameters<\n NonNullable<TranscriptionModelV4['doStream']>\n>[0];\n\nconst SUPPORTED_SAMPLE_RATES = [16000, 24000];\nconst DEFAULT_SAMPLE_RATE = 24000;\n\n/**\n * MAI streaming transcription over the OpenAI Realtime-compatible\n * `/mai/v1/realtime` WebSocket. The model ID is the Foundry deployment name.\n */\nexport class AzureMaiTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.transcription';\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: () => string;\n headers: () =>\n | Record<string, string | undefined>\n | PromiseLike<Record<string, string | undefined>>;\n webSocket?: WebSocketConstructor;\n _internal?: { currentDate?: () => Date };\n },\n ) {}\n\n async doGenerate(): Promise<\n Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>\n > {\n throw new UnsupportedFunctionalityError({\n functionality: `file transcription with ${this.modelId} (use streaming transcription)`,\n });\n }\n\n async doStream(\n options: StreamOptions,\n maiOptions: AzureTranscriptionModelMaiOptions = {},\n warnings: SharedV4Warning[] = [],\n ): Promise<\n Awaited<ReturnType<NonNullable<TranscriptionModelV4['doStream']>>>\n > {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { type, rate = DEFAULT_SAMPLE_RATE } = options.inputAudioFormat;\n if (type !== 'audio/pcm' || !SUPPORTED_SAMPLE_RATES.includes(rate)) {\n throw new InvalidArgumentError({\n argument: 'inputAudioFormat',\n message: `MAI streaming transcription requires 16-bit mono PCM (audio/pcm) at 16000 or 24000 Hz, got ${type}${options.inputAudioFormat.rate != null ? ` at ${rate} Hz` : ''}.`,\n });\n }\n\n const sessionUpdate = {\n type: 'session.update',\n session: {\n type: 'transcription',\n audio: {\n input: {\n format: { type: 'audio/pcm', rate },\n transcription: {\n model: this.modelId,\n ...(maiOptions.language != null\n ? { language: maiOptions.language }\n : {}),\n },\n // MAI supports neither server VAD nor noise reduction; the stream\n // commits once when the input audio ends.\n turn_detection: null,\n noise_reduction: null,\n },\n },\n },\n };\n\n const headers = {\n ...(await this.config.headers()),\n ...options.headers,\n };\n // Native WebSocket constructors drop headers, so bearer auth would be lost.\n if (\n this.config.webSocket == null &&\n Object.entries(headers).some(\n ([key, value]) =>\n key.toLowerCase() === 'authorization' && value != null,\n )\n ) {\n throw new InvalidArgumentError({\n argument: 'webSocket',\n message:\n 'MAI streaming transcription with Microsoft Entra ID (tokenProvider) or an Authorization header requires a custom webSocket implementation such as `ws`, because the native WebSocket cannot send headers.',\n });\n }\n\n return {\n request: { body: sessionUpdate },\n response: { timestamp: currentDate, modelId: this.modelId },\n stream: createMaiTranscriptionStream({\n ...getConnection({\n url: toWebSocketUrl(this.config.url()),\n headers,\n supportsHeaders: this.config.webSocket != null,\n }),\n webSocket: this.config.webSocket,\n sessionUpdate,\n bytesPerSecond: rate * 2,\n language: maiOptions.language,\n warnings,\n audio: options.audio,\n abortSignal: options.abortSignal,\n includeRawChunks: options.includeRawChunks,\n }),\n };\n }\n}\n\n// Native WebSocket constructors cannot send headers, so the key moves to the\n// `api-key` query parameter that MAI also accepts.\nfunction getConnection({\n url,\n headers,\n supportsHeaders,\n}: {\n url: URL;\n headers: Record<string, string | undefined>;\n supportsHeaders: boolean;\n}) {\n if (supportsHeaders) {\n return { url, headers };\n }\n const remaining: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === 'api-key') {\n if (value != null) url.searchParams.set('api-key', value);\n } else {\n remaining[key] = value;\n }\n }\n return { url, headers: remaining };\n}\n\ntype MaiRealtimeEvent = {\n type?: string;\n item_id?: string;\n delta?: string;\n intermediate?: string;\n transcript?: string;\n error?: { message?: string; code?: string };\n};\n\nfunction createMaiTranscriptionStream({\n url,\n headers,\n webSocket,\n sessionUpdate,\n bytesPerSecond,\n language,\n warnings,\n audio,\n abortSignal,\n includeRawChunks,\n}: {\n url: URL;\n headers: Record<string, string | undefined>;\n webSocket: WebSocketConstructor | undefined;\n sessionUpdate: unknown;\n bytesPerSecond: number;\n language: string | undefined;\n warnings: SharedV4Warning[];\n audio: ReadableStream<Uint8Array | string>;\n abortSignal: AbortSignal | undefined;\n includeRawChunks: boolean | undefined;\n}) {\n let finished = false;\n let cleanup: (closeCode?: number) => void = () => {};\n\n return new ReadableStream<TranscriptionModelV4StreamPart>({\n start: controller => {\n let audioReader:\n | ReadableStreamDefaultReader<Uint8Array | string>\n | undefined;\n let connection: WebSocketConnection | undefined;\n let audioStarted = false;\n let committed = false;\n let audioBytes = 0;\n let deltas = '';\n\n cleanup = (closeCode?: number) => {\n if (audioReader != null) {\n void audioReader.cancel().catch(() => {});\n } else {\n void audio.cancel().catch(() => {});\n }\n connection?.close(closeCode);\n };\n\n const finishWithError = (error: unknown) => {\n if (finished) return;\n finished = true;\n cleanup();\n controller.error(error);\n };\n\n const finish = (text: string) => {\n if (finished) return;\n finished = true;\n controller.enqueue({\n type: 'finish',\n text,\n segments: [],\n language,\n ...(audioBytes > 0\n ? { durationInSeconds: audioBytes / bytesPerSecond }\n : {}),\n });\n controller.close();\n cleanup(1000);\n };\n\n const sendAudio = async (socket: WebSocketLike) => {\n audioReader = audio.getReader();\n try {\n while (true) {\n const { done, value } = await audioReader.read();\n if (done || finished) break;\n const base64 = convertToBase64(value);\n if (base64.length === 0) continue;\n audioBytes +=\n typeof value === 'string'\n ? base64ByteLength(base64)\n : value.byteLength;\n socket.send(\n JSON.stringify({\n type: 'input_audio_buffer.append',\n audio: base64,\n }),\n );\n await waitForWebSocketBufferDrain(socket);\n }\n } finally {\n audioReader.releaseLock();\n audioReader = undefined;\n }\n if (finished) return;\n if (audioBytes === 0) {\n finish('');\n return;\n }\n committed = true;\n socket.send(JSON.stringify({ type: 'input_audio_buffer.commit' }));\n };\n\n connection = connectToWebSocket({\n url,\n headers,\n webSocket,\n abortSignal,\n onAbort: finishWithError,\n onProcessingError: finishWithError,\n onOpen: () => {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n onMessageText: async text => {\n const parsed = await safeParseJSON({ text });\n if (!parsed.success) return;\n const event = parsed.value as MaiRealtimeEvent;\n const socket = connection?.socket;\n\n if (includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: event });\n }\n\n switch (event.type) {\n case 'session.created': {\n socket?.send(JSON.stringify(sessionUpdate));\n break;\n }\n\n // Settings are locked after the first append, so audio waits for\n // the server to acknowledge the session configuration.\n case 'session.updated': {\n if (audioStarted || socket == null) break;\n audioStarted = true;\n void sendAudio(socket).catch(finishWithError);\n break;\n }\n\n case 'conversation.item.input_audio_transcription.delta': {\n deltas += event.delta ?? '';\n controller.enqueue({\n type: 'transcript-delta',\n id: event.item_id,\n delta: event.delta ?? '',\n });\n break;\n }\n\n // MAI-specific: the provisional text after the latest delta.\n case 'conversation.item.input_audio_transcription.intermediate': {\n controller.enqueue({\n type: 'transcript-partial',\n id: event.item_id,\n text: event.intermediate ?? '',\n });\n break;\n }\n\n case 'conversation.item.input_audio_transcription.completed': {\n const transcript = event.transcript ?? deltas;\n controller.enqueue({\n type: 'transcript-final',\n id: event.item_id,\n text: transcript,\n });\n if (committed) finish(transcript);\n break;\n }\n\n case 'conversation.item.input_audio_transcription.failed':\n case 'error': {\n finishWithError(\n new Error(\n `Azure MAI transcription error${event.error?.code != null ? ` (${event.error.code})` : ''}: ${event.error?.message ?? 'unknown error'}`,\n ),\n );\n break;\n }\n }\n },\n onSocketError: () => {\n finishWithError(new Error('Azure MAI transcription WebSocket error'));\n },\n onClose: ({ code, reason }) => {\n finishWithError(\n new Error(\n `Azure MAI transcription connection closed before the transcript completed${code != null ? ` (code ${code}${reason ? `: ${reason}` : ''})` : ''}`,\n ),\n );\n },\n });\n },\n\n cancel: () => {\n if (finished) return;\n finished = true;\n cleanup();\n },\n });\n}\n\nfunction base64ByteLength(base64: string) {\n const padding = base64.endsWith('==') ? 2 : base64.endsWith('=') ? 1 : 0;\n return (base64.length * 3) / 4 - padding;\n}\n","import {\n codeInterpreter,\n fileSearch,\n imageGeneration,\n webSearch,\n webSearchPreview,\n} from '@ai-sdk/openai/internal';\n\nexport const azureOpenaiTools: {\n codeInterpreter: typeof codeInterpreter;\n fileSearch: typeof fileSearch;\n imageGeneration: typeof imageGeneration;\n webSearch: typeof webSearch;\n webSearchPreview: typeof webSearchPreview;\n} = {\n codeInterpreter,\n fileSearch,\n imageGeneration,\n webSearch,\n webSearchPreview,\n};\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const azureSpeechSpeechModelOptionsShape = () => ({\n /**\n * Speaking style applied with `mstts:express-as`, e.g. `excited` or\n * `whispering`. Supported styles vary by voice.\n */\n style: z.string().min(1).optional(),\n\n /**\n * Intensity of `style`, from 0.01 to 2. Azure defaults to 1.\n */\n styleDegree: z.number().min(0.01).max(2).optional(),\n});\n\nexport const azureSpeechSpeechModelOptions = lazySchema(() =>\n zodSchema(z.strictObject(azureSpeechSpeechModelOptionsShape())),\n);\n\nexport type AzureSpeechModelSpeechOptions = InferSchema<\n typeof azureSpeechSpeechModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { azureSpeechSpeechModelOptionsShape } from './azure-speech-speech-model-options';\n\nexport const azureSpeechModelOptions = lazySchema(() =>\n zodSchema(\n z.strictObject({\n /**\n * API to use. Defaults to Speech for MAI-Voice models, OpenAI otherwise.\n */\n api: z.enum(['openai', 'speech']).optional(),\n ...azureSpeechSpeechModelOptionsShape(),\n }),\n ),\n);\n\nexport type AzureSpeechModelOptions = InferSchema<\n typeof azureSpeechModelOptions\n>;\n\n// Azure voice-name suffixes by lowercase model ID.\nconst maiVoiceModels = new Map([\n ['mai-voice-2.1-flash', 'MAI-Voice-2.1-Flash'],\n ['mai-voice-2.1', 'MAI-Voice-2.1'],\n ['mai-voice-2-flash', 'MAI-Voice-2-Flash'],\n ['mai-voice-2', 'MAI-Voice-2'],\n]);\n\nexport function getMAIVoiceModel(modelId: string) {\n return maiVoiceModels.get(modelId.toLowerCase());\n}\n","import {\n APICallError,\n type SharedV4Warning,\n type SpeechModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n extractResponseHeaders,\n postToApi,\n safeParseJSON,\n type FetchFunction,\n type ResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { getMAIVoiceModel } from './azure-speech-model-options';\nimport type { AzureSpeechModelSpeechOptions } from './azure-speech-speech-model-options';\n\nconst DEFAULT_VOICE = 'en-US-Harper';\n\n// Default voice per ISO 639-1 language; available on MAI-Voice-2,\n// MAI-Voice-2.1, and their Flash variants.\nconst DEFAULT_VOICES = new Map([\n ['de', 'de-DE-Mia'],\n ['en', DEFAULT_VOICE],\n ['es', 'es-MX-Valeria'],\n ['fr', 'fr-FR-Soleil'],\n ['hi', 'hi-IN-Kavya'],\n ['hu', 'hu-HU-Lilla'],\n ['it', 'it-IT-Rosa'],\n ['ko', 'ko-KR-Haena'],\n ['nl', 'nl-NL-Fleur'],\n ['pt', 'pt-BR-Luana'],\n ['ro', 'ro-RO-Elena'],\n ['ru', 'ru-RU-Masha'],\n ['th', 'th-TH-Krit'],\n ['tr', 'tr-TR-Elif'],\n ['zh', 'zh-CN-Mei'],\n]);\nconst DEFAULT_OUTPUT_FORMAT = 'audio-24khz-160kbitrate-mono-mp3';\n\n// Shorthand formats for `outputFormat`; other X-Microsoft-OutputFormat values\n// (e.g. `audio-48khz-192kbitrate-mono-mp3`) are passed through unchanged.\nconst OUTPUT_FORMATS = new Map([\n ['mp3', DEFAULT_OUTPUT_FORMAT],\n ['opus', 'ogg-24khz-16bit-mono-opus'],\n ['pcm', 'raw-24khz-16bit-mono-pcm'],\n ['wav', 'riff-24khz-16bit-mono-pcm'],\n]);\nconst NATIVE_OUTPUT_FORMAT =\n /^(?:amr|audio|g722|ogg|raw|riff|webm)-[a-z0-9-]+$/;\n\n/**\n * Azure Speech text to speech with SSML. The model is appended to the voice\n * name, e.g. `en-US-Harper:MAI-Voice-2`.\n */\nexport class AzureSpeechSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.speech';\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: () => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n _internal?: { currentDate?: () => Date };\n },\n ) {}\n\n async doGenerate(\n options: Parameters<SpeechModelV4['doGenerate']>[0],\n azureOptions: AzureSpeechModelSpeechOptions = {},\n ): Promise<Awaited<ReturnType<SpeechModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n const { style, styleDegree } = azureOptions;\n\n if (options.instructions != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'instructions',\n details: 'Use providerOptions.azure.style to control speaking style.',\n });\n }\n const { voice, languageWarning } = resolveVoice(\n options.voice,\n options.language,\n );\n if (languageWarning != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'language',\n details: languageWarning,\n });\n }\n if (styleDegree != null && style == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'providerOptions.azure.styleDegree',\n details: 'styleDegree requires style.',\n });\n }\n\n let outputFormat = DEFAULT_OUTPUT_FORMAT;\n if (options.outputFormat != null) {\n const format = options.outputFormat.toLowerCase();\n const shorthand = OUTPUT_FORMATS.get(format);\n if (shorthand != null) {\n outputFormat = shorthand;\n } else if (NATIVE_OUTPUT_FORMAT.test(format)) {\n outputFormat = format;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'outputFormat',\n details: `Unsupported output format: ${options.outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n const ssml = buildSsml({\n text: options.text,\n voiceName: voice.includes(':')\n ? voice\n : `${voice}:${getMAIVoiceModel(this.modelId) ?? this.modelId}`,\n locale: /^([a-z]{2,3}-[a-z]{2,4})-/i.exec(voice)?.[1],\n speed: options.speed,\n style,\n styleDegree: style != null ? styleDegree : undefined,\n });\n\n const {\n value: audio,\n responseHeaders,\n rawValue,\n } = await postToApi({\n url: this.config.url(),\n headers: combineHeaders(\n this.config.headers(),\n {\n 'Content-Type': 'application/ssml+xml',\n 'X-Microsoft-OutputFormat': outputFormat,\n },\n options.headers,\n ),\n body: { content: ssml, values: ssml },\n failedResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: { body: ssml },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nfunction buildSsml({\n text,\n voiceName,\n locale = 'en-US',\n speed,\n style,\n styleDegree,\n}: {\n text: string;\n voiceName: string;\n locale?: string;\n speed?: number;\n style?: string;\n styleDegree?: number;\n}) {\n let content = escapeXml(text);\n if (speed != null) {\n content = `<prosody rate=\"${speed}\">${content}</prosody>`;\n }\n if (style != null) {\n const degree = styleDegree != null ? ` styledegree=\"${styleDegree}\"` : '';\n content = `<mstts:express-as style=\"${escapeXml(style)}\"${degree}>${content}</mstts:express-as>`;\n }\n return (\n `<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" ` +\n `xmlns:mstts=\"http://www.w3.org/2001/mstts\" xml:lang=\"${escapeXml(locale)}\">` +\n `<voice name=\"${escapeXml(voiceName)}\">${content}</voice></speak>`\n );\n}\n\nconst XML_ESCAPES: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\n\nfunction escapeXml(value: string) {\n return value.replace(/[&<>\"']/g, char => XML_ESCAPES[char]);\n}\n\n// Uses the language's default voice when no voice is set. An explicit voice\n// wins, and its locale selects the language.\nfunction resolveVoice(\n voice: string | undefined,\n language: string | undefined,\n): { voice: string; languageWarning?: string } {\n const code = language ? language.split('-')[0].toLowerCase() : undefined;\n if (voice == null) {\n if (code == null) return { voice: DEFAULT_VOICE };\n if (code === 'auto') {\n return {\n voice: DEFAULT_VOICE,\n languageWarning: `Automatic language detection is not supported. ${DEFAULT_VOICE} was used.`,\n };\n }\n const defaultVoice = DEFAULT_VOICES.get(code);\n return defaultVoice != null\n ? { voice: defaultVoice }\n : {\n voice: DEFAULT_VOICE,\n languageWarning: `No default MAI voice for language \"${language}\". ${DEFAULT_VOICE} was used.`,\n };\n }\n const voiceLanguage = /^([a-z]{2,3})-[a-z]{2,4}-/i\n .exec(voice)?.[1]\n ?.toLowerCase();\n return code != null &&\n code !== 'auto' &&\n voiceLanguage != null &&\n code !== voiceLanguage\n ? {\n voice,\n languageWarning: `The voice ${voice} selects the language. Language \"${language}\" was ignored.`,\n }\n : { voice };\n}\n\nconst errorSchema = z.object({\n error: z.object({ message: z.string() }),\n});\n\n// Azure Speech answers invalid requests (style or output format) with an empty\n// 400 body. Unknown voices or styles reset the connection with an Envoy 502\n// whose reason is `protocol error`; that is a client input error, so it is\n// reported as a non-retryable 400. Other 502s stay retryable.\nconst failedResponseHandler: ResponseHandler<APICallError> = async ({\n response,\n url,\n requestBodyValues,\n}) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n const parsed = await safeParseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n const isVoiceReset =\n response.status === 502 &&\n responseBody.includes('reset reason: protocol error');\n\n const message = parsed.success\n ? parsed.value.error.message\n : isVoiceReset\n ? 'Azure Speech could not synthesize the request. Check that the voice is available for this model and that the style is supported by the voice.'\n : response.status === 400\n ? 'Azure Speech request failed with status 400. Check the voice name, style, and output format.'\n : `Azure Speech request failed with status ${response.status}.`;\n\n return {\n responseHeaders,\n value: new APICallError({\n message,\n url,\n requestBodyValues,\n statusCode: isVoiceReset ? 400 : response.status,\n responseHeaders,\n responseBody,\n isRetryable: isVoiceReset ? false : undefined,\n }),\n };\n};\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const azureMaiTranscriptionModelOptionsShape = () => ({\n /**\n * Language hint for streaming transcription, e.g. `en`. Omit for automatic\n * language detection.\n */\n language: z.string().min(1).optional(),\n});\n\nexport const azureMaiTranscriptionModelOptions = lazySchema(() =>\n zodSchema(z.strictObject(azureMaiTranscriptionModelOptionsShape())),\n);\n\nexport type AzureTranscriptionModelMaiOptions = InferSchema<\n typeof azureMaiTranscriptionModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// Strict objects reject unknown keys (e.g. `diarization.maxSpeakers`, which\n// MAI-Transcribe-2 does not support) instead of silently dropping them.\nexport const azureSpeechTranscriptionModelOptionsShape = () => ({\n /**\n * Timing granularity. Defaults to `segment` so that transcription results\n * include timed segments (Azure's own default is `none`).\n */\n timestamps: z.enum(['word', 'segment', 'none']).optional(),\n\n /**\n * `verbatim` keeps fillers and false starts, `clean` removes them.\n * Azure defaults to `verbatim`.\n */\n transcribeStyle: z.enum(['verbatim', 'clean']).optional(),\n\n /**\n * Forces a single language, e.g. `['en']`. Omit for automatic language\n * detection and code switching.\n */\n locales: z.array(z.string()).length(1).optional(),\n\n /**\n * Speaker diarization. Speaker IDs are available in provider metadata.\n */\n diarization: z.strictObject({ enabled: z.boolean() }).optional(),\n\n /**\n * Keyword biasing for names and domain terminology.\n */\n phraseList: z.strictObject({ phrases: z.array(z.string()) }).optional(),\n});\n\nexport const azureSpeechTranscriptionModelOptions = lazySchema(() =>\n zodSchema(z.strictObject(azureSpeechTranscriptionModelOptionsShape())),\n);\n\nexport type AzureTranscriptionModelSpeechOptions = InferSchema<\n typeof azureSpeechTranscriptionModelOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { azureMaiTranscriptionModelOptionsShape } from './azure-mai-transcription-model-options';\nimport { azureSpeechTranscriptionModelOptionsShape } from './azure-speech-transcription-model-options';\n\nexport const azureTranscriptionModelOptions = lazySchema(() =>\n zodSchema(\n z.strictObject({\n /**\n * API to use. Defaults to Speech for MAI-Transcribe models, MAI for\n * MAI-Transcribe-2-Streaming, and OpenAI otherwise.\n */\n api: z.enum(['openai', 'speech', 'mai']).optional(),\n ...azureSpeechTranscriptionModelOptionsShape(),\n ...azureMaiTranscriptionModelOptionsShape(),\n }),\n ),\n);\n\nexport type AzureTranscriptionModelOptions = InferSchema<\n typeof azureTranscriptionModelOptions\n>;\n\n// Azure Speech model names by lowercase model ID. MAI-Transcribe-1.5 only\n// accepts Azure's default timestamps (`none`).\nconst maiTranscribeModels = new Map([\n ['mai-transcribe-2', { name: 'MAI-Transcribe-2', supportsTimestamps: true }],\n [\n 'mai-transcribe-1.5',\n { name: 'MAI-Transcribe-1.5', supportsTimestamps: false },\n ],\n]);\n\nexport function getMAITranscribeModel(modelId: string) {\n return maiTranscribeModels.get(modelId.toLowerCase());\n}\n\nexport function isMAITranscribeStreaming(modelId: string): boolean {\n return modelId.toLowerCase() === 'mai-transcribe-2-streaming';\n}\n","import type { TranscriptionModelV4 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n mediaTypeToExtension,\n postFormDataToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AzureTranscriptionProviderMetadata } from './azure-transcription-provider-metadata';\nimport type { AzureTranscriptionModelSpeechOptions } from './azure-speech-transcription-model-options';\nimport { getMAITranscribeModel } from './azure-transcription-model-options';\n\nexport class AzureSpeechTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.transcription';\n\n constructor(\n readonly modelId: string,\n private readonly config: {\n url: () => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n },\n ) {}\n\n async doGenerate(\n options: Parameters<TranscriptionModelV4['doGenerate']>[0],\n azureOptions: AzureTranscriptionModelSpeechOptions = {},\n ): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {\n const timestamp = new Date();\n const maiModel = getMAITranscribeModel(this.modelId);\n const formData = new FormData();\n formData.append(\n 'audio',\n new Blob(\n [\n typeof options.audio === 'string'\n ? convertBase64ToUint8Array(options.audio)\n : (options.audio as Uint8Array<ArrayBuffer>),\n ],\n { type: options.mediaType },\n ),\n `audio.${mediaTypeToExtension(options.mediaType)}`,\n );\n formData.append(\n 'definition',\n JSON.stringify({\n enhancedMode: {\n enabled: true,\n model: maiModel?.name ?? this.modelId,\n modelOptions: {\n timestamps:\n azureOptions.timestamps ??\n (maiModel?.supportsTimestamps === false ? undefined : 'segment'),\n transcribeStyle: azureOptions.transcribeStyle,\n },\n },\n locales: azureOptions.locales,\n diarization: azureOptions.diarization,\n phraseList: azureOptions.phraseList,\n }),\n );\n\n const { value, rawValue, responseHeaders } = await postFormDataToApi({\n url: this.config.url(),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.union([\n z.object({ error: z.object({ message: z.string() }) }),\n z.object({ message: z.string() }),\n ]),\n errorToMessage: data =>\n 'error' in data ? data.error.message : data.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(responseSchema),\n });\n\n const phrases = value.phrases ?? [];\n // Consider every reported locale so mixed results (e.g. en + fil) are not\n // collapsed to one language; only ISO-639-1 codes are reported.\n const languages = new Set(\n phrases.flatMap(phrase =>\n phrase.locale ? [phrase.locale.split('-')[0].toLowerCase()] : [],\n ),\n );\n const [language] = languages;\n const reportedLanguage =\n languages.size === 1 && /^[a-z]{2}$/.test(language)\n ? language\n : undefined;\n\n return {\n text: value.combinedPhrases.map(phrase => phrase.text).join(' '),\n segments: phrases.flatMap(phrase =>\n phrase.offsetMilliseconds != null && phrase.durationMilliseconds != null\n ? [\n {\n text: phrase.text,\n startSecond: phrase.offsetMilliseconds / 1000,\n endSecond:\n (phrase.offsetMilliseconds + phrase.durationMilliseconds) /\n 1000,\n },\n ]\n : [],\n ),\n language: reportedLanguage,\n durationInSeconds:\n value.durationMilliseconds != null\n ? value.durationMilliseconds / 1000\n : undefined,\n warnings: [],\n providerMetadata: {\n azure: { phrases },\n } satisfies AzureTranscriptionProviderMetadata,\n response: {\n timestamp,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst responseSchema = z.object({\n combinedPhrases: z.array(z.object({ text: z.string() })),\n durationMilliseconds: z.number().nullish(),\n phrases: z\n .array(\n z.object({\n text: z.string(),\n offsetMilliseconds: z.number().nullish(),\n durationMilliseconds: z.number().nullish(),\n locale: z.string().nullish(),\n speaker: z.number().nullish(),\n confidence: z.number().nullish(),\n words: z\n .array(\n z.object({\n text: z.string(),\n offsetMilliseconds: z.number().nullish(),\n durationMilliseconds: z.number().nullish(),\n }),\n )\n .nullish(),\n }),\n )\n .nullish(),\n});\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n OpenAIChatLanguageModel,\n OpenAICompletionLanguageModel,\n OpenAIEmbeddingModel,\n OpenAIImageModel,\n OpenAIResponsesLanguageModel,\n OpenAISpeechModel,\n OpenAITranscriptionModel,\n} from '@ai-sdk/openai/internal';\nimport { DeepSeekChatLanguageModel } from '@ai-sdk/deepseek/internal';\nimport {\n InvalidArgumentError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type ProviderV4,\n type ImageModelV4,\n type SharedV4Warning,\n type SpeechModelV4,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n isValidHostnamePart,\n loadApiKey,\n loadSetting,\n normalizeHeaders,\n parseProviderOptions,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n type WebSocketConstructor,\n} from '@ai-sdk/provider-utils';\nimport {\n azureImageModelOptions,\n isMAIImageModel,\n} from './azure-image-model-options';\nimport { AzureMaiImageModel } from './azure-mai-image-model';\nimport { AzureMaiTranscriptionModel } from './azure-mai-transcription-model';\nimport { azureOpenaiTools } from './azure-openai-tools';\nimport {\n azureSpeechModelOptions,\n getMAIVoiceModel,\n} from './azure-speech-model-options';\nimport { AzureSpeechSpeechModel } from './azure-speech-speech-model';\nimport { AzureSpeechTranscriptionModel } from './azure-speech-transcription-model';\nimport {\n azureTranscriptionModelOptions,\n getMAITranscribeModel,\n isMAITranscribeStreaming,\n} from './azure-transcription-model-options';\nimport { VERSION } from './version';\n\nexport interface AzureOpenAIProvider extends ProviderV4 {\n (deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI responses API model for text generation.\n */\n languageModel(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI chat model for text generation.\n */\n chat(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure-hosted DeepSeek chat model for text generation.\n */\n deepseek(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI responses API model for text generation.\n */\n responses(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI completion model for text generation.\n */\n completion(deploymentId: string): LanguageModelV4;\n\n /**\n * Creates an Azure OpenAI model for text embeddings.\n */\n embedding(deploymentId: string): EmbeddingModelV4;\n\n /**\n * Creates an Azure OpenAI model for text embeddings.\n */\n embeddingModel(deploymentId: string): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(deploymentId: string): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(deploymentId: string): EmbeddingModelV4;\n\n /**\n * Creates an Azure image model. MAI-Image models use the MAI image API by\n * default; other IDs use OpenAI. Override with providerOptions.azure.api.\n */\n image(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure image model. Alias of `image`.\n */\n imageModel(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure transcription model. MAI-Transcribe models use the Speech\n * API and MAI-Transcribe-2-Streaming the MAI realtime API by default; other\n * IDs use OpenAI. Override with providerOptions.azure.api.\n */\n transcription(deploymentId: string): TranscriptionModelV4;\n\n /**\n * Creates an Azure transcription model. Alias of `transcription`.\n */\n transcriptionModel(deploymentId: string): TranscriptionModelV4;\n\n /**\n * Creates an Azure speech generation model. MAI-Voice models use the Speech\n * API by default; other IDs use OpenAI. Override with providerOptions.azure.api.\n */\n speech(deploymentId: string): SpeechModelV4;\n\n /**\n * Creates an Azure speech generation model. Alias of `speech`.\n */\n speechModel(deploymentId: string): SpeechModelV4;\n\n /**\n * AzureOpenAI-specific tools.\n */\n tools: typeof azureOpenaiTools;\n}\n\nexport interface AzureOpenAIProviderSettings {\n /**\n * Name of the Azure OpenAI resource. Either this or `baseURL` can be used.\n *\n * The resource name is used in the assembled URL: `https://{resourceName}.openai.azure.com/openai/v1{path}`.\n * It must be a single DNS label (letters, digits, and hyphens).\n */\n resourceName?: string;\n\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers. Either this or `resourceName` can be used.\n * When a baseURL is provided, the resourceName is ignored.\n *\n * With an unversioned Azure OpenAI baseURL, the resolved URL is `{baseURL}/v1{path}`.\n * Azure OpenAI base URLs that already end in `/openai/v1` are used as-is.\n * With a non-Azure custom gateway baseURL, the resolved URL is `{baseURL}{path}`.\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * A function that returns an access token for Microsoft Entra\n * (formerly known as Azure Active Directory), which will be invoked\n * on every request.\n */\n tokenProvider?: (() => Promise<string>) | undefined;\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 /**\n * Custom api version to use. Defaults to `v1`.\n * Complete v1 base URLs are used as-is.\n */\n apiVersion?: string;\n\n /**\n * Use deployment-based URLs for specific model types. Set to true to use legacy deployment format:\n * `{baseURL}/deployments/{deploymentId}{path}?api-version={apiVersion}` instead of\n * `{baseURL}/v1{path}?api-version={apiVersion}`.\n */\n useDeploymentBasedUrls?: boolean;\n\n /**\n * URL prefix for Azure Speech (MAI-Transcribe transcription and MAI-Voice\n * speech), e.g. a regional endpoint like\n * `https://eastus.api.cognitive.microsoft.com`.\n * Defaults to `https://{resourceName}.cognitiveservices.azure.com`.\n * Speech requests do not use `baseURL` or `apiVersion`.\n */\n speechBaseURL?: string;\n\n /**\n * URL prefix for MAI APIs (MAI-Image, MAI-Transcribe-2-Streaming). Defaults\n * to `https://{resourceName}.services.ai.azure.com/mai/v1`.\n */\n maiBaseURL?: string;\n\n /**\n * Custom WebSocket implementation for MAI streaming transcription, e.g.\n * `ws` in Node.js. With a custom implementation the API key is sent as a\n * header; otherwise it is sent as the `api-key` query parameter. Entra ID\n * tokens require a custom implementation; streaming rejects them otherwise.\n */\n webSocket?: WebSocketConstructor;\n}\n\nfunction getAzureOpenAIBaseURLInfo(baseURL: string | undefined) {\n if (baseURL == null) {\n return {\n isAzureOpenAI: true,\n isFoundryProject: false,\n isVersioned: false,\n };\n }\n\n const url = new URL(baseURL);\n const hostname = url.hostname;\n const isAzureOpenAI =\n hostname.endsWith('.openai.azure.com') ||\n hostname.endsWith('.services.ai.azure.com') ||\n hostname.endsWith('.cognitiveservices.azure.com');\n const pathname = url.pathname.replace(/\\/+$/, '');\n\n return {\n isAzureOpenAI,\n isFoundryProject:\n hostname.endsWith('.services.ai.azure.com') &&\n pathname.startsWith('/api/projects/'),\n isVersioned: isAzureOpenAI && pathname.toLowerCase().endsWith('/openai/v1'),\n };\n}\n\n/**\n * Create an Azure OpenAI provider instance.\n */\nexport function createAzure(\n options: AzureOpenAIProviderSettings = {},\n): AzureOpenAIProvider {\n const tokenProvider = options.tokenProvider;\n\n if (options.apiKey && tokenProvider) {\n throw new InvalidArgumentError({\n argument: 'apiKey/tokenProvider',\n message:\n 'Both apiKey and tokenProvider were provided. Please use only one authentication method.',\n });\n }\n\n const getHeaders = (api: 'openai' | 'speech' | 'mai' = 'openai') => {\n const authHeaders = tokenProvider\n ? {}\n : {\n [api === 'speech' ? 'Ocp-Apim-Subscription-Key' : 'api-key']:\n loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AZURE_API_KEY',\n description:\n api === 'speech'\n ? 'Azure Speech'\n : api === 'mai'\n ? 'Azure MAI'\n : 'Azure OpenAI',\n }),\n };\n\n return withUserAgentSuffix(\n {\n ...authHeaders,\n ...options.headers,\n },\n `ai-sdk-azure/${VERSION}`,\n );\n };\n\n const fetch: FetchFunction | undefined = tokenProvider\n ? async (input, init) => {\n const headers = normalizeHeaders(init?.headers);\n\n if (headers.authorization == null) {\n headers.authorization = `Bearer ${await tokenProvider()}`;\n }\n\n return (options.fetch ?? globalThis.fetch)(input, {\n ...init,\n headers,\n });\n }\n : options.fetch;\n\n const getResourceName = () => {\n const resourceName = loadSetting({\n settingValue: options.resourceName,\n settingName: 'resourceName',\n environmentVariableName: 'AZURE_RESOURCE_NAME',\n description: 'Azure OpenAI resource name',\n });\n\n // The resource name becomes part of the request host, so only a DNS label\n // is accepted (e.g. `user@internal:8080/#` would rewrite the host).\n if (!isValidHostnamePart(resourceName)) {\n throw new InvalidArgumentError({\n argument: 'resourceName',\n message:\n 'Invalid Azure resource name. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',\n });\n }\n\n return resourceName;\n };\n\n const apiVersion = options.apiVersion ?? 'v1';\n const {\n isAzureOpenAI,\n isFoundryProject,\n isVersioned: isAzureOpenAIVersioned,\n } = getAzureOpenAIBaseURLInfo(options.baseURL);\n\n const url = ({ path, modelId }: { path: string; modelId: string }) => {\n const baseUrlPrefix = withoutTrailingSlash(\n options.baseURL ?? `https://${getResourceName()}.openai.azure.com/openai`,\n );\n\n let fullUrl: URL;\n if (options.useDeploymentBasedUrls) {\n // Use deployment-based format for compatibility with certain Azure OpenAI models\n fullUrl = new URL(`${baseUrlPrefix}/deployments/${modelId}${path}`);\n } else if (!isAzureOpenAI || isAzureOpenAIVersioned) {\n // Custom gateways can own Azure routing and versioning themselves.\n // Complete Azure OpenAI v1 URLs also own their versioning.\n fullUrl = new URL(`${baseUrlPrefix}${path}`);\n } else {\n // Use v1 API format - no deployment ID in URL\n fullUrl = new URL(`${baseUrlPrefix}/v1${path}`);\n }\n\n if (\n options.useDeploymentBasedUrls ||\n (isAzureOpenAI && !isAzureOpenAIVersioned && !isFoundryProject)\n ) {\n fullUrl.searchParams.set('api-version', apiVersion);\n }\n\n return fullUrl.toString();\n };\n\n const createChatModel = (deploymentName: string) =>\n new OpenAIChatLanguageModel(deploymentName, {\n provider: 'azure.chat',\n url,\n headers: getHeaders,\n fetch,\n });\n\n const createDeepSeekModel = (deploymentName: string) =>\n new DeepSeekChatLanguageModel(deploymentName, {\n provider: 'azure.deepseek',\n url,\n headers: getHeaders,\n fetch,\n supportsPenaltySampling: true,\n supportsThinking: false,\n // json_object with thinking enabled makes Azure return the JSON in reasoning_content with empty content\n supportsStructuredOutputs: true,\n });\n\n const createCompletionModel = (modelId: string) =>\n new OpenAICompletionLanguageModel(modelId, {\n provider: 'azure.completion',\n url,\n headers: getHeaders,\n fetch,\n });\n\n const createEmbeddingModel = (modelId: string) =>\n new OpenAIEmbeddingModel(modelId, {\n provider: 'azure.embeddings',\n headers: getHeaders,\n url,\n fetch,\n });\n\n const createResponsesModel = (modelId: string) =>\n new OpenAIResponsesLanguageModel(modelId, {\n provider: 'azure.responses',\n url,\n headers: getHeaders,\n fetch,\n explicitMessageItemType: isFoundryProject,\n // Soft-deprecated. TODO: remove in v8\n fileIdPrefixes: ['assistant-'],\n });\n\n const maiBaseURL = () =>\n withoutTrailingSlash(options.maiBaseURL) ??\n `https://${getResourceName()}.services.ai.azure.com/mai/v1`;\n\n const createImageModel = (modelId: string) =>\n new AzureImageModel(\n modelId,\n options,\n new OpenAIImageModel(modelId, {\n provider: 'azure.image',\n url,\n headers: getHeaders,\n fetch,\n // Azure model IDs are user-defined deployment names, so OpenAI model\n // family capabilities cannot be inferred from them.\n imageInputCapabilities: {\n supportsFileInputs: undefined,\n supportsMaskInputs: undefined,\n },\n }),\n new AzureMaiImageModel(modelId, {\n url: path => `${maiBaseURL()}${path}`,\n headers: () => getHeaders('mai'),\n fetch,\n }),\n );\n\n const speechBaseURL = () =>\n withoutTrailingSlash(options.speechBaseURL) ??\n `https://${getResourceName()}.cognitiveservices.azure.com`;\n\n const createTranscriptionModel = (modelId: string) =>\n new AzureTranscriptionModel(\n modelId,\n options,\n new OpenAITranscriptionModel(modelId, {\n provider: 'azure.transcription',\n url,\n headers: getHeaders,\n fetch,\n }),\n new AzureSpeechTranscriptionModel(modelId, {\n url: () =>\n `${speechBaseURL()}/speechtotext/transcriptions:transcribe?api-version=2025-10-15`,\n headers: () => getHeaders('speech'),\n fetch,\n }),\n new AzureMaiTranscriptionModel(modelId, {\n url: () => `${maiBaseURL()}/realtime?intent=transcription`,\n headers: async () =>\n tokenProvider\n ? {\n authorization: `Bearer ${await tokenProvider()}`,\n ...getHeaders('mai'),\n }\n : getHeaders('mai'),\n webSocket: options.webSocket,\n }),\n );\n\n const createSpeechModel = (modelId: string) =>\n new AzureSpeechModel(\n modelId,\n options,\n new OpenAISpeechModel(modelId, {\n provider: 'azure.speech',\n url,\n headers: getHeaders,\n fetch,\n }),\n new AzureSpeechSpeechModel(modelId, {\n url: () => `${speechBaseURL()}/tts/cognitiveservices/v1`,\n headers: () => getHeaders('speech'),\n fetch,\n }),\n );\n\n const provider = function (deploymentId: string) {\n if (new.target) {\n throw new Error(\n 'The Azure OpenAI model function cannot be called with the new keyword.',\n );\n }\n\n return createResponsesModel(deploymentId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createResponsesModel;\n provider.chat = createChatModel;\n provider.deepseek = createDeepSeekModel;\n provider.completion = createCompletionModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.responses = createResponsesModel;\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n provider.tools = azureOpenaiTools;\n return provider;\n}\n\n/**\n * Default Azure OpenAI provider instance.\n */\nexport const azure = createAzure();\n\n// Resolves the API per request: providerOptions also reach this model via Gateway.\nclass AzureTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.transcription';\n\n constructor(\n readonly modelId: string,\n private readonly config: AzureOpenAIProviderSettings,\n private readonly openai: OpenAITranscriptionModel,\n private readonly speech: AzureSpeechTranscriptionModel,\n private readonly mai: AzureMaiTranscriptionModel,\n ) {}\n\n static [WORKFLOW_SERIALIZE](model: AzureTranscriptionModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: AzureOpenAIProviderSettings;\n }) {\n return createAzure(options.config).transcription(options.modelId);\n }\n\n async doGenerate(options: Parameters<TranscriptionModelV4['doGenerate']>[0]) {\n const { api, speechOptions, maiOptions } = await this.getOptions(\n options.providerOptions,\n );\n if (api === 'mai') {\n return this.mai.doGenerate();\n }\n if (api === 'speech') {\n const result = await this.speech.doGenerate(options, speechOptions);\n return {\n ...result,\n warnings: [...result.warnings, ...maiOnlyWarnings(maiOptions)],\n };\n }\n\n const result = await this.openai.doGenerate(options);\n return {\n ...result,\n warnings: [\n ...result.warnings,\n ...speechOnlyWarnings(speechOptions),\n ...maiOnlyWarnings(maiOptions),\n ],\n };\n }\n\n async doStream(\n options: Parameters<NonNullable<TranscriptionModelV4['doStream']>>[0],\n ) {\n const { api, speechOptions, maiOptions } = await this.getOptions(\n options.providerOptions,\n );\n if (api === 'speech') {\n throw new UnsupportedFunctionalityError({\n functionality: 'streaming transcription with the Azure Speech API',\n });\n }\n if (api === 'mai') {\n return this.mai.doStream(\n options,\n maiOptions,\n speechOnlyWarnings(speechOptions),\n );\n }\n return this.openai.doStream(options);\n }\n\n private async getOptions(\n providerOptions: Parameters<\n TranscriptionModelV4['doGenerate']\n >[0]['providerOptions'],\n ) {\n const { api, language, ...speechOptions } =\n (await parseProviderOptions({\n provider: 'azure',\n providerOptions,\n schema: azureTranscriptionModelOptions,\n })) ?? {};\n return {\n api:\n api ??\n (isMAITranscribeStreaming(this.modelId)\n ? ('mai' as const)\n : getMAITranscribeModel(this.modelId)\n ? ('speech' as const)\n : ('openai' as const)),\n speechOptions,\n maiOptions: language != null ? { language } : {},\n };\n }\n}\n\n// Resolves the API per request: providerOptions also reach this model via Gateway.\nclass AzureSpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.speech';\n\n constructor(\n readonly modelId: string,\n private readonly config: AzureOpenAIProviderSettings,\n private readonly openai: OpenAISpeechModel,\n private readonly speech: AzureSpeechSpeechModel,\n ) {}\n\n static [WORKFLOW_SERIALIZE](model: AzureSpeechModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: AzureOpenAIProviderSettings;\n }) {\n return createAzure(options.config).speech(options.modelId);\n }\n\n async doGenerate(options: Parameters<SpeechModelV4['doGenerate']>[0]) {\n const { api, ...speechOptions } =\n (await parseProviderOptions({\n provider: 'azure',\n providerOptions: options.providerOptions,\n schema: azureSpeechModelOptions,\n })) ?? {};\n if (\n (api ?? (getMAIVoiceModel(this.modelId) ? 'speech' : 'openai')) ===\n 'speech'\n ) {\n return this.speech.doGenerate(options, speechOptions);\n }\n\n const result = await this.openai.doGenerate(options);\n return {\n ...result,\n warnings: [...result.warnings, ...speechOnlyWarnings(speechOptions)],\n };\n }\n}\n\n// Resolves the API per request: providerOptions also reach this model via Gateway.\nclass AzureImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'azure.image';\n\n constructor(\n readonly modelId: string,\n private readonly config: AzureOpenAIProviderSettings,\n private readonly openai: OpenAIImageModel,\n private readonly mai: AzureMaiImageModel,\n ) {}\n\n // Capabilities follow the default route; an `api` override is per request.\n private get defaultModel() {\n return isMAIImageModel(this.modelId) ? this.mai : this.openai;\n }\n\n get maxImagesPerCall() {\n return this.defaultModel.maxImagesPerCall;\n }\n\n get supportsFileInputs() {\n return this.defaultModel.supportsFileInputs;\n }\n\n get supportsMaskInputs() {\n return this.defaultModel.supportsMaskInputs;\n }\n\n static [WORKFLOW_SERIALIZE](model: AzureImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: AzureOpenAIProviderSettings;\n }) {\n return createAzure(options.config).image(options.modelId);\n }\n\n async doGenerate(options: Parameters<ImageModelV4['doGenerate']>[0]) {\n const { api, ...maiOptions } =\n (await parseProviderOptions({\n provider: 'azure',\n providerOptions: options.providerOptions,\n schema: azureImageModelOptions,\n })) ?? {};\n if ((api ?? (isMAIImageModel(this.modelId) ? 'mai' : 'openai')) === 'mai') {\n return this.mai.doGenerate(options, maiOptions);\n }\n\n const result = await this.openai.doGenerate(options);\n return {\n ...result,\n warnings: [\n ...result.warnings,\n ...unsupportedOptionWarnings(\n maiOptions,\n 'This option requires the MAI image API.',\n ),\n ],\n };\n }\n}\n\nfunction speechOnlyWarnings(options: Record<string, unknown>) {\n return unsupportedOptionWarnings(\n options,\n 'This option requires the Azure Speech API.',\n );\n}\n\nfunction maiOnlyWarnings(options: Record<string, unknown>) {\n return unsupportedOptionWarnings(\n options,\n 'This option requires MAI streaming transcription.',\n );\n}\n\nfunction unsupportedOptionWarnings(\n options: Record<string, unknown>,\n details: string,\n): SharedV4Warning[] {\n return Object.entries(options)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => ({\n type: 'unsupported',\n feature: `providerOptions.azure.${key}`,\n details,\n }));\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/azure",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.94",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/deepseek": "3.0.
|
|
33
|
-
"@ai-sdk/openai": "4.0.
|
|
34
|
-
"@ai-sdk/provider": "4.0.
|
|
35
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
32
|
+
"@ai-sdk/deepseek": "3.0.61",
|
|
33
|
+
"@ai-sdk/openai": "4.0.86",
|
|
34
|
+
"@ai-sdk/provider": "4.0.24",
|
|
35
|
+
"@ai-sdk/provider-utils": "5.0.56"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@ai-sdk/test-server": "2.0.
|
|
38
|
+
"@ai-sdk/test-server": "2.0.4",
|
|
39
39
|
"@types/node": "22.19.19",
|
|
40
40
|
"@vercel/ai-tsconfig": "0.0.0",
|
|
41
|
-
"ai": "7.0.
|
|
41
|
+
"ai": "7.0.130",
|
|
42
42
|
"tsdown": "^0.23.0",
|
|
43
|
-
"typescript": "
|
|
43
|
+
"typescript": "6.0.3",
|
|
44
44
|
"zod": "3.25.76"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
@@ -39,7 +39,7 @@ export class AzureSpeechTranscriptionModel implements TranscriptionModelV4 {
|
|
|
39
39
|
[
|
|
40
40
|
typeof options.audio === 'string'
|
|
41
41
|
? convertBase64ToUint8Array(options.audio)
|
|
42
|
-
: options.audio,
|
|
42
|
+
: (options.audio as Uint8Array<ArrayBuffer>),
|
|
43
43
|
],
|
|
44
44
|
{ type: options.mediaType },
|
|
45
45
|
),
|