@ai-sdk/deepinfra 3.0.59 → 3.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @ai-sdk/deepinfra
2
2
 
3
+ ## 3.0.60
4
+
5
+ ### Patch Changes
6
+
7
+ - ede5b89: chore: migrate package builds from tsup to tsdown
8
+ - Updated dependencies [ede5b89]
9
+ - @ai-sdk/openai-compatible@3.0.60
10
+ - @ai-sdk/provider@4.0.20
11
+ - @ai-sdk/provider-utils@5.0.52
12
+
3
13
  ## 3.0.59
4
14
 
5
15
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,85 +1,91 @@
1
- import { ProviderV4, LanguageModelV4, ImageModelV4, EmbeddingModelV4 } from '@ai-sdk/provider';
2
- import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
3
- import { FetchFunction, InferSchema } from '@ai-sdk/provider-utils';
4
- export { OpenAICompatibleErrorData as DeepInfraErrorData } from '@ai-sdk/openai-compatible';
5
-
1
+ import { OpenAICompatibleErrorData as DeepInfraErrorData } from "@ai-sdk/openai-compatible";
2
+ import { FetchFunction, InferSchema } from "@ai-sdk/provider-utils";
3
+ import { EmbeddingModelV4, ImageModelV4, LanguageModelV4, ProviderV4 } from "@ai-sdk/provider";
4
+ //#region src/deepinfra-chat-options.d.ts
6
5
  type DeepInfraChatModelId = '01-ai/Yi-34B-Chat' | 'Austism/chronos-hermes-13b-v2' | 'bigcode/starcoder2-15b-instruct-v0.1' | 'bigcode/starcoder2-15b' | 'codellama/CodeLlama-34b-Instruct-hf' | 'codellama/CodeLlama-70b-Instruct-hf' | 'cognitivecomputations/dolphin-2.6-mixtral-8x7b' | 'cognitivecomputations/dolphin-2.9.1-llama-3-70b' | 'databricks/dbrx-instruct' | 'deepinfra/airoboros-70b' | 'deepseek-ai/DeepSeek-V3' | 'google/codegemma-7b-it' | 'google/gemma-1.1-7b-it' | 'google/gemma-2-27b-it' | 'google/gemma-2-9b-it' | 'Gryphe/MythoMax-L2-13b-turbo' | 'Gryphe/MythoMax-L2-13b' | 'HuggingFaceH4/zephyr-orpo-141b-A35b-v0.1' | 'KoboldAI/LLaMA2-13B-Tiefighter' | 'lizpreciatior/lzlv_70b_fp16_hf' | 'mattshumer/Reflection-Llama-3.1-70B' | 'meta-llama/Llama-2-13b-chat-hf' | 'meta-llama/Llama-2-70b-chat-hf' | 'meta-llama/Llama-2-7b-chat-hf' | 'meta-llama/Llama-3.2-11B-Vision-Instruct' | 'meta-llama/Llama-3.2-1B-Instruct' | 'meta-llama/Llama-3.2-3B-Instruct' | 'meta-llama/Llama-3.2-90B-Vision-Instruct' | 'meta-llama/Llama-3.3-70B-Instruct-Turbo' | 'meta-llama/Llama-3.3-70B-Instruct' | 'meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8' | 'meta-llama/Llama-4-Scout-17B-16E-Instruct' | 'meta-llama/Meta-Llama-3-70B-Instruct' | 'meta-llama/Meta-Llama-3-8B-Instruct' | 'meta-llama/Meta-Llama-3.1-405B-Instruct' | 'meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-70B-Instruct' | 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-8B-Instruct' | 'microsoft/Phi-3-medium-4k-instruct' | 'microsoft/WizardLM-2-7B' | 'microsoft/WizardLM-2-8x22B' | 'mistralai/Mistral-7B-Instruct-v0.1' | 'mistralai/Mistral-7B-Instruct-v0.2' | 'mistralai/Mistral-7B-Instruct-v0.3' | 'mistralai/Mistral-Nemo-Instruct-2407' | 'mistralai/Mixtral-8x22B-Instruct-v0.1' | 'mistralai/Mixtral-8x22B-v0.1' | 'mistralai/Mixtral-8x7B-Instruct-v0.1' | 'NousResearch/Hermes-3-Llama-3.1-405B' | 'nvidia/Llama-3.1-Nemotron-70B-Instruct' | 'nvidia/Nemotron-4-340B-Instruct' | 'openbmb/MiniCPM-Llama3-V-2_5' | 'openchat/openchat_3.5' | 'openchat/openchat-3.6-8b' | 'Phind/Phind-CodeLlama-34B-v2' | 'Qwen/Qwen2-72B-Instruct' | 'Qwen/Qwen2-7B-Instruct' | 'Qwen/Qwen2.5-72B-Instruct' | 'Qwen/Qwen2.5-7B-Instruct' | 'Qwen/Qwen2.5-Coder-32B-Instruct' | 'Qwen/Qwen2.5-Coder-7B' | 'Qwen/QwQ-32B-Preview' | 'Sao10K/L3-70B-Euryale-v2.1' | 'Sao10K/L3-8B-Lunaris-v1' | 'Sao10K/L3.1-70B-Euryale-v2.2' | (string & {});
7
-
6
+ //#endregion
7
+ //#region src/deepinfra-embedding-options.d.ts
8
8
  type DeepInfraEmbeddingModelId = 'BAAI/bge-base-en-v1.5' | 'BAAI/bge-large-en-v1.5' | 'BAAI/bge-m3' | 'intfloat/e5-base-v2' | 'intfloat/e5-large-v2' | 'intfloat/multilingual-e5-large' | 'sentence-transformers/all-MiniLM-L12-v2' | 'sentence-transformers/all-MiniLM-L6-v2' | 'sentence-transformers/all-mpnet-base-v2' | 'sentence-transformers/clip-ViT-B-32' | 'sentence-transformers/clip-ViT-B-32-multilingual-v1' | 'sentence-transformers/multi-qa-mpnet-base-dot-v1' | 'sentence-transformers/paraphrase-MiniLM-L6-v2' | 'shibing624/text2vec-base-chinese' | 'thenlper/gte-base' | 'thenlper/gte-large' | (string & {});
9
-
9
+ //#endregion
10
+ //#region src/deepinfra-completion-options.d.ts
10
11
  type DeepInfraCompletionModelId = DeepInfraChatModelId;
11
-
12
+ //#endregion
13
+ //#region src/deepinfra-image-settings.d.ts
12
14
  type DeepInfraImageModelId = 'stabilityai/sd3.5' | 'black-forest-labs/FLUX-1.1-pro' | 'black-forest-labs/FLUX-1-schnell' | 'black-forest-labs/FLUX-1-dev' | 'black-forest-labs/FLUX-pro' | 'black-forest-labs/FLUX.1-Kontext-dev' | 'black-forest-labs/FLUX.1-Kontext-pro' | 'stabilityai/sd3.5-medium' | 'stabilityai/sdxl-turbo' | (string & {});
13
-
15
+ //#endregion
16
+ //#region src/deepinfra-provider.d.ts
14
17
  interface DeepInfraProviderSettings {
15
- /**
16
- * DeepInfra API key.
17
- */
18
- apiKey?: string;
19
- /**
20
- * Base URL for the API calls.
21
- */
22
- baseURL?: string;
23
- /**
24
- * Custom headers to include in the requests.
25
- */
26
- headers?: Record<string, string>;
27
- /**
28
- * Custom fetch implementation. You can use it as a middleware to intercept requests,
29
- * or to provide a custom fetch implementation for e.g. testing.
30
- */
31
- fetch?: FetchFunction;
18
+ /**
19
+ * DeepInfra API key.
20
+ */
21
+ apiKey?: string;
22
+ /**
23
+ * Base URL for the API calls.
24
+ */
25
+ baseURL?: string;
26
+ /**
27
+ * Custom headers to include in the requests.
28
+ */
29
+ headers?: Record<string, string>;
30
+ /**
31
+ * Custom fetch implementation. You can use it as a middleware to intercept requests,
32
+ * or to provide a custom fetch implementation for e.g. testing.
33
+ */
34
+ fetch?: FetchFunction;
32
35
  }
33
36
  interface DeepInfraProvider extends ProviderV4 {
34
- /**
35
- * Creates a model for text generation.
36
- */
37
- (modelId: DeepInfraChatModelId): LanguageModelV4;
38
- /**
39
- * Creates a chat model for text generation.
40
- */
41
- chatModel(modelId: DeepInfraChatModelId): LanguageModelV4;
42
- /**
43
- * Creates a model for image generation.
44
- */
45
- image(modelId: DeepInfraImageModelId): ImageModelV4;
46
- /**
47
- * Creates a model for image generation.
48
- */
49
- imageModel(modelId: DeepInfraImageModelId): ImageModelV4;
50
- /**
51
- * Creates a chat model for text generation.
52
- */
53
- languageModel(modelId: DeepInfraChatModelId): LanguageModelV4;
54
- /**
55
- * Creates a completion model for text generation.
56
- */
57
- completionModel(modelId: DeepInfraCompletionModelId): LanguageModelV4;
58
- /**
59
- * Creates a embedding model for text generation.
60
- */
61
- embeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;
62
- /**
63
- * @deprecated Use `embeddingModel` instead.
64
- */
65
- textEmbeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;
37
+ /**
38
+ * Creates a model for text generation.
39
+ */
40
+ (modelId: DeepInfraChatModelId): LanguageModelV4;
41
+ /**
42
+ * Creates a chat model for text generation.
43
+ */
44
+ chatModel(modelId: DeepInfraChatModelId): LanguageModelV4;
45
+ /**
46
+ * Creates a model for image generation.
47
+ */
48
+ image(modelId: DeepInfraImageModelId): ImageModelV4;
49
+ /**
50
+ * Creates a model for image generation.
51
+ */
52
+ imageModel(modelId: DeepInfraImageModelId): ImageModelV4;
53
+ /**
54
+ * Creates a chat model for text generation.
55
+ */
56
+ languageModel(modelId: DeepInfraChatModelId): LanguageModelV4;
57
+ /**
58
+ * Creates a completion model for text generation.
59
+ */
60
+ completionModel(modelId: DeepInfraCompletionModelId): LanguageModelV4;
61
+ /**
62
+ * Creates a embedding model for text generation.
63
+ */
64
+ embeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;
65
+ /**
66
+ * @deprecated Use `embeddingModel` instead.
67
+ */
68
+ textEmbeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;
66
69
  }
67
- declare function createDeepInfra(options?: DeepInfraProviderSettings): DeepInfraProvider;
68
- declare const deepInfra: DeepInfraProvider;
69
-
70
- declare const deepInfraImageModelOptionsSchema: _ai_sdk_provider_utils.LazySchema<{
71
- [x: string]: unknown;
72
- negative_prompt?: string | null | undefined;
73
- num_inference_steps?: number | null | undefined;
74
- guidance_scale?: number | null | undefined;
75
- guidance?: number | null | undefined;
76
- response_format?: "b64_json" | null | undefined;
77
- quality?: string | null | undefined;
78
- style?: string | null | undefined;
79
- user?: string | null | undefined;
70
+ export declare function createDeepInfra(options?: DeepInfraProviderSettings): DeepInfraProvider;
71
+ export declare const deepInfra: DeepInfraProvider;
72
+ //#endregion
73
+ //#region src/deepinfra-image-model-options.d.ts
74
+ declare const deepInfraImageModelOptionsSchema: import("@ai-sdk/provider-utils").LazySchema<{
75
+ [x: string]: unknown;
76
+ negative_prompt?: string | null | undefined;
77
+ num_inference_steps?: number | null | undefined;
78
+ guidance_scale?: number | null | undefined;
79
+ guidance?: number | null | undefined;
80
+ response_format?: "b64_json" | null | undefined;
81
+ quality?: string | null | undefined;
82
+ style?: string | null | undefined;
83
+ user?: string | null | undefined;
80
84
  }>;
81
85
  type DeepInfraImageModelOptions = InferSchema<typeof deepInfraImageModelOptionsSchema>;
82
-
83
- declare const VERSION: string;
84
-
85
- export { type DeepInfraImageModelOptions, type DeepInfraProvider, type DeepInfraProviderSettings, VERSION, createDeepInfra, deepInfra, deepInfra as deepinfra };
86
+ //#endregion
87
+ //#region src/version.d.ts
88
+ export declare const VERSION: string;
89
+ //#endregion
90
+ export { type DeepInfraErrorData, type DeepInfraImageModelOptions, type DeepInfraProvider, type DeepInfraProviderSettings, deepInfra as deepinfra };
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/deepinfra-chat-options.ts","../src/deepinfra-embedding-options.ts","../src/deepinfra-completion-options.ts","../src/deepinfra-image-settings.ts","../src/deepinfra-provider.ts","../src/deepinfra-image-model-options.ts","../src/version.ts"],"mappings":";;;;KACY;;;KCAA;;;KCEA,6BAA6B;;;KCF7B;;;UCuBK;;;;EAIf;;;;EAIA;;;;EAIA,UAAU;;;;;EAKV,QAAQ;;UAGO,0BAA0B;;;;GAIxC,SAAS,uBAAuB;;;;EAKjC,UAAU,SAAS,uBAAuB;;;;EAK1C,MAAM,SAAS,wBAAwB;;;;EAKvC,WAAW,SAAS,wBAAwB;;;;EAK5C,cAAc,SAAS,uBAAuB;;;;EAK9C,gBAAgB,SAAS,6BAA6B;;;;EAKtD,eAAe,SAAS,4BAA4B;;;;EAKpD,mBAAmB,SAAS,4BAA4B;;wBAG1C,gBACd,UAAS,4BACR;qBAwEU,WAAS;;;cCzJT,mEAAgC;;;;;;;;;;;KAejC,6BAA6B,mBAChC;;;qBCrBI"}
package/dist/index.js CHANGED
@@ -1,406 +1,310 @@
1
- // src/deepinfra-provider.ts
2
- import {
3
- OpenAICompatibleCompletionLanguageModel,
4
- OpenAICompatibleEmbeddingModel
5
- } from "@ai-sdk/openai-compatible";
6
- import {
7
- loadApiKey,
8
- withoutTrailingSlash,
9
- withUserAgentSuffix
10
- } from "@ai-sdk/provider-utils";
11
-
12
- // src/deepinfra-image-model.ts
13
- import {
14
- combineHeaders,
15
- convertBase64ToUint8Array,
16
- convertToFormData,
17
- createJsonErrorResponseHandler,
18
- createJsonResponseHandler,
19
- downloadBlob,
20
- parseProviderOptions,
21
- postFormDataToApi,
22
- postJsonToApi,
23
- serializeModelOptions,
24
- WORKFLOW_SERIALIZE,
25
- WORKFLOW_DESERIALIZE
26
- } from "@ai-sdk/provider-utils";
27
- import { z as z2 } from "zod/v4";
28
-
29
- // src/deepinfra-image-model-options.ts
30
- import {
31
- lazySchema,
32
- zodSchema
33
- } from "@ai-sdk/provider-utils";
1
+ import { OpenAICompatibleChatLanguageModel, OpenAICompatibleCompletionLanguageModel, OpenAICompatibleEmbeddingModel } from "@ai-sdk/openai-compatible";
2
+ import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToFormData, createJsonErrorResponseHandler, createJsonResponseHandler, downloadBlob, lazySchema, loadApiKey, parseProviderOptions, postFormDataToApi, postJsonToApi, serializeModelOptions, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
34
3
  import { z } from "zod/v4";
35
- var deepInfraImageModelOptionsSchema = lazySchema(
36
- () => zodSchema(
37
- z.looseObject({
38
- negative_prompt: z.string().nullish(),
39
- num_inference_steps: z.number().nullish(),
40
- guidance_scale: z.number().nullish(),
41
- guidance: z.number().nullish(),
42
- response_format: z.enum(["b64_json"]).nullish(),
43
- quality: z.string().nullish(),
44
- style: z.string().nullish(),
45
- user: z.string().nullish()
46
- })
47
- )
48
- );
49
-
50
- // src/deepinfra-image-model.ts
51
- var DeepInfraImageModel = class _DeepInfraImageModel {
52
- constructor(modelId, config) {
53
- this.modelId = modelId;
54
- this.config = config;
55
- this.specificationVersion = "v4";
56
- this.maxImagesPerCall = 1;
57
- }
58
- get supportsFileInputs() {
59
- return [
60
- "stabilityai/sd3.5",
61
- "black-forest-labs/FLUX-1.1-pro",
62
- "black-forest-labs/FLUX-1-schnell",
63
- "black-forest-labs/FLUX-1-dev",
64
- "black-forest-labs/FLUX-pro",
65
- "black-forest-labs/FLUX.1-Kontext-dev",
66
- "black-forest-labs/FLUX.1-Kontext-pro",
67
- "Qwen/Qwen-Image-Edit",
68
- "stabilityai/sd3.5-medium",
69
- "stabilityai/sdxl-turbo"
70
- ].includes(this.modelId) ? true : void 0;
71
- }
72
- get supportsMaskInputs() {
73
- return this.supportsFileInputs;
74
- }
75
- get provider() {
76
- return this.config.provider;
77
- }
78
- static [WORKFLOW_SERIALIZE](model) {
79
- return serializeModelOptions({
80
- modelId: model.modelId,
81
- config: model.config
82
- });
83
- }
84
- static [WORKFLOW_DESERIALIZE](options) {
85
- return new _DeepInfraImageModel(options.modelId, options.config);
86
- }
87
- async doGenerate({
88
- prompt,
89
- n,
90
- size,
91
- aspectRatio,
92
- seed,
93
- providerOptions,
94
- headers,
95
- abortSignal,
96
- files,
97
- mask
98
- }) {
99
- const warnings = [];
100
- const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
101
- const deepInfraOptions = await parseProviderOptions({
102
- provider: "deepinfra",
103
- providerOptions,
104
- schema: deepInfraImageModelOptionsSchema
105
- });
106
- if (files != null && files.length > 0) {
107
- const { value: response2, responseHeaders: responseHeaders2 } = await postFormDataToApi({
108
- url: this.getEditUrl(),
109
- headers: combineHeaders(this.config.headers?.(), headers),
110
- formData: convertToFormData(
111
- {
112
- model: this.modelId,
113
- prompt,
114
- image: await Promise.all(files.map((file) => fileToBlob(file))),
115
- mask: mask != null ? await fileToBlob(mask) : void 0,
116
- n,
117
- size,
118
- ...deepInfraOptions
119
- },
120
- { useArrayBrackets: false }
121
- ),
122
- failedResponseHandler: createJsonErrorResponseHandler({
123
- errorSchema: deepInfraEditErrorSchema,
124
- errorToMessage: (error) => error.error?.message ?? "Unknown error"
125
- }),
126
- successfulResponseHandler: createJsonResponseHandler(
127
- deepInfraEditResponseSchema
128
- ),
129
- abortSignal,
130
- fetch: this.config.fetch
131
- });
132
- return {
133
- images: response2.data.map((item) => item.b64_json),
134
- warnings,
135
- response: {
136
- timestamp: currentDate,
137
- modelId: this.modelId,
138
- headers: responseHeaders2
139
- }
140
- };
141
- }
142
- const splitSize = size?.split("x");
143
- const { value: response, responseHeaders } = await postJsonToApi({
144
- url: `${this.config.baseURL}/${this.modelId}`,
145
- headers: combineHeaders(this.config.headers?.(), headers),
146
- body: {
147
- prompt,
148
- num_images: n,
149
- ...aspectRatio && { aspect_ratio: aspectRatio },
150
- ...splitSize && { width: splitSize[0], height: splitSize[1] },
151
- ...seed != null && { seed },
152
- ...deepInfraOptions
153
- },
154
- failedResponseHandler: createJsonErrorResponseHandler({
155
- errorSchema: deepInfraErrorSchema,
156
- errorToMessage: (error) => error.detail.error
157
- }),
158
- successfulResponseHandler: createJsonResponseHandler(
159
- deepInfraImageResponseSchema
160
- ),
161
- abortSignal,
162
- fetch: this.config.fetch
163
- });
164
- return {
165
- images: response.images.map(
166
- (image) => image.replace(/^data:image\/\w+;base64,/, "")
167
- ),
168
- warnings,
169
- response: {
170
- timestamp: currentDate,
171
- modelId: this.modelId,
172
- headers: responseHeaders
173
- }
174
- };
175
- }
176
- getEditUrl() {
177
- const baseUrl = this.config.baseURL.replace("/inference", "/openai");
178
- return `${baseUrl}/images/edits`;
179
- }
4
+ //#region src/deepinfra-image-model-options.ts
5
+ const deepInfraImageModelOptionsSchema = lazySchema(() => zodSchema(z.looseObject({
6
+ negative_prompt: z.string().nullish(),
7
+ num_inference_steps: z.number().nullish(),
8
+ guidance_scale: z.number().nullish(),
9
+ guidance: z.number().nullish(),
10
+ response_format: z.enum(["b64_json"]).nullish(),
11
+ quality: z.string().nullish(),
12
+ style: z.string().nullish(),
13
+ user: z.string().nullish()
14
+ })));
15
+ //#endregion
16
+ //#region src/deepinfra-image-model.ts
17
+ var DeepInfraImageModel = class DeepInfraImageModel {
18
+ get supportsFileInputs() {
19
+ return [
20
+ "stabilityai/sd3.5",
21
+ "black-forest-labs/FLUX-1.1-pro",
22
+ "black-forest-labs/FLUX-1-schnell",
23
+ "black-forest-labs/FLUX-1-dev",
24
+ "black-forest-labs/FLUX-pro",
25
+ "black-forest-labs/FLUX.1-Kontext-dev",
26
+ "black-forest-labs/FLUX.1-Kontext-pro",
27
+ "Qwen/Qwen-Image-Edit",
28
+ "stabilityai/sd3.5-medium",
29
+ "stabilityai/sdxl-turbo"
30
+ ].includes(this.modelId) ? true : void 0;
31
+ }
32
+ get supportsMaskInputs() {
33
+ return this.supportsFileInputs;
34
+ }
35
+ get provider() {
36
+ return this.config.provider;
37
+ }
38
+ static [WORKFLOW_SERIALIZE](model) {
39
+ return serializeModelOptions({
40
+ modelId: model.modelId,
41
+ config: model.config
42
+ });
43
+ }
44
+ static [WORKFLOW_DESERIALIZE](options) {
45
+ return new DeepInfraImageModel(options.modelId, options.config);
46
+ }
47
+ constructor(modelId, config) {
48
+ this.modelId = modelId;
49
+ this.config = config;
50
+ this.specificationVersion = "v4";
51
+ this.maxImagesPerCall = 1;
52
+ }
53
+ async doGenerate({ prompt, n, size, aspectRatio, seed, providerOptions, headers, abortSignal, files, mask }) {
54
+ const warnings = [];
55
+ const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
56
+ const deepInfraOptions = await parseProviderOptions({
57
+ provider: "deepinfra",
58
+ providerOptions,
59
+ schema: deepInfraImageModelOptionsSchema
60
+ });
61
+ if (files != null && files.length > 0) {
62
+ const { value: response, responseHeaders } = await postFormDataToApi({
63
+ url: this.getEditUrl(),
64
+ headers: combineHeaders(this.config.headers?.(), headers),
65
+ formData: convertToFormData({
66
+ model: this.modelId,
67
+ prompt,
68
+ image: await Promise.all(files.map((file) => fileToBlob(file))),
69
+ mask: mask != null ? await fileToBlob(mask) : void 0,
70
+ n,
71
+ size,
72
+ ...deepInfraOptions
73
+ }, { useArrayBrackets: false }),
74
+ failedResponseHandler: createJsonErrorResponseHandler({
75
+ errorSchema: deepInfraEditErrorSchema,
76
+ errorToMessage: (error) => error.error?.message ?? "Unknown error"
77
+ }),
78
+ successfulResponseHandler: createJsonResponseHandler(deepInfraEditResponseSchema),
79
+ abortSignal,
80
+ fetch: this.config.fetch
81
+ });
82
+ return {
83
+ images: response.data.map((item) => item.b64_json),
84
+ warnings,
85
+ response: {
86
+ timestamp: currentDate,
87
+ modelId: this.modelId,
88
+ headers: responseHeaders
89
+ }
90
+ };
91
+ }
92
+ const splitSize = size?.split("x");
93
+ const { value: response, responseHeaders } = await postJsonToApi({
94
+ url: `${this.config.baseURL}/${this.modelId}`,
95
+ headers: combineHeaders(this.config.headers?.(), headers),
96
+ body: {
97
+ prompt,
98
+ num_images: n,
99
+ ...aspectRatio && { aspect_ratio: aspectRatio },
100
+ ...splitSize && {
101
+ width: splitSize[0],
102
+ height: splitSize[1]
103
+ },
104
+ ...seed != null && { seed },
105
+ ...deepInfraOptions
106
+ },
107
+ failedResponseHandler: createJsonErrorResponseHandler({
108
+ errorSchema: deepInfraErrorSchema,
109
+ errorToMessage: (error) => error.detail.error
110
+ }),
111
+ successfulResponseHandler: createJsonResponseHandler(deepInfraImageResponseSchema),
112
+ abortSignal,
113
+ fetch: this.config.fetch
114
+ });
115
+ return {
116
+ images: response.images.map((image) => image.replace(/^data:image\/\w+;base64,/, "")),
117
+ warnings,
118
+ response: {
119
+ timestamp: currentDate,
120
+ modelId: this.modelId,
121
+ headers: responseHeaders
122
+ }
123
+ };
124
+ }
125
+ getEditUrl() {
126
+ return `${this.config.baseURL.replace("/inference", "/openai")}/images/edits`;
127
+ }
180
128
  };
181
- var deepInfraErrorSchema = z2.object({
182
- detail: z2.object({
183
- error: z2.string()
184
- })
185
- });
186
- var deepInfraImageResponseSchema = z2.object({
187
- images: z2.array(z2.string())
188
- });
189
- var deepInfraEditErrorSchema = z2.object({
190
- error: z2.object({
191
- message: z2.string()
192
- }).optional()
193
- });
194
- var deepInfraEditResponseSchema = z2.object({
195
- data: z2.array(z2.object({ b64_json: z2.string() }))
196
- });
129
+ const deepInfraErrorSchema = z.object({ detail: z.object({ error: z.string() }) });
130
+ const deepInfraImageResponseSchema = z.object({ images: z.array(z.string()) });
131
+ const deepInfraEditErrorSchema = z.object({ error: z.object({ message: z.string() }).optional() });
132
+ const deepInfraEditResponseSchema = z.object({ data: z.array(z.object({ b64_json: z.string() })) });
197
133
  async function fileToBlob(file) {
198
- if (file.type === "url") {
199
- return downloadBlob(file.url);
200
- }
201
- const data = file.data instanceof Uint8Array ? file.data : convertBase64ToUint8Array(file.data);
202
- return new Blob([data], { type: file.mediaType });
134
+ if (file.type === "url") return downloadBlob(file.url);
135
+ const data = file.data instanceof Uint8Array ? file.data : convertBase64ToUint8Array(file.data);
136
+ return new Blob([data], { type: file.mediaType });
203
137
  }
204
-
205
- // src/deepinfra-chat-language-model.ts
206
- import { OpenAICompatibleChatLanguageModel } from "@ai-sdk/openai-compatible";
207
- import {
208
- serializeModelOptions as serializeModelOptions2,
209
- WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE2,
210
- WORKFLOW_DESERIALIZE as WORKFLOW_DESERIALIZE2
211
- } from "@ai-sdk/provider-utils";
212
- var DeepInfraChatLanguageModel = class _DeepInfraChatLanguageModel extends OpenAICompatibleChatLanguageModel {
213
- static [WORKFLOW_SERIALIZE2](model) {
214
- return serializeModelOptions2({
215
- modelId: model.modelId,
216
- config: model.config
217
- });
218
- }
219
- static [WORKFLOW_DESERIALIZE2](options) {
220
- return new _DeepInfraChatLanguageModel(options.modelId, options.config);
221
- }
222
- /**
223
- * Fixes incorrect token usage for Gemini/Gemma models from DeepInfra.
224
- *
225
- * DeepInfra's API returns completion_tokens that don't include reasoning_tokens
226
- * for Gemini/Gemma models, which violates the OpenAI-compatible spec.
227
- * According to the spec, completion_tokens should include reasoning_tokens.
228
- *
229
- * Example of incorrect data from DeepInfra:
230
- * {
231
- * "completion_tokens": 84, // text-only tokens
232
- * "completion_tokens_details": {
233
- * "reasoning_tokens": 1081 // reasoning tokens not included above
234
- * }
235
- * }
236
- *
237
- * This would result in negative text tokens: 84 - 1081 = -997
238
- *
239
- * The fix: If reasoning_tokens > completion_tokens, add reasoning_tokens
240
- * to completion_tokens: 84 + 1081 = 1165
241
- */
242
- fixUsageForGeminiModels(usage) {
243
- if (!usage || !usage.completion_tokens_details?.reasoning_tokens) {
244
- return usage;
245
- }
246
- const completionTokens = usage.completion_tokens ?? 0;
247
- const reasoningTokens = usage.completion_tokens_details.reasoning_tokens;
248
- if (reasoningTokens > completionTokens) {
249
- const correctedCompletionTokens = completionTokens + reasoningTokens;
250
- return {
251
- ...usage,
252
- // Add reasoning_tokens to completion_tokens to get the correct total
253
- completion_tokens: correctedCompletionTokens,
254
- // Update total_tokens if present
255
- total_tokens: usage.total_tokens != null ? usage.total_tokens + reasoningTokens : void 0
256
- };
257
- }
258
- return usage;
259
- }
260
- async doGenerate(options) {
261
- const result = await super.doGenerate(options);
262
- if (result.usage?.raw) {
263
- const fixedRawUsage = this.fixUsageForGeminiModels(result.usage.raw);
264
- if (fixedRawUsage !== result.usage.raw) {
265
- const promptTokens = fixedRawUsage.prompt_tokens ?? 0;
266
- const completionTokens = fixedRawUsage.completion_tokens ?? 0;
267
- const cacheReadTokens = fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;
268
- const reasoningTokens = fixedRawUsage.completion_tokens_details?.reasoning_tokens ?? 0;
269
- return {
270
- ...result,
271
- usage: {
272
- inputTokens: {
273
- total: promptTokens,
274
- noCache: promptTokens - cacheReadTokens,
275
- cacheRead: cacheReadTokens,
276
- cacheWrite: void 0
277
- },
278
- outputTokens: {
279
- total: completionTokens,
280
- text: completionTokens - reasoningTokens,
281
- reasoning: reasoningTokens
282
- },
283
- raw: fixedRawUsage
284
- }
285
- };
286
- }
287
- }
288
- return result;
289
- }
290
- async doStream(options) {
291
- const result = await super.doStream(options);
292
- const originalStream = result.stream;
293
- const fixUsage = this.fixUsageForGeminiModels.bind(this);
294
- const transformedStream = new ReadableStream({
295
- async start(controller) {
296
- const reader = originalStream.getReader();
297
- try {
298
- while (true) {
299
- const { done, value } = await reader.read();
300
- if (done) break;
301
- if (value.type === "finish" && value.usage?.raw) {
302
- const fixedRawUsage = fixUsage(value.usage.raw);
303
- if (fixedRawUsage !== value.usage.raw) {
304
- const promptTokens = fixedRawUsage.prompt_tokens ?? 0;
305
- const completionTokens = fixedRawUsage.completion_tokens ?? 0;
306
- const cacheReadTokens = fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;
307
- const reasoningTokens = fixedRawUsage.completion_tokens_details?.reasoning_tokens ?? 0;
308
- controller.enqueue({
309
- ...value,
310
- usage: {
311
- inputTokens: {
312
- total: promptTokens,
313
- noCache: promptTokens - cacheReadTokens,
314
- cacheRead: cacheReadTokens,
315
- cacheWrite: void 0
316
- },
317
- outputTokens: {
318
- total: completionTokens,
319
- text: completionTokens - reasoningTokens,
320
- reasoning: reasoningTokens
321
- },
322
- raw: fixedRawUsage
323
- }
324
- });
325
- } else {
326
- controller.enqueue(value);
327
- }
328
- } else {
329
- controller.enqueue(value);
330
- }
331
- }
332
- controller.close();
333
- } catch (error) {
334
- controller.error(error);
335
- }
336
- }
337
- });
338
- return {
339
- ...result,
340
- stream: transformedStream
341
- };
342
- }
138
+ //#endregion
139
+ //#region src/deepinfra-chat-language-model.ts
140
+ var DeepInfraChatLanguageModel = class DeepInfraChatLanguageModel extends OpenAICompatibleChatLanguageModel {
141
+ static [WORKFLOW_SERIALIZE](model) {
142
+ return serializeModelOptions({
143
+ modelId: model.modelId,
144
+ config: model.config
145
+ });
146
+ }
147
+ static [WORKFLOW_DESERIALIZE](options) {
148
+ return new DeepInfraChatLanguageModel(options.modelId, options.config);
149
+ }
150
+ /**
151
+ * Fixes incorrect token usage for Gemini/Gemma models from DeepInfra.
152
+ *
153
+ * DeepInfra's API returns completion_tokens that don't include reasoning_tokens
154
+ * for Gemini/Gemma models, which violates the OpenAI-compatible spec.
155
+ * According to the spec, completion_tokens should include reasoning_tokens.
156
+ *
157
+ * Example of incorrect data from DeepInfra:
158
+ * {
159
+ * "completion_tokens": 84, // text-only tokens
160
+ * "completion_tokens_details": {
161
+ * "reasoning_tokens": 1081 // reasoning tokens not included above
162
+ * }
163
+ * }
164
+ *
165
+ * This would result in negative text tokens: 84 - 1081 = -997
166
+ *
167
+ * The fix: If reasoning_tokens > completion_tokens, add reasoning_tokens
168
+ * to completion_tokens: 84 + 1081 = 1165
169
+ */
170
+ fixUsageForGeminiModels(usage) {
171
+ if (!usage || !usage.completion_tokens_details?.reasoning_tokens) return usage;
172
+ const completionTokens = usage.completion_tokens ?? 0;
173
+ const reasoningTokens = usage.completion_tokens_details.reasoning_tokens;
174
+ if (reasoningTokens > completionTokens) {
175
+ const correctedCompletionTokens = completionTokens + reasoningTokens;
176
+ return {
177
+ ...usage,
178
+ completion_tokens: correctedCompletionTokens,
179
+ total_tokens: usage.total_tokens != null ? usage.total_tokens + reasoningTokens : void 0
180
+ };
181
+ }
182
+ return usage;
183
+ }
184
+ async doGenerate(options) {
185
+ const result = await super.doGenerate(options);
186
+ if (result.usage?.raw) {
187
+ const fixedRawUsage = this.fixUsageForGeminiModels(result.usage.raw);
188
+ if (fixedRawUsage !== result.usage.raw) {
189
+ const promptTokens = fixedRawUsage.prompt_tokens ?? 0;
190
+ const completionTokens = fixedRawUsage.completion_tokens ?? 0;
191
+ const cacheReadTokens = fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;
192
+ const reasoningTokens = fixedRawUsage.completion_tokens_details?.reasoning_tokens ?? 0;
193
+ return {
194
+ ...result,
195
+ usage: {
196
+ inputTokens: {
197
+ total: promptTokens,
198
+ noCache: promptTokens - cacheReadTokens,
199
+ cacheRead: cacheReadTokens,
200
+ cacheWrite: void 0
201
+ },
202
+ outputTokens: {
203
+ total: completionTokens,
204
+ text: completionTokens - reasoningTokens,
205
+ reasoning: reasoningTokens
206
+ },
207
+ raw: fixedRawUsage
208
+ }
209
+ };
210
+ }
211
+ }
212
+ return result;
213
+ }
214
+ async doStream(options) {
215
+ const result = await super.doStream(options);
216
+ const originalStream = result.stream;
217
+ const fixUsage = this.fixUsageForGeminiModels.bind(this);
218
+ const transformedStream = new ReadableStream({ async start(controller) {
219
+ const reader = originalStream.getReader();
220
+ try {
221
+ while (true) {
222
+ const { done, value } = await reader.read();
223
+ if (done) break;
224
+ if (value.type === "finish" && value.usage?.raw) {
225
+ const fixedRawUsage = fixUsage(value.usage.raw);
226
+ if (fixedRawUsage !== value.usage.raw) {
227
+ const promptTokens = fixedRawUsage.prompt_tokens ?? 0;
228
+ const completionTokens = fixedRawUsage.completion_tokens ?? 0;
229
+ const cacheReadTokens = fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;
230
+ const reasoningTokens = fixedRawUsage.completion_tokens_details?.reasoning_tokens ?? 0;
231
+ controller.enqueue({
232
+ ...value,
233
+ usage: {
234
+ inputTokens: {
235
+ total: promptTokens,
236
+ noCache: promptTokens - cacheReadTokens,
237
+ cacheRead: cacheReadTokens,
238
+ cacheWrite: void 0
239
+ },
240
+ outputTokens: {
241
+ total: completionTokens,
242
+ text: completionTokens - reasoningTokens,
243
+ reasoning: reasoningTokens
244
+ },
245
+ raw: fixedRawUsage
246
+ }
247
+ });
248
+ } else controller.enqueue(value);
249
+ } else controller.enqueue(value);
250
+ }
251
+ controller.close();
252
+ } catch (error) {
253
+ controller.error(error);
254
+ }
255
+ } });
256
+ return {
257
+ ...result,
258
+ stream: transformedStream
259
+ };
260
+ }
343
261
  };
344
-
345
- // src/version.ts
346
- var VERSION = true ? "3.0.59" : "0.0.0-test";
347
-
348
- // src/deepinfra-provider.ts
262
+ //#endregion
263
+ //#region src/version.ts
264
+ const VERSION = "3.0.60";
265
+ //#endregion
266
+ //#region src/deepinfra-provider.ts
349
267
  function createDeepInfra(options = {}) {
350
- const baseURL = withoutTrailingSlash(
351
- options.baseURL ?? "https://api.deepinfra.com/v1"
352
- );
353
- const getHeaders = () => withUserAgentSuffix(
354
- {
355
- Authorization: `Bearer ${loadApiKey({
356
- apiKey: options.apiKey,
357
- environmentVariableName: "DEEPINFRA_API_KEY",
358
- description: "DeepInfra's API key"
359
- })}`,
360
- ...options.headers
361
- },
362
- `ai-sdk-deepinfra/${VERSION}`
363
- );
364
- const getCommonModelConfig = (modelType) => ({
365
- provider: `deepinfra.${modelType}`,
366
- url: ({ path }) => `${baseURL}/openai${path}`,
367
- headers: getHeaders,
368
- fetch: options.fetch
369
- });
370
- const createChatModel = (modelId) => {
371
- return new DeepInfraChatLanguageModel(modelId, {
372
- ...getCommonModelConfig("chat"),
373
- supportsStructuredOutputs: true
374
- });
375
- };
376
- const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(
377
- modelId,
378
- getCommonModelConfig("completion")
379
- );
380
- const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(
381
- modelId,
382
- getCommonModelConfig("embedding")
383
- );
384
- const createImageModel = (modelId) => new DeepInfraImageModel(modelId, {
385
- ...getCommonModelConfig("image"),
386
- baseURL: baseURL ? `${baseURL}/inference` : "https://api.deepinfra.com/v1/inference"
387
- });
388
- const provider = (modelId) => createChatModel(modelId);
389
- provider.specificationVersion = "v4";
390
- provider.completionModel = createCompletionModel;
391
- provider.chatModel = createChatModel;
392
- provider.image = createImageModel;
393
- provider.imageModel = createImageModel;
394
- provider.languageModel = createChatModel;
395
- provider.embeddingModel = createEmbeddingModel;
396
- provider.textEmbeddingModel = createEmbeddingModel;
397
- return provider;
268
+ const baseURL = withoutTrailingSlash(options.baseURL ?? "https://api.deepinfra.com/v1");
269
+ const getHeaders = () => withUserAgentSuffix({
270
+ Authorization: `Bearer ${loadApiKey({
271
+ apiKey: options.apiKey,
272
+ environmentVariableName: "DEEPINFRA_API_KEY",
273
+ description: "DeepInfra's API key"
274
+ })}`,
275
+ ...options.headers
276
+ }, `ai-sdk-deepinfra/${VERSION}`);
277
+ const getCommonModelConfig = (modelType) => ({
278
+ provider: `deepinfra.${modelType}`,
279
+ url: ({ path }) => `${baseURL}/openai${path}`,
280
+ headers: getHeaders,
281
+ fetch: options.fetch
282
+ });
283
+ const createChatModel = (modelId) => {
284
+ return new DeepInfraChatLanguageModel(modelId, {
285
+ ...getCommonModelConfig("chat"),
286
+ supportsStructuredOutputs: true
287
+ });
288
+ };
289
+ const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(modelId, getCommonModelConfig("completion"));
290
+ const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(modelId, getCommonModelConfig("embedding"));
291
+ const createImageModel = (modelId) => new DeepInfraImageModel(modelId, {
292
+ ...getCommonModelConfig("image"),
293
+ baseURL: baseURL ? `${baseURL}/inference` : "https://api.deepinfra.com/v1/inference"
294
+ });
295
+ const provider = (modelId) => createChatModel(modelId);
296
+ provider.specificationVersion = "v4";
297
+ provider.completionModel = createCompletionModel;
298
+ provider.chatModel = createChatModel;
299
+ provider.image = createImageModel;
300
+ provider.imageModel = createImageModel;
301
+ provider.languageModel = createChatModel;
302
+ provider.embeddingModel = createEmbeddingModel;
303
+ provider.textEmbeddingModel = createEmbeddingModel;
304
+ return provider;
398
305
  }
399
- var deepInfra = createDeepInfra();
400
- export {
401
- VERSION,
402
- createDeepInfra,
403
- deepInfra,
404
- deepInfra as deepinfra
405
- };
306
+ const deepInfra = createDeepInfra();
307
+ //#endregion
308
+ export { VERSION, createDeepInfra, deepInfra, deepInfra as deepinfra };
309
+
406
310
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deepinfra-provider.ts","../src/deepinfra-image-model.ts","../src/deepinfra-image-model-options.ts","../src/deepinfra-chat-language-model.ts","../src/version.ts"],"sourcesContent":["import type {\n LanguageModelV4,\n EmbeddingModelV4,\n ProviderV4,\n ImageModelV4,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport type { DeepInfraChatModelId } from './deepinfra-chat-options';\nimport type { DeepInfraEmbeddingModelId } from './deepinfra-embedding-options';\nimport type { DeepInfraCompletionModelId } from './deepinfra-completion-options';\nimport type { DeepInfraImageModelId } from './deepinfra-image-settings';\nimport { DeepInfraImageModel } from './deepinfra-image-model';\nimport { DeepInfraChatLanguageModel } from './deepinfra-chat-language-model';\nimport { VERSION } from './version';\n\nexport interface DeepInfraProviderSettings {\n /**\n * DeepInfra API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\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\nexport interface DeepInfraProvider extends ProviderV4 {\n /**\n * Creates a model for text generation.\n */\n (modelId: DeepInfraChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: DeepInfraChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: DeepInfraImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: DeepInfraImageModelId): ImageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n languageModel(modelId: DeepInfraChatModelId): LanguageModelV4;\n\n /**\n * Creates a completion model for text generation.\n */\n completionModel(modelId: DeepInfraCompletionModelId): LanguageModelV4;\n\n /**\n * Creates a embedding model for text generation.\n */\n embeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;\n}\n\nexport function createDeepInfra(\n options: DeepInfraProviderSettings = {},\n): DeepInfraProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepinfra.com/v1',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPINFRA_API_KEY',\n description: \"DeepInfra's API key\",\n })}`,\n ...options.headers,\n },\n `ai-sdk-deepinfra/${VERSION}`,\n );\n\n interface CommonModelConfig {\n provider: string;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `deepinfra.${modelType}`,\n url: ({ path }) => `${baseURL}/openai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (modelId: DeepInfraChatModelId) => {\n return new DeepInfraChatLanguageModel(modelId, {\n ...getCommonModelConfig('chat'),\n supportsStructuredOutputs: true,\n });\n };\n\n const createCompletionModel = (modelId: DeepInfraCompletionModelId) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n getCommonModelConfig('completion'),\n );\n\n const createEmbeddingModel = (modelId: DeepInfraEmbeddingModelId) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig('embedding'),\n );\n\n const createImageModel = (modelId: DeepInfraImageModelId) =>\n new DeepInfraImageModel(modelId, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL\n ? `${baseURL}/inference`\n : 'https://api.deepinfra.com/v1/inference',\n });\n\n const provider = (modelId: DeepInfraChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.languageModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n return provider;\n}\n\nexport const deepInfra = createDeepInfra();\n","import type {\n ImageModelV4,\n ImageModelV4File,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertToFormData,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n downloadBlob,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n deepInfraImageModelOptionsSchema,\n type DeepInfraImageModelOptions,\n} from './deepinfra-image-model-options';\nimport type { DeepInfraImageModelId } from './deepinfra-image-settings';\n\ninterface DeepInfraImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class DeepInfraImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get supportsFileInputs(): boolean | undefined {\n return [\n 'stabilityai/sd3.5',\n 'black-forest-labs/FLUX-1.1-pro',\n 'black-forest-labs/FLUX-1-schnell',\n 'black-forest-labs/FLUX-1-dev',\n 'black-forest-labs/FLUX-pro',\n 'black-forest-labs/FLUX.1-Kontext-dev',\n 'black-forest-labs/FLUX.1-Kontext-pro',\n 'Qwen/Qwen-Image-Edit',\n 'stabilityai/sd3.5-medium',\n 'stabilityai/sdxl-turbo',\n ].includes(this.modelId)\n ? true\n : undefined;\n }\n\n get supportsMaskInputs(): boolean | undefined {\n return this.supportsFileInputs;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: DeepInfraImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: DeepInfraImageModelId;\n config: DeepInfraImageModelConfig;\n }) {\n return new DeepInfraImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: DeepInfraImageModelId,\n private config: DeepInfraImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const warnings: Array<SharedV4Warning> = [];\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const deepInfraOptions = (await parseProviderOptions({\n provider: 'deepinfra',\n providerOptions,\n schema: deepInfraImageModelOptionsSchema,\n })) as DeepInfraImageModelOptions | undefined;\n\n // Image editing mode - use OpenAI-compatible /images/edits endpoint\n if (files != null && files.length > 0) {\n const { value: response, responseHeaders } = await postFormDataToApi({\n url: this.getEditUrl(),\n headers: combineHeaders(this.config.headers?.(), headers),\n formData: convertToFormData<DeepInfraFormDataInput>(\n {\n model: this.modelId,\n prompt,\n image: await Promise.all(files.map(file => fileToBlob(file))),\n mask: mask != null ? await fileToBlob(mask) : undefined,\n n,\n size,\n ...deepInfraOptions,\n },\n { useArrayBrackets: false },\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraEditErrorSchema,\n errorToMessage: error => error.error?.message ?? 'Unknown error',\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraEditResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.data.map(item => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n // Standard image generation mode\n // Some deepinfra models support size while others support aspect ratio.\n // Allow passing either and leave it up to the server to validate.\n const splitSize = size?.split('x');\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n prompt,\n num_images: n,\n ...(aspectRatio && { aspect_ratio: aspectRatio }),\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(seed != null && { seed }),\n ...deepInfraOptions,\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraErrorSchema,\n errorToMessage: error => error.detail.error,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.images.map(image =>\n image.replace(/^data:image\\/\\w+;base64,/, ''),\n ),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n private getEditUrl(): string {\n // Use OpenAI-compatible endpoint for image editing\n // baseURL is typically https://api.deepinfra.com/v1/inference\n // We need to use https://api.deepinfra.com/v1/openai/images/edits\n const baseUrl = this.config.baseURL.replace('/inference', '/openai');\n return `${baseUrl}/images/edits`;\n }\n}\n\nexport const deepInfraErrorSchema = z.object({\n detail: z.object({\n error: z.string(),\n }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepInfraImageResponseSchema = z.object({\n images: z.array(z.string()),\n});\n\n// Schema for OpenAI-compatible image edit endpoint errors\nexport const deepInfraEditErrorSchema = z.object({\n error: z\n .object({\n message: z.string(),\n })\n .optional(),\n});\n\n// Schema for OpenAI-compatible image edit endpoint response\nexport const deepInfraEditResponseSchema = z.object({\n data: z.array(z.object({ b64_json: z.string() })),\n});\n\ntype DeepInfraFormDataInput = {\n model: string;\n prompt: string | undefined;\n image: Blob | Blob[];\n mask?: Blob;\n n: number;\n size: `${number}x${number}` | undefined;\n [key: string]: unknown;\n};\n\nasync function fileToBlob(file: ImageModelV4File): Promise<Blob> {\n if (file.type === 'url') {\n return downloadBlob(file.url);\n }\n\n const data =\n file.data instanceof Uint8Array\n ? file.data\n : convertBase64ToUint8Array(file.data);\n\n return new Blob([data as BlobPart], { type: file.mediaType });\n}\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const deepInfraImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n negative_prompt: z.string().nullish(),\n num_inference_steps: z.number().nullish(),\n guidance_scale: z.number().nullish(),\n guidance: z.number().nullish(),\n response_format: z.enum(['b64_json']).nullish(),\n quality: z.string().nullish(),\n style: z.string().nullish(),\n user: z.string().nullish(),\n }),\n ),\n);\n\nexport type DeepInfraImageModelOptions = InferSchema<\n typeof deepInfraImageModelOptionsSchema\n>;\n","import type {\n LanguageModelV4CallOptions,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamResult,\n} from '@ai-sdk/provider';\nimport { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport {\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\ntype DeepInfraChatConfig = {\n provider: string;\n url: (options: { path: string; modelId?: string }) => string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n supportsStructuredOutputs?: boolean;\n};\n\nexport class DeepInfraChatLanguageModel extends OpenAICompatibleChatLanguageModel {\n static [WORKFLOW_SERIALIZE](model: DeepInfraChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: DeepInfraChatConfig;\n }) {\n return new DeepInfraChatLanguageModel(options.modelId, options.config);\n }\n\n /**\n * Fixes incorrect token usage for Gemini/Gemma models from DeepInfra.\n *\n * DeepInfra's API returns completion_tokens that don't include reasoning_tokens\n * for Gemini/Gemma models, which violates the OpenAI-compatible spec.\n * According to the spec, completion_tokens should include reasoning_tokens.\n *\n * Example of incorrect data from DeepInfra:\n * {\n * \"completion_tokens\": 84, // text-only tokens\n * \"completion_tokens_details\": {\n * \"reasoning_tokens\": 1081 // reasoning tokens not included above\n * }\n * }\n *\n * This would result in negative text tokens: 84 - 1081 = -997\n *\n * The fix: If reasoning_tokens > completion_tokens, add reasoning_tokens\n * to completion_tokens: 84 + 1081 = 1165\n */\n private fixUsageForGeminiModels(usage: any): typeof usage {\n if (!usage || !usage.completion_tokens_details?.reasoning_tokens) {\n return usage;\n }\n\n const completionTokens = usage.completion_tokens ?? 0;\n const reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n\n // If reasoning tokens exceed completion tokens, the API data is incorrect\n // DeepInfra is returning only text tokens in completion_tokens, not including reasoning\n if (reasoningTokens > completionTokens) {\n const correctedCompletionTokens = completionTokens + reasoningTokens;\n\n return {\n ...usage,\n // Add reasoning_tokens to completion_tokens to get the correct total\n completion_tokens: correctedCompletionTokens,\n // Update total_tokens if present\n total_tokens:\n usage.total_tokens != null\n ? usage.total_tokens + reasoningTokens\n : undefined,\n };\n }\n\n return usage;\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const result = await super.doGenerate(options);\n\n // Fix usage if needed\n if (result.usage?.raw) {\n const fixedRawUsage = this.fixUsageForGeminiModels(result.usage.raw);\n if (fixedRawUsage !== result.usage.raw) {\n // Recalculate usage with fixed data\n const promptTokens = fixedRawUsage.prompt_tokens ?? 0;\n const completionTokens = fixedRawUsage.completion_tokens ?? 0;\n const cacheReadTokens =\n fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;\n const reasoningTokens =\n fixedRawUsage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n ...result,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: fixedRawUsage,\n },\n };\n }\n }\n\n return result;\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const result = await super.doStream(options);\n\n // Wrap the stream to fix usage in the final chunk\n const originalStream = result.stream;\n const fixUsage = this.fixUsageForGeminiModels.bind(this);\n\n const transformedStream = new ReadableStream({\n async start(controller) {\n const reader = originalStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n // Fix usage in finish chunks\n if (value.type === 'finish' && value.usage?.raw) {\n const fixedRawUsage = fixUsage(value.usage.raw);\n if (fixedRawUsage !== value.usage.raw) {\n const promptTokens = fixedRawUsage.prompt_tokens ?? 0;\n const completionTokens = fixedRawUsage.completion_tokens ?? 0;\n const cacheReadTokens =\n fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;\n const reasoningTokens =\n fixedRawUsage.completion_tokens_details?.reasoning_tokens ??\n 0;\n\n controller.enqueue({\n ...value,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: fixedRawUsage,\n },\n });\n } else {\n controller.enqueue(value);\n }\n } else {\n controller.enqueue(value);\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n\n return {\n ...result,\n stream: transformedStream,\n };\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";AAMA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;;;ACVP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,KAAAA,UAAS;;;ACpBlB;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,SAAS;AAEX,IAAM,mCAAmC;AAAA,EAAW,MACzD;AAAA,IACE,EAAE,YAAY;AAAA,MACZ,iBAAiB,EAAE,OAAO,EAAE,QAAQ;AAAA,MACpC,qBAAqB,EAAE,OAAO,EAAE,QAAQ;AAAA,MACxC,gBAAgB,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnC,UAAU,EAAE,OAAO,EAAE,QAAQ;AAAA,MAC7B,iBAAiB,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ;AAAA,MAC9C,SAAS,EAAE,OAAO,EAAE,QAAQ;AAAA,MAC5B,OAAO,EAAE,OAAO,EAAE,QAAQ;AAAA,MAC1B,MAAM,EAAE,OAAO,EAAE,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACH;AACF;;;ADiBO,IAAM,sBAAN,MAAM,qBAA4C;AAAA,EA2CvD,YACW,SACD,QACR;AAFS;AACD;AA5CV,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAAA,EA4CzB;AAAA,EA1CH,IAAI,qBAA0C;AAC5C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,SAAS,KAAK,OAAO,IACnB,OACA;AAAA,EACN;AAAA,EAEA,IAAI,qBAA0C;AAC5C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQ,kBAAkB,EAAE,OAA4B;AACtD,WAAO,sBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,oBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,qBAAoB,QAAQ,SAAS,QAAQ,MAAM;AAAA,EAChE;AAAA,EAOA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AACA,UAAM,WAAmC,CAAC;AAC1C,UAAM,cAAc,KAAK,OAAO,WAAW,cAAc,KAAK,oBAAI,KAAK;AACvE,UAAM,mBAAoB,MAAM,qBAAqB;AAAA,MACnD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAGD,QAAI,SAAS,QAAQ,MAAM,SAAS,GAAG;AACrC,YAAM,EAAE,OAAOC,WAAU,iBAAAC,iBAAgB,IAAI,MAAM,kBAAkB;AAAA,QACnE,KAAK,KAAK,WAAW;AAAA,QACrB,SAAS,eAAe,KAAK,OAAO,UAAU,GAAG,OAAO;AAAA,QACxD,UAAU;AAAA,UACR;AAAA,YACE,OAAO,KAAK;AAAA,YACZ;AAAA,YACA,OAAO,MAAM,QAAQ,IAAI,MAAM,IAAI,UAAQ,WAAW,IAAI,CAAC,CAAC;AAAA,YAC5D,MAAM,QAAQ,OAAO,MAAM,WAAW,IAAI,IAAI;AAAA,YAC9C;AAAA,YACA;AAAA,YACA,GAAG;AAAA,UACL;AAAA,UACA,EAAE,kBAAkB,MAAM;AAAA,QAC5B;AAAA,QACA,uBAAuB,+BAA+B;AAAA,UACpD,aAAa;AAAA,UACb,gBAAgB,WAAS,MAAM,OAAO,WAAW;AAAA,QACnD,CAAC;AAAA,QACD,2BAA2B;AAAA,UACzB;AAAA,QACF;AAAA,QACA;AAAA,QACA,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,QACL,QAAQD,UAAS,KAAK,IAAI,UAAQ,KAAK,QAAQ;AAAA,QAC/C;AAAA,QACA,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,KAAK;AAAA,UACd,SAASC;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAKA,UAAM,YAAY,MAAM,MAAM,GAAG;AACjC,UAAM,EAAE,OAAO,UAAU,gBAAgB,IAAI,MAAM,cAAc;AAAA,MAC/D,KAAK,GAAG,KAAK,OAAO,OAAO,IAAI,KAAK,OAAO;AAAA,MAC3C,SAAS,eAAe,KAAK,OAAO,UAAU,GAAG,OAAO;AAAA,MACxD,MAAM;AAAA,QACJ;AAAA,QACA,YAAY;AAAA,QACZ,GAAI,eAAe,EAAE,cAAc,YAAY;AAAA,QAC/C,GAAI,aAAa,EAAE,OAAO,UAAU,CAAC,GAAG,QAAQ,UAAU,CAAC,EAAE;AAAA,QAC7D,GAAI,QAAQ,QAAQ,EAAE,KAAK;AAAA,QAC3B,GAAG;AAAA,MACL;AAAA,MACA,uBAAuB,+BAA+B;AAAA,QACpD,aAAa;AAAA,QACb,gBAAgB,WAAS,MAAM,OAAO;AAAA,MACxC,CAAC;AAAA,MACD,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,QAAQ,SAAS,OAAO;AAAA,QAAI,WAC1B,MAAM,QAAQ,4BAA4B,EAAE;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAqB;AAI3B,UAAM,UAAU,KAAK,OAAO,QAAQ,QAAQ,cAAc,SAAS;AACnE,WAAO,GAAG,OAAO;AAAA,EACnB;AACF;AAEO,IAAM,uBAAuBC,GAAE,OAAO;AAAA,EAC3C,QAAQA,GAAE,OAAO;AAAA,IACf,OAAOA,GAAE,OAAO;AAAA,EAClB,CAAC;AACH,CAAC;AAIM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAC5B,CAAC;AAGM,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAC/C,OAAOA,GACJ,OAAO;AAAA,IACN,SAASA,GAAE,OAAO;AAAA,EACpB,CAAC,EACA,SAAS;AACd,CAAC;AAGM,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAClD,MAAMA,GAAE,MAAMA,GAAE,OAAO,EAAE,UAAUA,GAAE,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAYD,eAAe,WAAW,MAAuC;AAC/D,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO,aAAa,KAAK,GAAG;AAAA,EAC9B;AAEA,QAAM,OACJ,KAAK,gBAAgB,aACjB,KAAK,OACL,0BAA0B,KAAK,IAAI;AAEzC,SAAO,IAAI,KAAK,CAAC,IAAgB,GAAG,EAAE,MAAM,KAAK,UAAU,CAAC;AAC9D;;;AE5OA,SAAS,yCAAyC;AAClD;AAAA,EACE,yBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;AASA,IAAM,6BAAN,MAAM,oCAAmC,kCAAkC;AAAA,EAChF,QAAQD,mBAAkB,EAAE,OAAmC;AAC7D,WAAOD,uBAAsB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQE,qBAAoB,EAAE,SAG3B;AACD,WAAO,IAAI,4BAA2B,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBQ,wBAAwB,OAA0B;AACxD,QAAI,CAAC,SAAS,CAAC,MAAM,2BAA2B,kBAAkB;AAChE,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,MAAM,qBAAqB;AACpD,UAAM,kBAAkB,MAAM,0BAA0B;AAIxD,QAAI,kBAAkB,kBAAkB;AACtC,YAAM,4BAA4B,mBAAmB;AAErD,aAAO;AAAA,QACL,GAAG;AAAA;AAAA,QAEH,mBAAmB;AAAA;AAAA,QAEnB,cACE,MAAM,gBAAgB,OAClB,MAAM,eAAe,kBACrB;AAAA,MACR;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WACJ,SACwC;AACxC,UAAM,SAAS,MAAM,MAAM,WAAW,OAAO;AAG7C,QAAI,OAAO,OAAO,KAAK;AACrB,YAAM,gBAAgB,KAAK,wBAAwB,OAAO,MAAM,GAAG;AACnE,UAAI,kBAAkB,OAAO,MAAM,KAAK;AAEtC,cAAM,eAAe,cAAc,iBAAiB;AACpD,cAAM,mBAAmB,cAAc,qBAAqB;AAC5D,cAAM,kBACJ,cAAc,uBAAuB,iBAAiB;AACxD,cAAM,kBACJ,cAAc,2BAA2B,oBAAoB;AAE/D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,OAAO;AAAA,YACL,aAAa;AAAA,cACX,OAAO;AAAA,cACP,SAAS,eAAe;AAAA,cACxB,WAAW;AAAA,cACX,YAAY;AAAA,YACd;AAAA,YACA,cAAc;AAAA,cACZ,OAAO;AAAA,cACP,MAAM,mBAAmB;AAAA,cACzB,WAAW;AAAA,YACb;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SACJ,SACsC;AACtC,UAAM,SAAS,MAAM,MAAM,SAAS,OAAO;AAG3C,UAAM,iBAAiB,OAAO;AAC9B,UAAM,WAAW,KAAK,wBAAwB,KAAK,IAAI;AAEvD,UAAM,oBAAoB,IAAI,eAAe;AAAA,MAC3C,MAAM,MAAM,YAAY;AACtB,cAAM,SAAS,eAAe,UAAU;AACxC,YAAI;AACF,iBAAO,MAAM;AACX,kBAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,gBAAI,KAAM;AAGV,gBAAI,MAAM,SAAS,YAAY,MAAM,OAAO,KAAK;AAC/C,oBAAM,gBAAgB,SAAS,MAAM,MAAM,GAAG;AAC9C,kBAAI,kBAAkB,MAAM,MAAM,KAAK;AACrC,sBAAM,eAAe,cAAc,iBAAiB;AACpD,sBAAM,mBAAmB,cAAc,qBAAqB;AAC5D,sBAAM,kBACJ,cAAc,uBAAuB,iBAAiB;AACxD,sBAAM,kBACJ,cAAc,2BAA2B,oBACzC;AAEF,2BAAW,QAAQ;AAAA,kBACjB,GAAG;AAAA,kBACH,OAAO;AAAA,oBACL,aAAa;AAAA,sBACX,OAAO;AAAA,sBACP,SAAS,eAAe;AAAA,sBACxB,WAAW;AAAA,sBACX,YAAY;AAAA,oBACd;AAAA,oBACA,cAAc;AAAA,sBACZ,OAAO;AAAA,sBACP,MAAM,mBAAmB;AAAA,sBACzB,WAAW;AAAA,oBACb;AAAA,oBACA,KAAK;AAAA,kBACP;AAAA,gBACF,CAAC;AAAA,cACH,OAAO;AACL,2BAAW,QAAQ,KAAK;AAAA,cAC1B;AAAA,YACF,OAAO;AACL,yBAAW,QAAQ,KAAK;AAAA,YAC1B;AAAA,UACF;AACA,qBAAW,MAAM;AAAA,QACnB,SAAS,OAAO;AACd,qBAAW,MAAM,KAAK;AAAA,QACxB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AC1LO,IAAM,UACX,OACI,WACA;;;AJiFC,SAAS,gBACd,UAAqC,CAAC,GACnB;AACnB,QAAM,UAAU;AAAA,IACd,QAAQ,WAAW;AAAA,EACrB;AACA,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,eAAe,UAAU,WAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,oBAAoB,OAAO;AAAA,EAC7B;AASF,QAAM,uBAAuB,CAAC,eAA0C;AAAA,IACtE,UAAU,aAAa,SAAS;AAAA,IAChC,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,UAAU,IAAI;AAAA,IAC3C,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,kBAAkB,CAAC,YAAkC;AACzD,WAAO,IAAI,2BAA2B,SAAS;AAAA,MAC7C,GAAG,qBAAqB,MAAM;AAAA,MAC9B,2BAA2B;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB,CAAC,YAC7B,IAAI;AAAA,IACF;AAAA,IACA,qBAAqB,YAAY;AAAA,EACnC;AAEF,QAAM,uBAAuB,CAAC,YAC5B,IAAI;AAAA,IACF;AAAA,IACA,qBAAqB,WAAW;AAAA,EAClC;AAEF,QAAM,mBAAmB,CAAC,YACxB,IAAI,oBAAoB,SAAS;AAAA,IAC/B,GAAG,qBAAqB,OAAO;AAAA,IAC/B,SAAS,UACL,GAAG,OAAO,eACV;AAAA,EACN,CAAC;AAEH,QAAM,WAAW,CAAC,YAAkC,gBAAgB,OAAO;AAE3E,WAAS,uBAAuB;AAChC,WAAS,kBAAkB;AAC3B,WAAS,YAAY;AACrB,WAAS,QAAQ;AACjB,WAAS,aAAa;AACtB,WAAS,gBAAgB;AACzB,WAAS,iBAAiB;AAC1B,WAAS,qBAAqB;AAE9B,SAAO;AACT;AAEO,IAAM,YAAY,gBAAgB;","names":["z","response","responseHeaders","z","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE"]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/deepinfra-image-model-options.ts","../src/deepinfra-image-model.ts","../src/deepinfra-chat-language-model.ts","../src/version.ts","../src/deepinfra-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 deepInfraImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n negative_prompt: z.string().nullish(),\n num_inference_steps: z.number().nullish(),\n guidance_scale: z.number().nullish(),\n guidance: z.number().nullish(),\n response_format: z.enum(['b64_json']).nullish(),\n quality: z.string().nullish(),\n style: z.string().nullish(),\n user: z.string().nullish(),\n }),\n ),\n);\n\nexport type DeepInfraImageModelOptions = InferSchema<\n typeof deepInfraImageModelOptionsSchema\n>;\n","import type {\n ImageModelV4,\n ImageModelV4File,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertToFormData,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n downloadBlob,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n deepInfraImageModelOptionsSchema,\n type DeepInfraImageModelOptions,\n} from './deepinfra-image-model-options';\nimport type { DeepInfraImageModelId } from './deepinfra-image-settings';\n\ninterface DeepInfraImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class DeepInfraImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get supportsFileInputs(): boolean | undefined {\n return [\n 'stabilityai/sd3.5',\n 'black-forest-labs/FLUX-1.1-pro',\n 'black-forest-labs/FLUX-1-schnell',\n 'black-forest-labs/FLUX-1-dev',\n 'black-forest-labs/FLUX-pro',\n 'black-forest-labs/FLUX.1-Kontext-dev',\n 'black-forest-labs/FLUX.1-Kontext-pro',\n 'Qwen/Qwen-Image-Edit',\n 'stabilityai/sd3.5-medium',\n 'stabilityai/sdxl-turbo',\n ].includes(this.modelId)\n ? true\n : undefined;\n }\n\n get supportsMaskInputs(): boolean | undefined {\n return this.supportsFileInputs;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: DeepInfraImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: DeepInfraImageModelId;\n config: DeepInfraImageModelConfig;\n }) {\n return new DeepInfraImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: DeepInfraImageModelId,\n private config: DeepInfraImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const warnings: Array<SharedV4Warning> = [];\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const deepInfraOptions = (await parseProviderOptions({\n provider: 'deepinfra',\n providerOptions,\n schema: deepInfraImageModelOptionsSchema,\n })) as DeepInfraImageModelOptions | undefined;\n\n // Image editing mode - use OpenAI-compatible /images/edits endpoint\n if (files != null && files.length > 0) {\n const { value: response, responseHeaders } = await postFormDataToApi({\n url: this.getEditUrl(),\n headers: combineHeaders(this.config.headers?.(), headers),\n formData: convertToFormData<DeepInfraFormDataInput>(\n {\n model: this.modelId,\n prompt,\n image: await Promise.all(files.map(file => fileToBlob(file))),\n mask: mask != null ? await fileToBlob(mask) : undefined,\n n,\n size,\n ...deepInfraOptions,\n },\n { useArrayBrackets: false },\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraEditErrorSchema,\n errorToMessage: error => error.error?.message ?? 'Unknown error',\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraEditResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.data.map(item => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n // Standard image generation mode\n // Some deepinfra models support size while others support aspect ratio.\n // Allow passing either and leave it up to the server to validate.\n const splitSize = size?.split('x');\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n prompt,\n num_images: n,\n ...(aspectRatio && { aspect_ratio: aspectRatio }),\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(seed != null && { seed }),\n ...deepInfraOptions,\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraErrorSchema,\n errorToMessage: error => error.detail.error,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.images.map(image =>\n image.replace(/^data:image\\/\\w+;base64,/, ''),\n ),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n private getEditUrl(): string {\n // Use OpenAI-compatible endpoint for image editing\n // baseURL is typically https://api.deepinfra.com/v1/inference\n // We need to use https://api.deepinfra.com/v1/openai/images/edits\n const baseUrl = this.config.baseURL.replace('/inference', '/openai');\n return `${baseUrl}/images/edits`;\n }\n}\n\nexport const deepInfraErrorSchema = z.object({\n detail: z.object({\n error: z.string(),\n }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepInfraImageResponseSchema = z.object({\n images: z.array(z.string()),\n});\n\n// Schema for OpenAI-compatible image edit endpoint errors\nexport const deepInfraEditErrorSchema = z.object({\n error: z\n .object({\n message: z.string(),\n })\n .optional(),\n});\n\n// Schema for OpenAI-compatible image edit endpoint response\nexport const deepInfraEditResponseSchema = z.object({\n data: z.array(z.object({ b64_json: z.string() })),\n});\n\ntype DeepInfraFormDataInput = {\n model: string;\n prompt: string | undefined;\n image: Blob | Blob[];\n mask?: Blob;\n n: number;\n size: `${number}x${number}` | undefined;\n [key: string]: unknown;\n};\n\nasync function fileToBlob(file: ImageModelV4File): Promise<Blob> {\n if (file.type === 'url') {\n return downloadBlob(file.url);\n }\n\n const data =\n file.data instanceof Uint8Array\n ? file.data\n : convertBase64ToUint8Array(file.data);\n\n return new Blob([data as BlobPart], { type: file.mediaType });\n}\n","import type {\n LanguageModelV4CallOptions,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamResult,\n} from '@ai-sdk/provider';\nimport { OpenAICompatibleChatLanguageModel } from '@ai-sdk/openai-compatible';\nimport {\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\ntype DeepInfraChatConfig = {\n provider: string;\n url: (options: { path: string; modelId?: string }) => string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n supportsStructuredOutputs?: boolean;\n};\n\nexport class DeepInfraChatLanguageModel extends OpenAICompatibleChatLanguageModel {\n static [WORKFLOW_SERIALIZE](model: DeepInfraChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: DeepInfraChatConfig;\n }) {\n return new DeepInfraChatLanguageModel(options.modelId, options.config);\n }\n\n /**\n * Fixes incorrect token usage for Gemini/Gemma models from DeepInfra.\n *\n * DeepInfra's API returns completion_tokens that don't include reasoning_tokens\n * for Gemini/Gemma models, which violates the OpenAI-compatible spec.\n * According to the spec, completion_tokens should include reasoning_tokens.\n *\n * Example of incorrect data from DeepInfra:\n * {\n * \"completion_tokens\": 84, // text-only tokens\n * \"completion_tokens_details\": {\n * \"reasoning_tokens\": 1081 // reasoning tokens not included above\n * }\n * }\n *\n * This would result in negative text tokens: 84 - 1081 = -997\n *\n * The fix: If reasoning_tokens > completion_tokens, add reasoning_tokens\n * to completion_tokens: 84 + 1081 = 1165\n */\n private fixUsageForGeminiModels(usage: any): typeof usage {\n if (!usage || !usage.completion_tokens_details?.reasoning_tokens) {\n return usage;\n }\n\n const completionTokens = usage.completion_tokens ?? 0;\n const reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n\n // If reasoning tokens exceed completion tokens, the API data is incorrect\n // DeepInfra is returning only text tokens in completion_tokens, not including reasoning\n if (reasoningTokens > completionTokens) {\n const correctedCompletionTokens = completionTokens + reasoningTokens;\n\n return {\n ...usage,\n // Add reasoning_tokens to completion_tokens to get the correct total\n completion_tokens: correctedCompletionTokens,\n // Update total_tokens if present\n total_tokens:\n usage.total_tokens != null\n ? usage.total_tokens + reasoningTokens\n : undefined,\n };\n }\n\n return usage;\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const result = await super.doGenerate(options);\n\n // Fix usage if needed\n if (result.usage?.raw) {\n const fixedRawUsage = this.fixUsageForGeminiModels(result.usage.raw);\n if (fixedRawUsage !== result.usage.raw) {\n // Recalculate usage with fixed data\n const promptTokens = fixedRawUsage.prompt_tokens ?? 0;\n const completionTokens = fixedRawUsage.completion_tokens ?? 0;\n const cacheReadTokens =\n fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;\n const reasoningTokens =\n fixedRawUsage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n ...result,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: fixedRawUsage,\n },\n };\n }\n }\n\n return result;\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const result = await super.doStream(options);\n\n // Wrap the stream to fix usage in the final chunk\n const originalStream = result.stream;\n const fixUsage = this.fixUsageForGeminiModels.bind(this);\n\n const transformedStream = new ReadableStream({\n async start(controller) {\n const reader = originalStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n // Fix usage in finish chunks\n if (value.type === 'finish' && value.usage?.raw) {\n const fixedRawUsage = fixUsage(value.usage.raw);\n if (fixedRawUsage !== value.usage.raw) {\n const promptTokens = fixedRawUsage.prompt_tokens ?? 0;\n const completionTokens = fixedRawUsage.completion_tokens ?? 0;\n const cacheReadTokens =\n fixedRawUsage.prompt_tokens_details?.cached_tokens ?? 0;\n const reasoningTokens =\n fixedRawUsage.completion_tokens_details?.reasoning_tokens ??\n 0;\n\n controller.enqueue({\n ...value,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: fixedRawUsage,\n },\n });\n } else {\n controller.enqueue(value);\n }\n } else {\n controller.enqueue(value);\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n\n return {\n ...result,\n stream: transformedStream,\n };\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import type {\n LanguageModelV4,\n EmbeddingModelV4,\n ProviderV4,\n ImageModelV4,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport type { DeepInfraChatModelId } from './deepinfra-chat-options';\nimport type { DeepInfraEmbeddingModelId } from './deepinfra-embedding-options';\nimport type { DeepInfraCompletionModelId } from './deepinfra-completion-options';\nimport type { DeepInfraImageModelId } from './deepinfra-image-settings';\nimport { DeepInfraImageModel } from './deepinfra-image-model';\nimport { DeepInfraChatLanguageModel } from './deepinfra-chat-language-model';\nimport { VERSION } from './version';\n\nexport interface DeepInfraProviderSettings {\n /**\n * DeepInfra API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\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\nexport interface DeepInfraProvider extends ProviderV4 {\n /**\n * Creates a model for text generation.\n */\n (modelId: DeepInfraChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: DeepInfraChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: DeepInfraImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: DeepInfraImageModelId): ImageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n languageModel(modelId: DeepInfraChatModelId): LanguageModelV4;\n\n /**\n * Creates a completion model for text generation.\n */\n completionModel(modelId: DeepInfraCompletionModelId): LanguageModelV4;\n\n /**\n * Creates a embedding model for text generation.\n */\n embeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: DeepInfraEmbeddingModelId): EmbeddingModelV4;\n}\n\nexport function createDeepInfra(\n options: DeepInfraProviderSettings = {},\n): DeepInfraProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepinfra.com/v1',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPINFRA_API_KEY',\n description: \"DeepInfra's API key\",\n })}`,\n ...options.headers,\n },\n `ai-sdk-deepinfra/${VERSION}`,\n );\n\n interface CommonModelConfig {\n provider: string;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `deepinfra.${modelType}`,\n url: ({ path }) => `${baseURL}/openai${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (modelId: DeepInfraChatModelId) => {\n return new DeepInfraChatLanguageModel(modelId, {\n ...getCommonModelConfig('chat'),\n supportsStructuredOutputs: true,\n });\n };\n\n const createCompletionModel = (modelId: DeepInfraCompletionModelId) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n getCommonModelConfig('completion'),\n );\n\n const createEmbeddingModel = (modelId: DeepInfraEmbeddingModelId) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig('embedding'),\n );\n\n const createImageModel = (modelId: DeepInfraImageModelId) =>\n new DeepInfraImageModel(modelId, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL\n ? `${baseURL}/inference`\n : 'https://api.deepinfra.com/v1/inference',\n });\n\n const provider = (modelId: DeepInfraChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.languageModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n return provider;\n}\n\nexport const deepInfra = createDeepInfra();\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/deepinfra",
3
- "version": "3.0.59",
3
+ "version": "3.0.60",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -29,15 +29,15 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@ai-sdk/openai-compatible": "3.0.59",
33
- "@ai-sdk/provider": "4.0.19",
34
- "@ai-sdk/provider-utils": "5.0.51"
32
+ "@ai-sdk/openai-compatible": "3.0.60",
33
+ "@ai-sdk/provider": "4.0.20",
34
+ "@ai-sdk/provider-utils": "5.0.52"
35
35
  },
36
36
  "devDependencies": {
37
- "@ai-sdk/test-server": "2.0.2",
37
+ "@ai-sdk/test-server": "2.0.3",
38
38
  "@types/node": "22.19.19",
39
39
  "@vercel/ai-tsconfig": "0.0.0",
40
- "tsup": "^8.5.1",
40
+ "tsdown": "^0.23.0",
41
41
  "typescript": "5.8.3",
42
42
  "zod": "3.25.76"
43
43
  },
@@ -64,9 +64,9 @@
64
64
  "ai"
65
65
  ],
66
66
  "scripts": {
67
- "build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
68
- "build:watch": "pnpm clean && tsup --watch",
69
- "clean": "del-cli dist docs *.tsbuildinfo",
67
+ "build": "pnpm clean && tsdown",
68
+ "build:watch": "pnpm clean && tsdown --watch",
69
+ "clean": "del-cli docs *.tsbuildinfo",
70
70
  "type-check": "tsc --build",
71
71
  "test": "pnpm test:node && pnpm test:edge",
72
72
  "test:update": "pnpm test:node -u",