@ai-sdk/azure 4.0.0-beta.7 → 4.0.0-beta.76
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 +595 -8
- package/README.md +2 -0
- package/dist/index.d.ts +18 -2
- package/dist/index.js +86 -59
- package/dist/index.js.map +1 -1
- package/docs/04-azure.mdx +87 -24
- package/package.json +16 -15
- package/src/azure-openai-provider-metadata.ts +1 -1
- package/src/azure-openai-provider.ts +82 -23
- package/src/azure-openai-tools.ts +3 -0
- package/src/index.ts +8 -0
- package/dist/index.d.mts +0 -130
- package/dist/index.mjs +0 -140
- package/dist/index.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,62 +1,81 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
VERSION: () => VERSION,
|
|
24
|
-
azure: () => azure,
|
|
25
|
-
createAzure: () => createAzure
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(index_exports);
|
|
28
|
-
|
|
29
1
|
// src/azure-openai-provider.ts
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
import {
|
|
3
|
+
OpenAIChatLanguageModel,
|
|
4
|
+
OpenAICompletionLanguageModel,
|
|
5
|
+
OpenAIEmbeddingModel,
|
|
6
|
+
OpenAIImageModel,
|
|
7
|
+
OpenAIResponsesLanguageModel,
|
|
8
|
+
OpenAISpeechModel,
|
|
9
|
+
OpenAITranscriptionModel
|
|
10
|
+
} from "@ai-sdk/openai/internal";
|
|
11
|
+
import { DeepSeekChatLanguageModel } from "@ai-sdk/deepseek/internal";
|
|
12
|
+
import {
|
|
13
|
+
InvalidArgumentError
|
|
14
|
+
} from "@ai-sdk/provider";
|
|
15
|
+
import {
|
|
16
|
+
loadApiKey,
|
|
17
|
+
loadSetting,
|
|
18
|
+
normalizeHeaders,
|
|
19
|
+
withUserAgentSuffix
|
|
20
|
+
} from "@ai-sdk/provider-utils";
|
|
32
21
|
|
|
33
22
|
// src/azure-openai-tools.ts
|
|
34
|
-
|
|
23
|
+
import {
|
|
24
|
+
codeInterpreter,
|
|
25
|
+
fileSearch,
|
|
26
|
+
imageGeneration,
|
|
27
|
+
webSearch,
|
|
28
|
+
webSearchPreview
|
|
29
|
+
} from "@ai-sdk/openai/internal";
|
|
35
30
|
var azureOpenaiTools = {
|
|
36
|
-
codeInterpreter
|
|
37
|
-
fileSearch
|
|
38
|
-
imageGeneration
|
|
39
|
-
|
|
31
|
+
codeInterpreter,
|
|
32
|
+
fileSearch,
|
|
33
|
+
imageGeneration,
|
|
34
|
+
webSearch,
|
|
35
|
+
webSearchPreview
|
|
40
36
|
};
|
|
41
37
|
|
|
42
38
|
// src/version.ts
|
|
43
|
-
var VERSION = true ? "4.0.0-beta.
|
|
39
|
+
var VERSION = true ? "4.0.0-beta.76" : "0.0.0-test";
|
|
44
40
|
|
|
45
41
|
// src/azure-openai-provider.ts
|
|
46
42
|
function createAzure(options = {}) {
|
|
47
43
|
var _a;
|
|
44
|
+
const tokenProvider = options.tokenProvider;
|
|
45
|
+
if (options.apiKey && tokenProvider) {
|
|
46
|
+
throw new InvalidArgumentError({
|
|
47
|
+
argument: "apiKey/tokenProvider",
|
|
48
|
+
message: "Both apiKey and tokenProvider were provided. Please use only one authentication method."
|
|
49
|
+
});
|
|
50
|
+
}
|
|
48
51
|
const getHeaders = () => {
|
|
49
|
-
const
|
|
50
|
-
"api-key":
|
|
52
|
+
const authHeaders = tokenProvider ? {} : {
|
|
53
|
+
"api-key": loadApiKey({
|
|
51
54
|
apiKey: options.apiKey,
|
|
52
55
|
environmentVariableName: "AZURE_API_KEY",
|
|
53
56
|
description: "Azure OpenAI"
|
|
54
|
-
})
|
|
55
|
-
...options.headers
|
|
57
|
+
})
|
|
56
58
|
};
|
|
57
|
-
return
|
|
59
|
+
return withUserAgentSuffix(
|
|
60
|
+
{
|
|
61
|
+
...authHeaders,
|
|
62
|
+
...options.headers
|
|
63
|
+
},
|
|
64
|
+
`ai-sdk/azure/${VERSION}`
|
|
65
|
+
);
|
|
58
66
|
};
|
|
59
|
-
const
|
|
67
|
+
const fetch = tokenProvider ? async (input, init) => {
|
|
68
|
+
var _a2;
|
|
69
|
+
const headers = normalizeHeaders(init == null ? void 0 : init.headers);
|
|
70
|
+
if (headers.authorization == null) {
|
|
71
|
+
headers.authorization = `Bearer ${await tokenProvider()}`;
|
|
72
|
+
}
|
|
73
|
+
return ((_a2 = options.fetch) != null ? _a2 : globalThis.fetch)(input, {
|
|
74
|
+
...init,
|
|
75
|
+
headers
|
|
76
|
+
});
|
|
77
|
+
} : options.fetch;
|
|
78
|
+
const getResourceName = () => loadSetting({
|
|
60
79
|
settingValue: options.resourceName,
|
|
61
80
|
settingName: "resourceName",
|
|
62
81
|
environmentVariableName: "AZURE_RESOURCE_NAME",
|
|
@@ -75,48 +94,56 @@ function createAzure(options = {}) {
|
|
|
75
94
|
fullUrl.searchParams.set("api-version", apiVersion);
|
|
76
95
|
return fullUrl.toString();
|
|
77
96
|
};
|
|
78
|
-
const createChatModel = (deploymentName) => new
|
|
97
|
+
const createChatModel = (deploymentName) => new OpenAIChatLanguageModel(deploymentName, {
|
|
79
98
|
provider: "azure.chat",
|
|
80
99
|
url,
|
|
81
100
|
headers: getHeaders,
|
|
82
|
-
fetch
|
|
101
|
+
fetch
|
|
102
|
+
});
|
|
103
|
+
const createDeepSeekModel = (deploymentName) => new DeepSeekChatLanguageModel(deploymentName, {
|
|
104
|
+
provider: "azure.deepseek",
|
|
105
|
+
url,
|
|
106
|
+
headers: getHeaders,
|
|
107
|
+
fetch,
|
|
108
|
+
supportsThinking: false
|
|
83
109
|
});
|
|
84
|
-
const createCompletionModel = (modelId) => new
|
|
110
|
+
const createCompletionModel = (modelId) => new OpenAICompletionLanguageModel(modelId, {
|
|
85
111
|
provider: "azure.completion",
|
|
86
112
|
url,
|
|
87
113
|
headers: getHeaders,
|
|
88
|
-
fetch
|
|
114
|
+
fetch
|
|
89
115
|
});
|
|
90
|
-
const createEmbeddingModel = (modelId) => new
|
|
116
|
+
const createEmbeddingModel = (modelId) => new OpenAIEmbeddingModel(modelId, {
|
|
91
117
|
provider: "azure.embeddings",
|
|
92
118
|
headers: getHeaders,
|
|
93
119
|
url,
|
|
94
|
-
fetch
|
|
120
|
+
fetch
|
|
95
121
|
});
|
|
96
|
-
const createResponsesModel = (modelId) => new
|
|
122
|
+
const createResponsesModel = (modelId) => new OpenAIResponsesLanguageModel(modelId, {
|
|
97
123
|
provider: "azure.responses",
|
|
98
124
|
url,
|
|
99
125
|
headers: getHeaders,
|
|
100
|
-
fetch
|
|
126
|
+
fetch,
|
|
127
|
+
// Soft-deprecated. TODO: remove in v8
|
|
101
128
|
fileIdPrefixes: ["assistant-"]
|
|
102
129
|
});
|
|
103
|
-
const createImageModel = (modelId) => new
|
|
130
|
+
const createImageModel = (modelId) => new OpenAIImageModel(modelId, {
|
|
104
131
|
provider: "azure.image",
|
|
105
132
|
url,
|
|
106
133
|
headers: getHeaders,
|
|
107
|
-
fetch
|
|
134
|
+
fetch
|
|
108
135
|
});
|
|
109
|
-
const createTranscriptionModel = (modelId) => new
|
|
136
|
+
const createTranscriptionModel = (modelId) => new OpenAITranscriptionModel(modelId, {
|
|
110
137
|
provider: "azure.transcription",
|
|
111
138
|
url,
|
|
112
139
|
headers: getHeaders,
|
|
113
|
-
fetch
|
|
140
|
+
fetch
|
|
114
141
|
});
|
|
115
|
-
const createSpeechModel = (modelId) => new
|
|
142
|
+
const createSpeechModel = (modelId) => new OpenAISpeechModel(modelId, {
|
|
116
143
|
provider: "azure.speech",
|
|
117
144
|
url,
|
|
118
145
|
headers: getHeaders,
|
|
119
|
-
fetch
|
|
146
|
+
fetch
|
|
120
147
|
});
|
|
121
148
|
const provider = function(deploymentId) {
|
|
122
149
|
if (new.target) {
|
|
@@ -129,6 +156,7 @@ function createAzure(options = {}) {
|
|
|
129
156
|
provider.specificationVersion = "v4";
|
|
130
157
|
provider.languageModel = createResponsesModel;
|
|
131
158
|
provider.chat = createChatModel;
|
|
159
|
+
provider.deepseek = createDeepSeekModel;
|
|
132
160
|
provider.completion = createCompletionModel;
|
|
133
161
|
provider.embedding = createEmbeddingModel;
|
|
134
162
|
provider.embeddingModel = createEmbeddingModel;
|
|
@@ -143,10 +171,9 @@ function createAzure(options = {}) {
|
|
|
143
171
|
return provider;
|
|
144
172
|
}
|
|
145
173
|
var azure = createAzure();
|
|
146
|
-
|
|
147
|
-
0 && (module.exports = {
|
|
174
|
+
export {
|
|
148
175
|
VERSION,
|
|
149
176
|
azure,
|
|
150
177
|
createAzure
|
|
151
|
-
}
|
|
178
|
+
};
|
|
152
179
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/azure-openai-provider.ts","../src/azure-openai-tools.ts","../src/version.ts"],"sourcesContent":["export type {\n OpenAILanguageModelResponsesOptions,\n /** @deprecated Use `OpenAILanguageModelResponsesOptions` instead. */\n OpenAILanguageModelResponsesOptions as OpenAIResponsesProviderOptions,\n OpenAILanguageModelChatOptions,\n /** @deprecated Use `OpenAILanguageModelChatOptions` instead. */\n OpenAILanguageModelChatOptions as OpenAIChatLanguageModelOptions,\n} from '@ai-sdk/openai';\n\nexport { azure, createAzure } from './azure-openai-provider';\nexport type {\n AzureOpenAIProvider,\n AzureOpenAIProviderSettings,\n} from './azure-openai-provider';\nexport type {\n AzureResponsesProviderMetadata,\n AzureResponsesReasoningProviderMetadata,\n AzureResponsesTextProviderMetadata,\n AzureResponsesSourceDocumentProviderMetadata,\n} from './azure-openai-provider-metadata';\nexport { VERSION } from './version';\n","import {\n OpenAIChatLanguageModel,\n OpenAICompletionLanguageModel,\n OpenAIEmbeddingModel,\n OpenAIImageModel,\n OpenAIResponsesLanguageModel,\n OpenAISpeechModel,\n OpenAITranscriptionModel,\n} from '@ai-sdk/openai/internal';\nimport {\n EmbeddingModelV4,\n LanguageModelV4,\n ProviderV4,\n ImageModelV4,\n SpeechModelV4,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n loadSetting,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { azureOpenaiTools } from './azure-openai-tools';\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 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 OpenAI DALL-E model for image generation.\n */\n image(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure OpenAI DALL-E model for image generation.\n */\n imageModel(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure OpenAI model for audio transcription.\n */\n transcription(deploymentId: string): TranscriptionModelV4;\n\n /**\n * Creates an Azure OpenAI model for speech generation.\n */\n speech(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 */\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 a baseURL, the resolved URL is `{baseURL}/v1{path}`.\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Custom api version to use. Defaults to `preview`.\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/**\n * Create an Azure OpenAI provider instance.\n */\nexport function createAzure(\n options: AzureOpenAIProviderSettings = {},\n): AzureOpenAIProvider {\n const getHeaders = () => {\n const baseHeaders = {\n 'api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AZURE_API_KEY',\n description: 'Azure OpenAI',\n }),\n ...options.headers,\n };\n return withUserAgentSuffix(baseHeaders, `ai-sdk/azure/${VERSION}`);\n };\n\n const getResourceName = () =>\n loadSetting({\n settingValue: options.resourceName,\n settingName: 'resourceName',\n environmentVariableName: 'AZURE_RESOURCE_NAME',\n description: 'Azure OpenAI resource name',\n });\n\n const apiVersion = options.apiVersion ?? 'v1';\n\n const url = ({ path, modelId }: { path: string; modelId: string }) => {\n const baseUrlPrefix =\n options.baseURL ?? `https://${getResourceName()}.openai.azure.com/openai`;\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 {\n // Use v1 API format - no deployment ID in URL\n fullUrl = new URL(`${baseUrlPrefix}/v1${path}`);\n }\n\n fullUrl.searchParams.set('api-version', apiVersion);\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: options.fetch,\n });\n\n const createCompletionModel = (modelId: string) =>\n new OpenAICompletionLanguageModel(modelId, {\n provider: 'azure.completion',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (modelId: string) =>\n new OpenAIEmbeddingModel(modelId, {\n provider: 'azure.embeddings',\n headers: getHeaders,\n url,\n fetch: options.fetch,\n });\n\n const createResponsesModel = (modelId: string) =>\n new OpenAIResponsesLanguageModel(modelId, {\n provider: 'azure.responses',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n fileIdPrefixes: ['assistant-'],\n });\n\n const createImageModel = (modelId: string) =>\n new OpenAIImageModel(modelId, {\n provider: 'azure.image',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: string) =>\n new OpenAITranscriptionModel(modelId, {\n provider: 'azure.transcription',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (modelId: string) =>\n new OpenAISpeechModel(modelId, {\n provider: 'azure.speech',\n url,\n headers: getHeaders,\n fetch: options.fetch,\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.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.speech = createSpeechModel;\n provider.tools = azureOpenaiTools;\n return provider;\n}\n\n/**\n * Default Azure OpenAI provider instance.\n */\nexport const azure = createAzure();\n","import {\n codeInterpreter,\n fileSearch,\n imageGeneration,\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 webSearchPreview: typeof webSearchPreview;\n} = {\n codeInterpreter,\n fileSearch,\n imageGeneration,\n webSearchPreview,\n};\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_internal","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/azure-openai-provider.ts","../src/azure-openai-tools.ts","../src/version.ts"],"sourcesContent":["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 type EmbeddingModelV4,\n type LanguageModelV4,\n type ProviderV4,\n type ImageModelV4,\n type SpeechModelV4,\n type TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n loadSetting,\n normalizeHeaders,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { azureOpenaiTools } from './azure-openai-tools';\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 OpenAI DALL-E model for image generation.\n */\n image(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure OpenAI DALL-E model for image generation.\n */\n imageModel(deploymentId: string): ImageModelV4;\n\n /**\n * Creates an Azure OpenAI model for audio transcription.\n */\n transcription(deploymentId: string): TranscriptionModelV4;\n\n /**\n * Creates an Azure OpenAI model for speech generation.\n */\n speech(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 */\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 a baseURL, the resolved URL is `{baseURL}/v1{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 `preview`.\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/**\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 = () => {\n const authHeaders = tokenProvider\n ? {}\n : {\n 'api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AZURE_API_KEY',\n description: '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 loadSetting({\n settingValue: options.resourceName,\n settingName: 'resourceName',\n environmentVariableName: 'AZURE_RESOURCE_NAME',\n description: 'Azure OpenAI resource name',\n });\n\n const apiVersion = options.apiVersion ?? 'v1';\n\n const url = ({ path, modelId }: { path: string; modelId: string }) => {\n const baseUrlPrefix =\n options.baseURL ?? `https://${getResourceName()}.openai.azure.com/openai`;\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 {\n // Use v1 API format - no deployment ID in URL\n fullUrl = new URL(`${baseUrlPrefix}/v1${path}`);\n }\n\n fullUrl.searchParams.set('api-version', apiVersion);\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 supportsThinking: false,\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 // Soft-deprecated. TODO: remove in v8\n fileIdPrefixes: ['assistant-'],\n });\n\n const createImageModel = (modelId: string) =>\n new OpenAIImageModel(modelId, {\n provider: 'azure.image',\n url,\n headers: getHeaders,\n fetch,\n });\n\n const createTranscriptionModel = (modelId: string) =>\n new OpenAITranscriptionModel(modelId, {\n provider: 'azure.transcription',\n url,\n headers: getHeaders,\n fetch,\n });\n\n const createSpeechModel = (modelId: string) =>\n new OpenAISpeechModel(modelId, {\n provider: 'azure.speech',\n url,\n headers: getHeaders,\n fetch,\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.speech = createSpeechModel;\n provider.tools = azureOpenaiTools;\n return provider;\n}\n\n/**\n * Default Azure OpenAI provider instance.\n */\nexport const azure = createAzure();\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","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["_a"]}
|
package/docs/04-azure.mdx
CHANGED
|
@@ -46,6 +46,26 @@ const azure = createAzure({
|
|
|
46
46
|
});
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
For Microsoft Entra ID authentication, you can provide a token provider.
|
|
50
|
+
Install `@azure/identity` separately if you want to use its credential helpers:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { createAzure } from '@ai-sdk/azure';
|
|
54
|
+
import {
|
|
55
|
+
DefaultAzureCredential,
|
|
56
|
+
getBearerTokenProvider,
|
|
57
|
+
} from '@azure/identity';
|
|
58
|
+
|
|
59
|
+
const credential = new DefaultAzureCredential();
|
|
60
|
+
const scope = 'https://cognitiveservices.azure.com/.default';
|
|
61
|
+
const tokenProvider = getBearerTokenProvider(credential, scope);
|
|
62
|
+
|
|
63
|
+
const azure = createAzure({
|
|
64
|
+
resourceName: 'your-resource-name',
|
|
65
|
+
tokenProvider,
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
49
69
|
You can use the following optional settings to customize the OpenAI provider instance:
|
|
50
70
|
|
|
51
71
|
- **resourceName** _string_
|
|
@@ -61,6 +81,11 @@ You can use the following optional settings to customize the OpenAI provider ins
|
|
|
61
81
|
API key that is being sent using the `api-key` header.
|
|
62
82
|
It defaults to the `AZURE_API_KEY` environment variable.
|
|
63
83
|
|
|
84
|
+
- **tokenProvider** _() => Promise<string>_
|
|
85
|
+
|
|
86
|
+
Microsoft Entra ID token provider that returns an access token to be sent using the `Authorization` header.
|
|
87
|
+
When provided, this is used instead of `apiKey`.
|
|
88
|
+
|
|
64
89
|
- **apiVersion** _string_
|
|
65
90
|
|
|
66
91
|
Sets a custom [api version](https://learn.microsoft.com/en-us/azure/ai-services/openai/api-version-deprecation).
|
|
@@ -168,8 +193,9 @@ const messages = [
|
|
|
168
193
|
text: 'What is the capital of the moon?',
|
|
169
194
|
},
|
|
170
195
|
{
|
|
171
|
-
type: '
|
|
172
|
-
|
|
196
|
+
type: 'file',
|
|
197
|
+
mediaType: 'image',
|
|
198
|
+
data: 'https://example.com/image.png',
|
|
173
199
|
providerOptions: {
|
|
174
200
|
openai: { imageDetail: 'low' },
|
|
175
201
|
},
|
|
@@ -260,6 +286,30 @@ The following optional provider options are available for OpenAI chat models:
|
|
|
260
286
|
A unique identifier representing your end-user, which can help OpenAI to
|
|
261
287
|
monitor and detect abuse. Learn more.
|
|
262
288
|
|
|
289
|
+
### DeepSeek Chat Models
|
|
290
|
+
|
|
291
|
+
You can create Azure-hosted DeepSeek chat models using the `.deepseek()` factory method:
|
|
292
|
+
|
|
293
|
+
```ts
|
|
294
|
+
const model = azure.deepseek('your-deepseek-deployment-name');
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Use this factory for Azure DeepSeek models that support DeepSeek's chat
|
|
298
|
+
reasoning fields, such as `deepseek-v4-pro` and `deepseek-v4-flash`. The
|
|
299
|
+
factory maps top-level `reasoning` to DeepSeek `reasoning_effort` request
|
|
300
|
+
settings, and parses streamed `reasoning_content` as AI SDK reasoning parts.
|
|
301
|
+
|
|
302
|
+
```ts
|
|
303
|
+
import { azure, type AzureDeepSeekLanguageModelOptions } from '@ai-sdk/azure';
|
|
304
|
+
import { generateText } from 'ai';
|
|
305
|
+
|
|
306
|
+
const result = generateText({
|
|
307
|
+
model: azure.deepseek('your-deepseek-deployment-name'),
|
|
308
|
+
prompt: 'How many "r"s are in the word "strawberry"?',
|
|
309
|
+
reasoning: 'high',
|
|
310
|
+
});
|
|
311
|
+
```
|
|
312
|
+
|
|
263
313
|
### Responses Models
|
|
264
314
|
|
|
265
315
|
Azure OpenAI uses responses API as default with the `azure(deploymentName)` factory method.
|
|
@@ -361,45 +411,56 @@ The following Azure-specific metadata may be returned:
|
|
|
361
411
|
|
|
362
412
|
#### Web Search Tool
|
|
363
413
|
|
|
364
|
-
The Azure OpenAI responses API supports web search
|
|
414
|
+
The Azure OpenAI responses API supports web search through the `azure.tools.webSearch` tool.
|
|
365
415
|
|
|
366
416
|
```ts
|
|
367
417
|
const result = await generateText({
|
|
368
|
-
model: azure('gpt-
|
|
418
|
+
model: azure('gpt-5'),
|
|
369
419
|
prompt: 'What happened in San Francisco last week?',
|
|
370
420
|
tools: {
|
|
371
|
-
|
|
421
|
+
web_search: azure.tools.webSearch({
|
|
372
422
|
// optional configuration:
|
|
373
|
-
searchContextSize: '
|
|
423
|
+
searchContextSize: 'high',
|
|
374
424
|
userLocation: {
|
|
375
425
|
type: 'approximate',
|
|
376
426
|
city: 'San Francisco',
|
|
377
427
|
region: 'California',
|
|
378
428
|
},
|
|
429
|
+
filters: {
|
|
430
|
+
allowedDomains: ['sfchronicle.com', 'sfgate.com'],
|
|
431
|
+
},
|
|
379
432
|
}),
|
|
380
433
|
},
|
|
381
434
|
// Force web search tool (optional):
|
|
382
|
-
toolChoice: { type: 'tool', toolName: '
|
|
435
|
+
toolChoice: { type: 'tool', toolName: 'web_search' },
|
|
383
436
|
});
|
|
384
437
|
|
|
385
|
-
console.log(result.text);
|
|
386
|
-
|
|
387
438
|
// URL sources directly from `results`
|
|
388
439
|
const sources = result.sources;
|
|
389
|
-
|
|
390
|
-
|
|
440
|
+
|
|
441
|
+
// Or access sources from tool results
|
|
442
|
+
for (const toolResult of result.toolResults) {
|
|
443
|
+
if (toolResult.toolName === 'web_search') {
|
|
444
|
+
console.log('Query:', toolResult.output.action.query);
|
|
445
|
+
console.log('Sources:', toolResult.output.sources);
|
|
446
|
+
// `sources` is an array of object: { type: 'url', url: string }
|
|
447
|
+
}
|
|
391
448
|
}
|
|
392
449
|
```
|
|
393
450
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
451
|
+
The web search tool supports the following configuration options:
|
|
452
|
+
|
|
453
|
+
- **externalWebAccess** _boolean_ - Whether to use external web access for fetching live content. Defaults to `true`.
|
|
454
|
+
- **searchContextSize** _'low' | 'medium' | 'high'_ - Controls the amount of context used for the search. Higher values provide more comprehensive results but may have higher latency and cost.
|
|
455
|
+
- **userLocation** - Optional location information to provide geographically relevant results. Includes `type` (always `'approximate'`), `country`, `city`, `region`, and `timezone`.
|
|
456
|
+
- **filters** - Optional filter configuration to restrict search results.
|
|
457
|
+
- **allowedDomains** _string[]_ - Array of allowed domains for the search. Subdomains of the provided domains are automatically included.
|
|
458
|
+
|
|
459
|
+
For detailed information on configuration options see the [Azure OpenAI Web Search Tool documentation](https://learn.microsoft.com/en-us/azure/foundry/openai/how-to/web-search).
|
|
399
460
|
|
|
400
461
|
<Note>
|
|
401
|
-
|
|
402
|
-
|
|
462
|
+
On Microsoft Foundry environment , Live internet access is not supported. The
|
|
463
|
+
parameter `externalWebAccess` if passed will be ignored.
|
|
403
464
|
</Note>
|
|
404
465
|
|
|
405
466
|
#### File Search Tool
|
|
@@ -593,7 +654,6 @@ This metadata includes the following fields:
|
|
|
593
654
|
If no annotations are present, this property itself may be omitted (`undefined`).
|
|
594
655
|
|
|
595
656
|
Each element in `annotations` is a discriminated union with a required `type` field. Supported types include, for example:
|
|
596
|
-
|
|
597
657
|
- `url_citation`
|
|
598
658
|
- `file_citation`
|
|
599
659
|
- `container_file_citation`
|
|
@@ -914,6 +974,10 @@ const model = azure.image('your-dalle-deployment-name');
|
|
|
914
974
|
Azure OpenAI image models support several additional settings. You can pass them as `providerOptions.openai` when generating the image:
|
|
915
975
|
|
|
916
976
|
```ts
|
|
977
|
+
import { azure } from '@ai-sdk/azure';
|
|
978
|
+
import type { OpenAIImageModelGenerationOptions } from '@ai-sdk/openai';
|
|
979
|
+
import { generateImage } from 'ai';
|
|
980
|
+
|
|
917
981
|
await generateImage({
|
|
918
982
|
model: azure.image('your-dalle-deployment-name'),
|
|
919
983
|
prompt: 'A photorealistic image of a cat astronaut floating in space',
|
|
@@ -921,8 +985,7 @@ await generateImage({
|
|
|
921
985
|
providerOptions: {
|
|
922
986
|
openai: {
|
|
923
987
|
user: 'test-user', // optional unique user identifier
|
|
924
|
-
|
|
925
|
-
},
|
|
988
|
+
} satisfies OpenAIImageModelGenerationOptions,
|
|
926
989
|
},
|
|
927
990
|
});
|
|
928
991
|
```
|
|
@@ -993,7 +1056,7 @@ When using useDeploymentBasedUrls, the default api-version is not valid. You mus
|
|
|
993
1056
|
You can also pass additional provider-specific options using the `providerOptions` argument. For example, supplying the input language in ISO-639-1 (e.g. `en`) format will improve accuracy and latency.
|
|
994
1057
|
|
|
995
1058
|
```ts highlight="6"
|
|
996
|
-
import {
|
|
1059
|
+
import { transcribe } from 'ai';
|
|
997
1060
|
import { azure, type OpenAITranscriptionModelOptions } from '@ai-sdk/azure';
|
|
998
1061
|
import { readFile } from 'fs/promises';
|
|
999
1062
|
|
|
@@ -1054,7 +1117,7 @@ const model = azure.speech('your-tts-deployment-name');
|
|
|
1054
1117
|
|
|
1055
1118
|
```ts
|
|
1056
1119
|
import { azure } from '@ai-sdk/azure';
|
|
1057
|
-
import {
|
|
1120
|
+
import { generateSpeech } from 'ai';
|
|
1058
1121
|
|
|
1059
1122
|
const result = await generateSpeech({
|
|
1060
1123
|
model: azure.speech('your-tts-deployment-name'),
|
|
@@ -1067,7 +1130,7 @@ You can also pass additional provider-specific options using the `providerOption
|
|
|
1067
1130
|
|
|
1068
1131
|
```ts
|
|
1069
1132
|
import { azure, type OpenAISpeechModelOptions } from '@ai-sdk/azure';
|
|
1070
|
-
import {
|
|
1133
|
+
import { generateSpeech } from 'ai';
|
|
1071
1134
|
|
|
1072
1135
|
const result = await generateSpeech({
|
|
1073
1136
|
model: azure.speech('your-tts-deployment-name'),
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/azure",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.76",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"license": "Apache-2.0",
|
|
5
6
|
"sideEffects": false,
|
|
6
7
|
"main": "./dist/index.js",
|
|
7
|
-
"module": "./dist/index.mjs",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"files": [
|
|
10
10
|
"dist/**/*",
|
|
@@ -24,36 +24,39 @@
|
|
|
24
24
|
"./package.json": "./package.json",
|
|
25
25
|
".": {
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
|
-
"import": "./dist/index.
|
|
28
|
-
"
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/
|
|
33
|
-
"@ai-sdk/
|
|
34
|
-
"@ai-sdk/provider
|
|
32
|
+
"@ai-sdk/deepseek": "3.0.0-beta.55",
|
|
33
|
+
"@ai-sdk/openai": "4.0.0-beta.74",
|
|
34
|
+
"@ai-sdk/provider": "4.0.0-beta.19",
|
|
35
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.49"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@types/node": "
|
|
38
|
-
"tsup": "^8",
|
|
38
|
+
"@types/node": "22.19.19",
|
|
39
|
+
"tsup": "^8.5.1",
|
|
39
40
|
"typescript": "5.8.3",
|
|
40
41
|
"zod": "3.25.76",
|
|
41
|
-
"@ai-sdk/test-server": "2.0.0-beta.
|
|
42
|
+
"@ai-sdk/test-server": "2.0.0-beta.7",
|
|
42
43
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
43
44
|
},
|
|
44
45
|
"peerDependencies": {
|
|
45
46
|
"zod": "^3.25.76 || ^4.1.8"
|
|
46
47
|
},
|
|
47
48
|
"engines": {
|
|
48
|
-
"node": ">=
|
|
49
|
+
"node": ">=22"
|
|
49
50
|
},
|
|
50
51
|
"publishConfig": {
|
|
51
|
-
"access": "public"
|
|
52
|
+
"access": "public",
|
|
53
|
+
"provenance": true
|
|
52
54
|
},
|
|
53
55
|
"homepage": "https://ai-sdk.dev/docs",
|
|
54
56
|
"repository": {
|
|
55
57
|
"type": "git",
|
|
56
|
-
"url": "
|
|
58
|
+
"url": "https://github.com/vercel/ai",
|
|
59
|
+
"directory": "packages/azure"
|
|
57
60
|
},
|
|
58
61
|
"bugs": {
|
|
59
62
|
"url": "https://github.com/vercel/ai/issues"
|
|
@@ -65,9 +68,7 @@
|
|
|
65
68
|
"build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
|
|
66
69
|
"build:watch": "pnpm clean && tsup --watch",
|
|
67
70
|
"clean": "del-cli dist docs *.tsbuildinfo",
|
|
68
|
-
"lint": "eslint \"./**/*.ts*\"",
|
|
69
71
|
"type-check": "tsc --build",
|
|
70
|
-
"prettier-check": "prettier --check \"./**/*.ts*\"",
|
|
71
72
|
"test": "pnpm test:node && pnpm test:edge",
|
|
72
73
|
"test:update": "pnpm test:node -u",
|
|
73
74
|
"test:watch": "vitest --config vitest.node.config.js",
|