@ai-sdk/deepinfra 0.1.8 → 0.1.10

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,19 @@
1
1
  # @ai-sdk/deepinfra
2
2
 
3
+ ## 0.1.10
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [3ff4ef8]
8
+ - @ai-sdk/provider-utils@2.1.7
9
+ - @ai-sdk/openai-compatible@0.1.9
10
+
11
+ ## 0.1.9
12
+
13
+ ### Patch Changes
14
+
15
+ - 96da7f6: feat (provider/deepinfra): add image support
16
+
3
17
  ## 0.1.8
4
18
 
5
19
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { ProviderV1, LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
1
+ import { ProviderV1, LanguageModelV1, ImageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
  import { OpenAICompatibleChatSettings, OpenAICompatibleEmbeddingSettings, OpenAICompatibleCompletionSettings } from '@ai-sdk/openai-compatible';
4
4
  export { OpenAICompatibleErrorData as DeepInfraErrorData } from '@ai-sdk/openai-compatible';
@@ -15,6 +15,14 @@ type DeepInfraCompletionModelId = DeepInfraChatModelId;
15
15
  interface DeepInfraCompletionSettings extends OpenAICompatibleCompletionSettings {
16
16
  }
17
17
 
18
+ 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' | 'stabilityai/sd3.5-medium' | 'stabilityai/sdxl-turbo' | (string & {});
19
+ interface DeepInfraImageSettings {
20
+ /**
21
+ * Override the maximum number of images per call (default 1)
22
+ */
23
+ maxImagesPerCall?: number;
24
+ }
25
+
18
26
  interface DeepInfraProviderSettings {
19
27
  /**
20
28
  DeepInfra API key.
@@ -44,6 +52,14 @@ interface DeepInfraProvider extends ProviderV1 {
44
52
  */
45
53
  chatModel(modelId: DeepInfraChatModelId, settings?: DeepInfraChatSettings): LanguageModelV1;
46
54
  /**
55
+ Creates a model for image generation.
56
+ */
57
+ image(modelId: DeepInfraImageModelId, settings?: DeepInfraImageSettings): ImageModelV1;
58
+ /**
59
+ Creates a model for image generation.
60
+ */
61
+ imageModel(modelId: DeepInfraImageModelId, settings?: DeepInfraImageSettings): ImageModelV1;
62
+ /**
47
63
  Creates a chat model for text generation.
48
64
  */
49
65
  languageModel(modelId: DeepInfraChatModelId, settings?: DeepInfraChatSettings): LanguageModelV1;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ProviderV1, LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
1
+ import { ProviderV1, LanguageModelV1, ImageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
  import { OpenAICompatibleChatSettings, OpenAICompatibleEmbeddingSettings, OpenAICompatibleCompletionSettings } from '@ai-sdk/openai-compatible';
4
4
  export { OpenAICompatibleErrorData as DeepInfraErrorData } from '@ai-sdk/openai-compatible';
@@ -15,6 +15,14 @@ type DeepInfraCompletionModelId = DeepInfraChatModelId;
15
15
  interface DeepInfraCompletionSettings extends OpenAICompatibleCompletionSettings {
16
16
  }
17
17
 
18
+ 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' | 'stabilityai/sd3.5-medium' | 'stabilityai/sdxl-turbo' | (string & {});
19
+ interface DeepInfraImageSettings {
20
+ /**
21
+ * Override the maximum number of images per call (default 1)
22
+ */
23
+ maxImagesPerCall?: number;
24
+ }
25
+
18
26
  interface DeepInfraProviderSettings {
19
27
  /**
20
28
  DeepInfra API key.
@@ -44,6 +52,14 @@ interface DeepInfraProvider extends ProviderV1 {
44
52
  */
45
53
  chatModel(modelId: DeepInfraChatModelId, settings?: DeepInfraChatSettings): LanguageModelV1;
46
54
  /**
55
+ Creates a model for image generation.
56
+ */
57
+ image(modelId: DeepInfraImageModelId, settings?: DeepInfraImageSettings): ImageModelV1;
58
+ /**
59
+ Creates a model for image generation.
60
+ */
61
+ imageModel(modelId: DeepInfraImageModelId, settings?: DeepInfraImageSettings): ImageModelV1;
62
+ /**
47
63
  Creates a chat model for text generation.
48
64
  */
49
65
  languageModel(modelId: DeepInfraChatModelId, settings?: DeepInfraChatSettings): LanguageModelV1;
package/dist/index.js CHANGED
@@ -27,14 +27,90 @@ module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/deepinfra-provider.ts
29
29
  var import_openai_compatible = require("@ai-sdk/openai-compatible");
30
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
31
+
32
+ // src/deepinfra-image-model.ts
30
33
  var import_provider_utils = require("@ai-sdk/provider-utils");
34
+ var import_zod = require("zod");
35
+ var DeepInfraImageModel = class {
36
+ constructor(modelId, settings, config) {
37
+ this.modelId = modelId;
38
+ this.settings = settings;
39
+ this.config = config;
40
+ this.specificationVersion = "v1";
41
+ }
42
+ get provider() {
43
+ return this.config.provider;
44
+ }
45
+ get maxImagesPerCall() {
46
+ var _a;
47
+ return (_a = this.settings.maxImagesPerCall) != null ? _a : 1;
48
+ }
49
+ async doGenerate({
50
+ prompt,
51
+ n,
52
+ size,
53
+ aspectRatio,
54
+ seed,
55
+ providerOptions,
56
+ headers,
57
+ abortSignal
58
+ }) {
59
+ var _a, _b, _c, _d;
60
+ const warnings = [];
61
+ const splitSize = size == null ? void 0 : size.split("x");
62
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
63
+ const { value: response, responseHeaders } = await (0, import_provider_utils.postJsonToApi)({
64
+ url: `${this.config.baseURL}/${this.modelId}`,
65
+ headers: (0, import_provider_utils.combineHeaders)(this.config.headers(), headers),
66
+ body: {
67
+ prompt,
68
+ num_images: n,
69
+ ...aspectRatio && { aspect_ratio: aspectRatio },
70
+ ...splitSize && { width: splitSize[0], height: splitSize[1] },
71
+ ...seed != null && { seed },
72
+ ...(_d = providerOptions.deepinfra) != null ? _d : {}
73
+ },
74
+ failedResponseHandler: (0, import_provider_utils.createJsonErrorResponseHandler)({
75
+ errorSchema: deepInfraErrorSchema,
76
+ errorToMessage: (error) => error.detail.error
77
+ }),
78
+ successfulResponseHandler: (0, import_provider_utils.createJsonResponseHandler)(
79
+ deepInfraImageResponseSchema
80
+ ),
81
+ abortSignal,
82
+ fetch: this.config.fetch
83
+ });
84
+ return {
85
+ images: response.images.map(
86
+ (image) => image.replace(/^data:image\/\w+;base64,/, "")
87
+ ),
88
+ warnings,
89
+ response: {
90
+ timestamp: currentDate,
91
+ modelId: this.modelId,
92
+ headers: responseHeaders
93
+ }
94
+ };
95
+ }
96
+ };
97
+ var deepInfraErrorSchema = import_zod.z.object({
98
+ detail: import_zod.z.object({
99
+ error: import_zod.z.string()
100
+ })
101
+ });
102
+ var deepInfraImageResponseSchema = import_zod.z.object({
103
+ images: import_zod.z.array(import_zod.z.string())
104
+ });
105
+
106
+ // src/deepinfra-provider.ts
31
107
  function createDeepInfra(options = {}) {
32
108
  var _a;
33
- const baseURL = (0, import_provider_utils.withoutTrailingSlash)(
34
- (_a = options.baseURL) != null ? _a : "https://api.deepinfra.com/v1/openai"
109
+ const baseURL = (0, import_provider_utils2.withoutTrailingSlash)(
110
+ (_a = options.baseURL) != null ? _a : "https://api.deepinfra.com/v1"
35
111
  );
36
112
  const getHeaders = () => ({
37
- Authorization: `Bearer ${(0, import_provider_utils.loadApiKey)({
113
+ Authorization: `Bearer ${(0, import_provider_utils2.loadApiKey)({
38
114
  apiKey: options.apiKey,
39
115
  environmentVariableName: "DEEPINFRA_API_KEY",
40
116
  description: "DeepInfra's API key"
@@ -43,7 +119,7 @@ function createDeepInfra(options = {}) {
43
119
  });
44
120
  const getCommonModelConfig = (modelType) => ({
45
121
  provider: `deepinfra.${modelType}`,
46
- url: ({ path }) => `${baseURL}${path}`,
122
+ url: ({ path }) => `${baseURL}/openai${path}`,
47
123
  headers: getHeaders,
48
124
  fetch: options.fetch
49
125
  });
@@ -63,9 +139,15 @@ function createDeepInfra(options = {}) {
63
139
  settings,
64
140
  getCommonModelConfig("embedding")
65
141
  );
142
+ const createImageModel = (modelId, settings = {}) => new DeepInfraImageModel(modelId, settings, {
143
+ ...getCommonModelConfig("image"),
144
+ baseURL: baseURL ? `${baseURL}/inference` : "https://api.deepinfra.com/v1/inference"
145
+ });
66
146
  const provider = (modelId, settings) => createChatModel(modelId, settings);
67
147
  provider.completionModel = createCompletionModel;
68
148
  provider.chatModel = createChatModel;
149
+ provider.image = createImageModel;
150
+ provider.imageModel = createImageModel;
69
151
  provider.languageModel = createChatModel;
70
152
  provider.textEmbeddingModel = createTextEmbeddingModel;
71
153
  return provider;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/deepinfra-provider.ts"],"sourcesContent":["export { createDeepInfra, deepinfra } from './deepinfra-provider';\nexport type {\n DeepInfraProvider,\n DeepInfraProviderSettings,\n} from './deepinfra-provider';\nexport type { OpenAICompatibleErrorData as DeepInfraErrorData } from '@ai-sdk/openai-compatible';\n","import {\n LanguageModelV1,\n EmbeddingModelV1,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepInfraChatModelId,\n DeepInfraChatSettings,\n} from './deepinfra-chat-settings';\nimport {\n DeepInfraEmbeddingModelId,\n DeepInfraEmbeddingSettings,\n} from './deepinfra-embedding-settings';\nimport {\n DeepInfraCompletionModelId,\n DeepInfraCompletionSettings,\n} from './deepinfra-completion-settings';\n\nexport interface DeepInfraProviderSettings {\n /**\nDeepInfra API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepInfraProvider extends ProviderV1 {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n languageModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: DeepInfraCompletionModelId,\n settings?: DeepInfraCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: DeepInfraEmbeddingModelId,\n settings?: DeepInfraEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n}\n\nexport function createDeepInfra(\n options: DeepInfraProviderSettings = {},\n): DeepInfraProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepinfra.com/v1/openai',\n );\n const getHeaders = () => ({\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\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}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (\n modelId: DeepInfraChatModelId,\n settings: DeepInfraChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: DeepInfraCompletionModelId,\n settings: DeepInfraCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n settings,\n getCommonModelConfig('completion'),\n );\n\n const createTextEmbeddingModel = (\n modelId: DeepInfraEmbeddingModelId,\n settings: DeepInfraEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n settings,\n getCommonModelConfig('embedding'),\n );\n\n const provider = (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n\n return provider as DeepInfraProvider;\n}\n\nexport const deepinfra = createDeepInfra();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKA,+BAIO;AACP,4BAIO;AA4EA,SAAS,gBACd,UAAqC,CAAC,GACnB;AA5FrB;AA6FE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,kCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AASA,QAAM,uBAAuB,CAAC,eAA0C;AAAA,IACtE,UAAU,aAAa,SAAS;AAAA,IAChC,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAkC,CAAC,MAChC;AACH,WAAO,IAAI,2DAAkC,SAAS,UAAU;AAAA,MAC9D,GAAG,qBAAqB,MAAM;AAAA,MAC9B,6BAA6B;AAAA,IAC/B,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB,CAC5B,SACA,WAAwC,CAAC,MAEzC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,YAAY;AAAA,EACnC;AAEF,QAAM,2BAA2B,CAC/B,SACA,WAAuC,CAAC,MAExC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,WAAW;AAAA,EAClC;AAEF,QAAM,WAAW,CACf,SACA,aACG,gBAAgB,SAAS,QAAQ;AAEtC,WAAS,kBAAkB;AAC3B,WAAS,YAAY;AACrB,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAE9B,SAAO;AACT;AAEO,IAAM,YAAY,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/deepinfra-provider.ts","../src/deepinfra-image-model.ts"],"sourcesContent":["export { createDeepInfra, deepinfra } from './deepinfra-provider';\nexport type {\n DeepInfraProvider,\n DeepInfraProviderSettings,\n} from './deepinfra-provider';\nexport type { OpenAICompatibleErrorData as DeepInfraErrorData } from '@ai-sdk/openai-compatible';\n","import {\n LanguageModelV1,\n EmbeddingModelV1,\n ProviderV1,\n ImageModelV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepInfraChatModelId,\n DeepInfraChatSettings,\n} from './deepinfra-chat-settings';\nimport {\n DeepInfraEmbeddingModelId,\n DeepInfraEmbeddingSettings,\n} from './deepinfra-embedding-settings';\nimport {\n DeepInfraCompletionModelId,\n DeepInfraCompletionSettings,\n} from './deepinfra-completion-settings';\nimport {\n DeepInfraImageModelId,\n DeepInfraImageSettings,\n} from './deepinfra-image-settings';\nimport { DeepInfraImageModel } from './deepinfra-image-model';\n\nexport interface DeepInfraProviderSettings {\n /**\nDeepInfra API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepInfraProvider extends ProviderV1 {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a model for image generation.\n */\n image(\n modelId: DeepInfraImageModelId,\n settings?: DeepInfraImageSettings,\n ): ImageModelV1;\n\n /**\nCreates a model for image generation.\n */\n imageModel(\n modelId: DeepInfraImageModelId,\n settings?: DeepInfraImageSettings,\n ): ImageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n languageModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: DeepInfraCompletionModelId,\n settings?: DeepInfraCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: DeepInfraEmbeddingModelId,\n settings?: DeepInfraEmbeddingSettings,\n ): EmbeddingModelV1<string>;\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 Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPINFRA_API_KEY',\n description: \"DeepInfra's API key\",\n })}`,\n ...options.headers,\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 = (\n modelId: DeepInfraChatModelId,\n settings: DeepInfraChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: DeepInfraCompletionModelId,\n settings: DeepInfraCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n settings,\n getCommonModelConfig('completion'),\n );\n\n const createTextEmbeddingModel = (\n modelId: DeepInfraEmbeddingModelId,\n settings: DeepInfraEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n settings,\n getCommonModelConfig('embedding'),\n );\n\n const createImageModel = (\n modelId: DeepInfraImageModelId,\n settings: DeepInfraImageSettings = {},\n ) =>\n new DeepInfraImageModel(modelId, settings, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL\n ? `${baseURL}/inference`\n : 'https://api.deepinfra.com/v1/inference',\n });\n\n const provider = (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n\n return provider;\n}\n\nexport const deepinfra = createDeepInfra();\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepInfraImageModelId,\n DeepInfraImageSettings,\n} from './deepinfra-image-settings';\nimport { z } from 'zod';\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 ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 1;\n }\n\n constructor(\n readonly modelId: DeepInfraImageModelId,\n readonly settings: DeepInfraImageSettings,\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 }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\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\n const splitSize = size?.split('x');\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\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 ...(providerOptions.deepinfra ?? {}),\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\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"],"mappings":"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","names":["import_provider_utils"]}
package/dist/index.mjs CHANGED
@@ -8,10 +8,91 @@ import {
8
8
  loadApiKey,
9
9
  withoutTrailingSlash
10
10
  } from "@ai-sdk/provider-utils";
11
+
12
+ // src/deepinfra-image-model.ts
13
+ import {
14
+ combineHeaders,
15
+ createJsonErrorResponseHandler,
16
+ createJsonResponseHandler,
17
+ postJsonToApi
18
+ } from "@ai-sdk/provider-utils";
19
+ import { z } from "zod";
20
+ var DeepInfraImageModel = class {
21
+ constructor(modelId, settings, config) {
22
+ this.modelId = modelId;
23
+ this.settings = settings;
24
+ this.config = config;
25
+ this.specificationVersion = "v1";
26
+ }
27
+ get provider() {
28
+ return this.config.provider;
29
+ }
30
+ get maxImagesPerCall() {
31
+ var _a;
32
+ return (_a = this.settings.maxImagesPerCall) != null ? _a : 1;
33
+ }
34
+ async doGenerate({
35
+ prompt,
36
+ n,
37
+ size,
38
+ aspectRatio,
39
+ seed,
40
+ providerOptions,
41
+ headers,
42
+ abortSignal
43
+ }) {
44
+ var _a, _b, _c, _d;
45
+ const warnings = [];
46
+ const splitSize = size == null ? void 0 : size.split("x");
47
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
48
+ const { value: response, responseHeaders } = await postJsonToApi({
49
+ url: `${this.config.baseURL}/${this.modelId}`,
50
+ headers: combineHeaders(this.config.headers(), headers),
51
+ body: {
52
+ prompt,
53
+ num_images: n,
54
+ ...aspectRatio && { aspect_ratio: aspectRatio },
55
+ ...splitSize && { width: splitSize[0], height: splitSize[1] },
56
+ ...seed != null && { seed },
57
+ ...(_d = providerOptions.deepinfra) != null ? _d : {}
58
+ },
59
+ failedResponseHandler: createJsonErrorResponseHandler({
60
+ errorSchema: deepInfraErrorSchema,
61
+ errorToMessage: (error) => error.detail.error
62
+ }),
63
+ successfulResponseHandler: createJsonResponseHandler(
64
+ deepInfraImageResponseSchema
65
+ ),
66
+ abortSignal,
67
+ fetch: this.config.fetch
68
+ });
69
+ return {
70
+ images: response.images.map(
71
+ (image) => image.replace(/^data:image\/\w+;base64,/, "")
72
+ ),
73
+ warnings,
74
+ response: {
75
+ timestamp: currentDate,
76
+ modelId: this.modelId,
77
+ headers: responseHeaders
78
+ }
79
+ };
80
+ }
81
+ };
82
+ var deepInfraErrorSchema = z.object({
83
+ detail: z.object({
84
+ error: z.string()
85
+ })
86
+ });
87
+ var deepInfraImageResponseSchema = z.object({
88
+ images: z.array(z.string())
89
+ });
90
+
91
+ // src/deepinfra-provider.ts
11
92
  function createDeepInfra(options = {}) {
12
93
  var _a;
13
94
  const baseURL = withoutTrailingSlash(
14
- (_a = options.baseURL) != null ? _a : "https://api.deepinfra.com/v1/openai"
95
+ (_a = options.baseURL) != null ? _a : "https://api.deepinfra.com/v1"
15
96
  );
16
97
  const getHeaders = () => ({
17
98
  Authorization: `Bearer ${loadApiKey({
@@ -23,7 +104,7 @@ function createDeepInfra(options = {}) {
23
104
  });
24
105
  const getCommonModelConfig = (modelType) => ({
25
106
  provider: `deepinfra.${modelType}`,
26
- url: ({ path }) => `${baseURL}${path}`,
107
+ url: ({ path }) => `${baseURL}/openai${path}`,
27
108
  headers: getHeaders,
28
109
  fetch: options.fetch
29
110
  });
@@ -43,9 +124,15 @@ function createDeepInfra(options = {}) {
43
124
  settings,
44
125
  getCommonModelConfig("embedding")
45
126
  );
127
+ const createImageModel = (modelId, settings = {}) => new DeepInfraImageModel(modelId, settings, {
128
+ ...getCommonModelConfig("image"),
129
+ baseURL: baseURL ? `${baseURL}/inference` : "https://api.deepinfra.com/v1/inference"
130
+ });
46
131
  const provider = (modelId, settings) => createChatModel(modelId, settings);
47
132
  provider.completionModel = createCompletionModel;
48
133
  provider.chatModel = createChatModel;
134
+ provider.image = createImageModel;
135
+ provider.imageModel = createImageModel;
49
136
  provider.languageModel = createChatModel;
50
137
  provider.textEmbeddingModel = createTextEmbeddingModel;
51
138
  return provider;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deepinfra-provider.ts"],"sourcesContent":["import {\n LanguageModelV1,\n EmbeddingModelV1,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepInfraChatModelId,\n DeepInfraChatSettings,\n} from './deepinfra-chat-settings';\nimport {\n DeepInfraEmbeddingModelId,\n DeepInfraEmbeddingSettings,\n} from './deepinfra-embedding-settings';\nimport {\n DeepInfraCompletionModelId,\n DeepInfraCompletionSettings,\n} from './deepinfra-completion-settings';\n\nexport interface DeepInfraProviderSettings {\n /**\nDeepInfra API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepInfraProvider extends ProviderV1 {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n languageModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: DeepInfraCompletionModelId,\n settings?: DeepInfraCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: DeepInfraEmbeddingModelId,\n settings?: DeepInfraEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n}\n\nexport function createDeepInfra(\n options: DeepInfraProviderSettings = {},\n): DeepInfraProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.deepinfra.com/v1/openai',\n );\n const getHeaders = () => ({\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\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}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (\n modelId: DeepInfraChatModelId,\n settings: DeepInfraChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: DeepInfraCompletionModelId,\n settings: DeepInfraCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n settings,\n getCommonModelConfig('completion'),\n );\n\n const createTextEmbeddingModel = (\n modelId: DeepInfraEmbeddingModelId,\n settings: DeepInfraEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n settings,\n getCommonModelConfig('embedding'),\n );\n\n const provider = (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n\n return provider as DeepInfraProvider;\n}\n\nexport const deepinfra = createDeepInfra();\n"],"mappings":";AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AA4EA,SAAS,gBACd,UAAqC,CAAC,GACnB;AA5FrB;AA6FE,QAAM,UAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AASA,QAAM,uBAAuB,CAAC,eAA0C;AAAA,IACtE,UAAU,aAAa,SAAS;AAAA,IAChC,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAkC,CAAC,MAChC;AACH,WAAO,IAAI,kCAAkC,SAAS,UAAU;AAAA,MAC9D,GAAG,qBAAqB,MAAM;AAAA,MAC9B,6BAA6B;AAAA,IAC/B,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB,CAC5B,SACA,WAAwC,CAAC,MAEzC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,YAAY;AAAA,EACnC;AAEF,QAAM,2BAA2B,CAC/B,SACA,WAAuC,CAAC,MAExC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,WAAW;AAAA,EAClC;AAEF,QAAM,WAAW,CACf,SACA,aACG,gBAAgB,SAAS,QAAQ;AAEtC,WAAS,kBAAkB;AAC3B,WAAS,YAAY;AACrB,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAE9B,SAAO;AACT;AAEO,IAAM,YAAY,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../src/deepinfra-provider.ts","../src/deepinfra-image-model.ts"],"sourcesContent":["import {\n LanguageModelV1,\n EmbeddingModelV1,\n ProviderV1,\n ImageModelV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepInfraChatModelId,\n DeepInfraChatSettings,\n} from './deepinfra-chat-settings';\nimport {\n DeepInfraEmbeddingModelId,\n DeepInfraEmbeddingSettings,\n} from './deepinfra-embedding-settings';\nimport {\n DeepInfraCompletionModelId,\n DeepInfraCompletionSettings,\n} from './deepinfra-completion-settings';\nimport {\n DeepInfraImageModelId,\n DeepInfraImageSettings,\n} from './deepinfra-image-settings';\nimport { DeepInfraImageModel } from './deepinfra-image-model';\n\nexport interface DeepInfraProviderSettings {\n /**\nDeepInfra API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface DeepInfraProvider extends ProviderV1 {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a model for image generation.\n */\n image(\n modelId: DeepInfraImageModelId,\n settings?: DeepInfraImageSettings,\n ): ImageModelV1;\n\n /**\nCreates a model for image generation.\n */\n imageModel(\n modelId: DeepInfraImageModelId,\n settings?: DeepInfraImageSettings,\n ): ImageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n languageModel(\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: DeepInfraCompletionModelId,\n settings?: DeepInfraCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: DeepInfraEmbeddingModelId,\n settings?: DeepInfraEmbeddingSettings,\n ): EmbeddingModelV1<string>;\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 Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'DEEPINFRA_API_KEY',\n description: \"DeepInfra's API key\",\n })}`,\n ...options.headers,\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 = (\n modelId: DeepInfraChatModelId,\n settings: DeepInfraChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: DeepInfraCompletionModelId,\n settings: DeepInfraCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n settings,\n getCommonModelConfig('completion'),\n );\n\n const createTextEmbeddingModel = (\n modelId: DeepInfraEmbeddingModelId,\n settings: DeepInfraEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n settings,\n getCommonModelConfig('embedding'),\n );\n\n const createImageModel = (\n modelId: DeepInfraImageModelId,\n settings: DeepInfraImageSettings = {},\n ) =>\n new DeepInfraImageModel(modelId, settings, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL\n ? `${baseURL}/inference`\n : 'https://api.deepinfra.com/v1/inference',\n });\n\n const provider = (\n modelId: DeepInfraChatModelId,\n settings?: DeepInfraChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n\n return provider;\n}\n\nexport const deepinfra = createDeepInfra();\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {\n DeepInfraImageModelId,\n DeepInfraImageSettings,\n} from './deepinfra-image-settings';\nimport { z } from 'zod';\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 ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 1;\n }\n\n constructor(\n readonly modelId: DeepInfraImageModelId,\n readonly settings: DeepInfraImageSettings,\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 }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\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\n const splitSize = size?.split('x');\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\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 ...(providerOptions.deepinfra ?? {}),\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\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"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/deepinfra",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -19,9 +19,9 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@ai-sdk/openai-compatible": "0.1.8",
22
+ "@ai-sdk/openai-compatible": "0.1.9",
23
23
  "@ai-sdk/provider": "1.0.7",
24
- "@ai-sdk/provider-utils": "2.1.6"
24
+ "@ai-sdk/provider-utils": "2.1.7"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^18",