@ai-sdk/replicate 0.1.5 → 0.1.7
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 +15 -0
- package/dist/index.d.mts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +46 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @ai-sdk/replicate
|
|
2
2
|
|
|
3
|
+
## 0.1.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d89c3b9: feat (provider): add image model support to provider specification
|
|
8
|
+
- Updated dependencies [d89c3b9]
|
|
9
|
+
- @ai-sdk/provider@1.0.7
|
|
10
|
+
- @ai-sdk/provider-utils@2.1.6
|
|
11
|
+
|
|
12
|
+
## 0.1.6
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- 0ca7969: feat (provider/replicate): support versioned models
|
|
17
|
+
|
|
3
18
|
## 0.1.5
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { ImageModelV1, ProviderV1 } from '@ai-sdk/provider';
|
|
1
2
|
import { Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
|
|
2
|
-
import { ImageModelV1 } from '@ai-sdk/provider';
|
|
3
3
|
|
|
4
4
|
type ReplicateImageModelId = 'black-forest-labs/flux-1.1-pro' | 'black-forest-labs/flux-1.1-pro-ultra' | 'black-forest-labs/flux-dev' | 'black-forest-labs/flux-pro' | 'black-forest-labs/flux-schnell' | 'bytedance/sdxl-lightning-4step' | 'fofr/aura-flow' | 'fofr/latent-consistency-model' | 'fofr/realvisxl-v3-multi-controlnet-lora' | 'fofr/sdxl-emoji' | 'fofr/sdxl-multi-controlnet-lora' | 'ideogram-ai/ideogram-v2' | 'ideogram-ai/ideogram-v2-turbo' | 'lucataco/dreamshaper-xl-turbo' | 'lucataco/open-dalle-v1.1' | 'lucataco/realvisxl-v2.0' | 'lucataco/realvisxl2-lcm' | 'luma/photon' | 'luma/photon-flash' | 'nvidia/sana' | 'playgroundai/playground-v2.5-1024px-aesthetic' | 'recraft-ai/recraft-v3' | 'recraft-ai/recraft-v3-svg' | 'stability-ai/stable-diffusion-3.5-large' | 'stability-ai/stable-diffusion-3.5-large-turbo' | 'stability-ai/stable-diffusion-3.5-medium' | 'tstramer/material-diffusion' | (string & {});
|
|
5
5
|
interface ReplicateImageSettings {
|
|
@@ -50,11 +50,15 @@ interface ReplicateProviderSettings {
|
|
|
50
50
|
*/
|
|
51
51
|
fetch?: FetchFunction;
|
|
52
52
|
}
|
|
53
|
-
interface ReplicateProvider {
|
|
53
|
+
interface ReplicateProvider extends ProviderV1 {
|
|
54
54
|
/**
|
|
55
55
|
* Creates a Replicate image generation model.
|
|
56
56
|
*/
|
|
57
57
|
image(modelId: ReplicateImageModelId, settings?: ReplicateImageSettings): ReplicateImageModel;
|
|
58
|
+
/**
|
|
59
|
+
* Creates a Replicate image generation model.
|
|
60
|
+
*/
|
|
61
|
+
imageModel(modelId: ReplicateImageModelId, settings?: ReplicateImageSettings): ReplicateImageModel;
|
|
58
62
|
}
|
|
59
63
|
/**
|
|
60
64
|
* Create a Replicate provider instance.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { ImageModelV1, ProviderV1 } from '@ai-sdk/provider';
|
|
1
2
|
import { Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
|
|
2
|
-
import { ImageModelV1 } from '@ai-sdk/provider';
|
|
3
3
|
|
|
4
4
|
type ReplicateImageModelId = 'black-forest-labs/flux-1.1-pro' | 'black-forest-labs/flux-1.1-pro-ultra' | 'black-forest-labs/flux-dev' | 'black-forest-labs/flux-pro' | 'black-forest-labs/flux-schnell' | 'bytedance/sdxl-lightning-4step' | 'fofr/aura-flow' | 'fofr/latent-consistency-model' | 'fofr/realvisxl-v3-multi-controlnet-lora' | 'fofr/sdxl-emoji' | 'fofr/sdxl-multi-controlnet-lora' | 'ideogram-ai/ideogram-v2' | 'ideogram-ai/ideogram-v2-turbo' | 'lucataco/dreamshaper-xl-turbo' | 'lucataco/open-dalle-v1.1' | 'lucataco/realvisxl-v2.0' | 'lucataco/realvisxl2-lcm' | 'luma/photon' | 'luma/photon-flash' | 'nvidia/sana' | 'playgroundai/playground-v2.5-1024px-aesthetic' | 'recraft-ai/recraft-v3' | 'recraft-ai/recraft-v3-svg' | 'stability-ai/stable-diffusion-3.5-large' | 'stability-ai/stable-diffusion-3.5-large-turbo' | 'stability-ai/stable-diffusion-3.5-medium' | 'tstramer/material-diffusion' | (string & {});
|
|
5
5
|
interface ReplicateImageSettings {
|
|
@@ -50,11 +50,15 @@ interface ReplicateProviderSettings {
|
|
|
50
50
|
*/
|
|
51
51
|
fetch?: FetchFunction;
|
|
52
52
|
}
|
|
53
|
-
interface ReplicateProvider {
|
|
53
|
+
interface ReplicateProvider extends ProviderV1 {
|
|
54
54
|
/**
|
|
55
55
|
* Creates a Replicate image generation model.
|
|
56
56
|
*/
|
|
57
57
|
image(modelId: ReplicateImageModelId, settings?: ReplicateImageSettings): ReplicateImageModel;
|
|
58
|
+
/**
|
|
59
|
+
* Creates a Replicate image generation model.
|
|
60
|
+
*/
|
|
61
|
+
imageModel(modelId: ReplicateImageModelId, settings?: ReplicateImageSettings): ReplicateImageModel;
|
|
58
62
|
}
|
|
59
63
|
/**
|
|
60
64
|
* Create a Replicate provider instance.
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ __export(src_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(src_exports);
|
|
27
27
|
|
|
28
28
|
// src/replicate-provider.ts
|
|
29
|
+
var import_provider = require("@ai-sdk/provider");
|
|
29
30
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
30
31
|
|
|
31
32
|
// src/replicate-image-model.ts
|
|
@@ -74,12 +75,16 @@ var ReplicateImageModel = class {
|
|
|
74
75
|
}) {
|
|
75
76
|
var _a, _b, _c, _d;
|
|
76
77
|
const warnings = [];
|
|
78
|
+
const [modelId, version] = this.modelId.split(":");
|
|
77
79
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
78
80
|
const {
|
|
79
81
|
value: { output },
|
|
80
82
|
responseHeaders
|
|
81
83
|
} = await (0, import_provider_utils2.postJsonToApi)({
|
|
82
|
-
url:
|
|
84
|
+
url: (
|
|
85
|
+
// different endpoints for versioned vs unversioned models:
|
|
86
|
+
version != null ? `${this.config.baseURL}/predictions` : `${this.config.baseURL}/models/${modelId}/predictions`
|
|
87
|
+
),
|
|
83
88
|
headers: (0, import_provider_utils2.combineHeaders)(await (0, import_provider_utils2.resolve)(this.config.headers), headers, {
|
|
84
89
|
prefer: "wait"
|
|
85
90
|
}),
|
|
@@ -91,20 +96,28 @@ var ReplicateImageModel = class {
|
|
|
91
96
|
seed,
|
|
92
97
|
num_outputs: n,
|
|
93
98
|
...(_d = providerOptions.replicate) != null ? _d : {}
|
|
94
|
-
}
|
|
99
|
+
},
|
|
100
|
+
// for versioned models, include the version in the body:
|
|
101
|
+
...version != null ? { version } : {}
|
|
95
102
|
},
|
|
96
|
-
failedResponseHandler: replicateFailedResponseHandler,
|
|
97
103
|
successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)(
|
|
98
104
|
replicateImageResponseSchema
|
|
99
105
|
),
|
|
106
|
+
failedResponseHandler: replicateFailedResponseHandler,
|
|
100
107
|
abortSignal,
|
|
101
108
|
fetch: this.config.fetch
|
|
102
109
|
});
|
|
103
110
|
const outputArray = Array.isArray(output) ? output : [output];
|
|
104
111
|
const images = await Promise.all(
|
|
105
112
|
outputArray.map(async (url) => {
|
|
106
|
-
const
|
|
107
|
-
|
|
113
|
+
const { value: image } = await (0, import_provider_utils2.getFromApi)({
|
|
114
|
+
url,
|
|
115
|
+
successfulResponseHandler: (0, import_provider_utils2.createBinaryResponseHandler)(),
|
|
116
|
+
failedResponseHandler: replicateFailedResponseHandler,
|
|
117
|
+
abortSignal,
|
|
118
|
+
fetch: this.config.fetch
|
|
119
|
+
});
|
|
120
|
+
return image;
|
|
108
121
|
})
|
|
109
122
|
);
|
|
110
123
|
return {
|
|
@@ -124,21 +137,35 @@ var replicateImageResponseSchema = import_zod2.z.object({
|
|
|
124
137
|
|
|
125
138
|
// src/replicate-provider.ts
|
|
126
139
|
function createReplicate(options = {}) {
|
|
140
|
+
const createImageModel = (modelId, settings) => {
|
|
141
|
+
var _a;
|
|
142
|
+
return new ReplicateImageModel(modelId, settings != null ? settings : {}, {
|
|
143
|
+
provider: "replicate",
|
|
144
|
+
baseURL: (_a = options.baseURL) != null ? _a : "https://api.replicate.com/v1",
|
|
145
|
+
headers: {
|
|
146
|
+
Authorization: `Bearer ${(0, import_provider_utils3.loadApiKey)({
|
|
147
|
+
apiKey: options.apiToken,
|
|
148
|
+
environmentVariableName: "REPLICATE_API_TOKEN",
|
|
149
|
+
description: "Replicate"
|
|
150
|
+
})}`,
|
|
151
|
+
...options.headers
|
|
152
|
+
},
|
|
153
|
+
fetch: options.fetch
|
|
154
|
+
});
|
|
155
|
+
};
|
|
127
156
|
return {
|
|
128
|
-
image:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
},
|
|
141
|
-
fetch: options.fetch
|
|
157
|
+
image: createImageModel,
|
|
158
|
+
imageModel: createImageModel,
|
|
159
|
+
languageModel: () => {
|
|
160
|
+
throw new import_provider.NoSuchModelError({
|
|
161
|
+
modelId: "languageModel",
|
|
162
|
+
modelType: "languageModel"
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
textEmbeddingModel: () => {
|
|
166
|
+
throw new import_provider.NoSuchModelError({
|
|
167
|
+
modelId: "textEmbeddingModel",
|
|
168
|
+
modelType: "textEmbeddingModel"
|
|
142
169
|
});
|
|
143
170
|
}
|
|
144
171
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/replicate-provider.ts","../src/replicate-image-model.ts","../src/replicate-error.ts"],"sourcesContent":["export { createReplicate, replicate } from './replicate-provider';\nexport type {\n ReplicateProvider,\n ReplicateProviderSettings,\n} from './replicate-provider';\n","import type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey } from '@ai-sdk/provider-utils';\nimport { ReplicateImageModel } from './replicate-image-model';\nimport {\n ReplicateImageModelId,\n ReplicateImageSettings,\n} from './replicate-image-settings';\n\nexport interface ReplicateProviderSettings {\n /**\nAPI token that is being send using the `Authorization` header.\nIt defaults to the `REPLICATE_API_TOKEN` environment variable.\n */\n apiToken?: string;\n\n /**\nUse a different URL prefix for API calls, e.g. to use proxy servers.\nThe default prefix is `https://api.replicate.com/v1`.\n */\n baseURL?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\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 ReplicateProvider {\n /**\n * Creates a Replicate image generation model.\n */\n image(\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ): ReplicateImageModel;\n}\n\n/**\n * Create a Replicate provider instance.\n */\nexport function createReplicate(\n options: ReplicateProviderSettings = {},\n): ReplicateProvider {\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/replicate-provider.ts","../src/replicate-image-model.ts","../src/replicate-error.ts"],"sourcesContent":["export { createReplicate, replicate } from './replicate-provider';\nexport type {\n ReplicateProvider,\n ReplicateProviderSettings,\n} from './replicate-provider';\n","import { NoSuchModelError, ProviderV1 } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey } from '@ai-sdk/provider-utils';\nimport { ReplicateImageModel } from './replicate-image-model';\nimport {\n ReplicateImageModelId,\n ReplicateImageSettings,\n} from './replicate-image-settings';\n\nexport interface ReplicateProviderSettings {\n /**\nAPI token that is being send using the `Authorization` header.\nIt defaults to the `REPLICATE_API_TOKEN` environment variable.\n */\n apiToken?: string;\n\n /**\nUse a different URL prefix for API calls, e.g. to use proxy servers.\nThe default prefix is `https://api.replicate.com/v1`.\n */\n baseURL?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\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 ReplicateProvider extends ProviderV1 {\n /**\n * Creates a Replicate image generation model.\n */\n image(\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ): ReplicateImageModel;\n\n /**\n * Creates a Replicate image generation model.\n */\n imageModel(\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ): ReplicateImageModel;\n}\n\n/**\n * Create a Replicate provider instance.\n */\nexport function createReplicate(\n options: ReplicateProviderSettings = {},\n): ReplicateProvider {\n const createImageModel = (\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ) =>\n new ReplicateImageModel(modelId, settings ?? {}, {\n provider: 'replicate',\n baseURL: options.baseURL ?? 'https://api.replicate.com/v1',\n headers: {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiToken,\n environmentVariableName: 'REPLICATE_API_TOKEN',\n description: 'Replicate',\n })}`,\n ...options.headers,\n },\n fetch: options.fetch,\n });\n\n return {\n image: createImageModel,\n imageModel: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n };\n}\n\n/**\n * Default Replicate provider instance.\n */\nexport const replicate = createReplicate();\n","import type { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport type { Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { replicateFailedResponseHandler } from './replicate-error';\nimport {\n ReplicateImageModelId,\n ReplicateImageSettings,\n} from './replicate-image-settings';\n\ninterface ReplicateImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class ReplicateImageModel 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: ReplicateImageModelId,\n private readonly settings: ReplicateImageSettings,\n private readonly config: ReplicateImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n aspectRatio,\n size,\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 const [modelId, version] = this.modelId.split(':');\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const {\n value: { output },\n responseHeaders,\n } = await postJsonToApi({\n url:\n // different endpoints for versioned vs unversioned models:\n version != null\n ? `${this.config.baseURL}/predictions`\n : `${this.config.baseURL}/models/${modelId}/predictions`,\n\n headers: combineHeaders(await resolve(this.config.headers), headers, {\n prefer: 'wait',\n }),\n\n body: {\n input: {\n prompt,\n aspect_ratio: aspectRatio,\n size,\n seed,\n num_outputs: n,\n ...(providerOptions.replicate ?? {}),\n },\n // for versioned models, include the version in the body:\n ...(version != null ? { version } : {}),\n },\n\n successfulResponseHandler: createJsonResponseHandler(\n replicateImageResponseSchema,\n ),\n failedResponseHandler: replicateFailedResponseHandler,\n abortSignal,\n fetch: this.config.fetch,\n });\n\n // download the images:\n const outputArray = Array.isArray(output) ? output : [output];\n const images = await Promise.all(\n outputArray.map(async url => {\n const { value: image } = await getFromApi({\n url,\n successfulResponseHandler: createBinaryResponseHandler(),\n failedResponseHandler: replicateFailedResponseHandler,\n abortSignal,\n fetch: this.config.fetch,\n });\n return image;\n }),\n );\n\n return {\n images,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n\nconst replicateImageResponseSchema = z.object({\n output: z.union([z.array(z.string()), z.string()]),\n});\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst replicateErrorSchema = z.object({\n detail: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const replicateFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: replicateErrorSchema,\n errorToMessage: error =>\n error.detail ?? error.error ?? 'Unknown Replicate error',\n});\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
// src/replicate-provider.ts
|
|
2
|
+
import { NoSuchModelError } from "@ai-sdk/provider";
|
|
2
3
|
import { loadApiKey } from "@ai-sdk/provider-utils";
|
|
3
4
|
|
|
4
5
|
// src/replicate-image-model.ts
|
|
5
6
|
import {
|
|
6
7
|
combineHeaders,
|
|
8
|
+
createBinaryResponseHandler,
|
|
7
9
|
createJsonResponseHandler,
|
|
10
|
+
getFromApi,
|
|
8
11
|
postJsonToApi,
|
|
9
12
|
resolve
|
|
10
13
|
} from "@ai-sdk/provider-utils";
|
|
@@ -52,12 +55,16 @@ var ReplicateImageModel = class {
|
|
|
52
55
|
}) {
|
|
53
56
|
var _a, _b, _c, _d;
|
|
54
57
|
const warnings = [];
|
|
58
|
+
const [modelId, version] = this.modelId.split(":");
|
|
55
59
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
56
60
|
const {
|
|
57
61
|
value: { output },
|
|
58
62
|
responseHeaders
|
|
59
63
|
} = await postJsonToApi({
|
|
60
|
-
url:
|
|
64
|
+
url: (
|
|
65
|
+
// different endpoints for versioned vs unversioned models:
|
|
66
|
+
version != null ? `${this.config.baseURL}/predictions` : `${this.config.baseURL}/models/${modelId}/predictions`
|
|
67
|
+
),
|
|
61
68
|
headers: combineHeaders(await resolve(this.config.headers), headers, {
|
|
62
69
|
prefer: "wait"
|
|
63
70
|
}),
|
|
@@ -69,20 +76,28 @@ var ReplicateImageModel = class {
|
|
|
69
76
|
seed,
|
|
70
77
|
num_outputs: n,
|
|
71
78
|
...(_d = providerOptions.replicate) != null ? _d : {}
|
|
72
|
-
}
|
|
79
|
+
},
|
|
80
|
+
// for versioned models, include the version in the body:
|
|
81
|
+
...version != null ? { version } : {}
|
|
73
82
|
},
|
|
74
|
-
failedResponseHandler: replicateFailedResponseHandler,
|
|
75
83
|
successfulResponseHandler: createJsonResponseHandler(
|
|
76
84
|
replicateImageResponseSchema
|
|
77
85
|
),
|
|
86
|
+
failedResponseHandler: replicateFailedResponseHandler,
|
|
78
87
|
abortSignal,
|
|
79
88
|
fetch: this.config.fetch
|
|
80
89
|
});
|
|
81
90
|
const outputArray = Array.isArray(output) ? output : [output];
|
|
82
91
|
const images = await Promise.all(
|
|
83
92
|
outputArray.map(async (url) => {
|
|
84
|
-
const
|
|
85
|
-
|
|
93
|
+
const { value: image } = await getFromApi({
|
|
94
|
+
url,
|
|
95
|
+
successfulResponseHandler: createBinaryResponseHandler(),
|
|
96
|
+
failedResponseHandler: replicateFailedResponseHandler,
|
|
97
|
+
abortSignal,
|
|
98
|
+
fetch: this.config.fetch
|
|
99
|
+
});
|
|
100
|
+
return image;
|
|
86
101
|
})
|
|
87
102
|
);
|
|
88
103
|
return {
|
|
@@ -102,21 +117,35 @@ var replicateImageResponseSchema = z2.object({
|
|
|
102
117
|
|
|
103
118
|
// src/replicate-provider.ts
|
|
104
119
|
function createReplicate(options = {}) {
|
|
120
|
+
const createImageModel = (modelId, settings) => {
|
|
121
|
+
var _a;
|
|
122
|
+
return new ReplicateImageModel(modelId, settings != null ? settings : {}, {
|
|
123
|
+
provider: "replicate",
|
|
124
|
+
baseURL: (_a = options.baseURL) != null ? _a : "https://api.replicate.com/v1",
|
|
125
|
+
headers: {
|
|
126
|
+
Authorization: `Bearer ${loadApiKey({
|
|
127
|
+
apiKey: options.apiToken,
|
|
128
|
+
environmentVariableName: "REPLICATE_API_TOKEN",
|
|
129
|
+
description: "Replicate"
|
|
130
|
+
})}`,
|
|
131
|
+
...options.headers
|
|
132
|
+
},
|
|
133
|
+
fetch: options.fetch
|
|
134
|
+
});
|
|
135
|
+
};
|
|
105
136
|
return {
|
|
106
|
-
image:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
119
|
-
fetch: options.fetch
|
|
137
|
+
image: createImageModel,
|
|
138
|
+
imageModel: createImageModel,
|
|
139
|
+
languageModel: () => {
|
|
140
|
+
throw new NoSuchModelError({
|
|
141
|
+
modelId: "languageModel",
|
|
142
|
+
modelType: "languageModel"
|
|
143
|
+
});
|
|
144
|
+
},
|
|
145
|
+
textEmbeddingModel: () => {
|
|
146
|
+
throw new NoSuchModelError({
|
|
147
|
+
modelId: "textEmbeddingModel",
|
|
148
|
+
modelType: "textEmbeddingModel"
|
|
120
149
|
});
|
|
121
150
|
}
|
|
122
151
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/replicate-provider.ts","../src/replicate-image-model.ts","../src/replicate-error.ts"],"sourcesContent":["import type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey } from '@ai-sdk/provider-utils';\nimport { ReplicateImageModel } from './replicate-image-model';\nimport {\n ReplicateImageModelId,\n ReplicateImageSettings,\n} from './replicate-image-settings';\n\nexport interface ReplicateProviderSettings {\n /**\nAPI token that is being send using the `Authorization` header.\nIt defaults to the `REPLICATE_API_TOKEN` environment variable.\n */\n apiToken?: string;\n\n /**\nUse a different URL prefix for API calls, e.g. to use proxy servers.\nThe default prefix is `https://api.replicate.com/v1`.\n */\n baseURL?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\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 ReplicateProvider {\n /**\n * Creates a Replicate image generation model.\n */\n image(\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ): ReplicateImageModel;\n}\n\n/**\n * Create a Replicate provider instance.\n */\nexport function createReplicate(\n options: ReplicateProviderSettings = {},\n): ReplicateProvider {\n
|
|
1
|
+
{"version":3,"sources":["../src/replicate-provider.ts","../src/replicate-image-model.ts","../src/replicate-error.ts"],"sourcesContent":["import { NoSuchModelError, ProviderV1 } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey } from '@ai-sdk/provider-utils';\nimport { ReplicateImageModel } from './replicate-image-model';\nimport {\n ReplicateImageModelId,\n ReplicateImageSettings,\n} from './replicate-image-settings';\n\nexport interface ReplicateProviderSettings {\n /**\nAPI token that is being send using the `Authorization` header.\nIt defaults to the `REPLICATE_API_TOKEN` environment variable.\n */\n apiToken?: string;\n\n /**\nUse a different URL prefix for API calls, e.g. to use proxy servers.\nThe default prefix is `https://api.replicate.com/v1`.\n */\n baseURL?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\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 ReplicateProvider extends ProviderV1 {\n /**\n * Creates a Replicate image generation model.\n */\n image(\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ): ReplicateImageModel;\n\n /**\n * Creates a Replicate image generation model.\n */\n imageModel(\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ): ReplicateImageModel;\n}\n\n/**\n * Create a Replicate provider instance.\n */\nexport function createReplicate(\n options: ReplicateProviderSettings = {},\n): ReplicateProvider {\n const createImageModel = (\n modelId: ReplicateImageModelId,\n settings?: ReplicateImageSettings,\n ) =>\n new ReplicateImageModel(modelId, settings ?? {}, {\n provider: 'replicate',\n baseURL: options.baseURL ?? 'https://api.replicate.com/v1',\n headers: {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiToken,\n environmentVariableName: 'REPLICATE_API_TOKEN',\n description: 'Replicate',\n })}`,\n ...options.headers,\n },\n fetch: options.fetch,\n });\n\n return {\n image: createImageModel,\n imageModel: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n };\n}\n\n/**\n * Default Replicate provider instance.\n */\nexport const replicate = createReplicate();\n","import type { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport type { Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { replicateFailedResponseHandler } from './replicate-error';\nimport {\n ReplicateImageModelId,\n ReplicateImageSettings,\n} from './replicate-image-settings';\n\ninterface ReplicateImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class ReplicateImageModel 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: ReplicateImageModelId,\n private readonly settings: ReplicateImageSettings,\n private readonly config: ReplicateImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n aspectRatio,\n size,\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 const [modelId, version] = this.modelId.split(':');\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const {\n value: { output },\n responseHeaders,\n } = await postJsonToApi({\n url:\n // different endpoints for versioned vs unversioned models:\n version != null\n ? `${this.config.baseURL}/predictions`\n : `${this.config.baseURL}/models/${modelId}/predictions`,\n\n headers: combineHeaders(await resolve(this.config.headers), headers, {\n prefer: 'wait',\n }),\n\n body: {\n input: {\n prompt,\n aspect_ratio: aspectRatio,\n size,\n seed,\n num_outputs: n,\n ...(providerOptions.replicate ?? {}),\n },\n // for versioned models, include the version in the body:\n ...(version != null ? { version } : {}),\n },\n\n successfulResponseHandler: createJsonResponseHandler(\n replicateImageResponseSchema,\n ),\n failedResponseHandler: replicateFailedResponseHandler,\n abortSignal,\n fetch: this.config.fetch,\n });\n\n // download the images:\n const outputArray = Array.isArray(output) ? output : [output];\n const images = await Promise.all(\n outputArray.map(async url => {\n const { value: image } = await getFromApi({\n url,\n successfulResponseHandler: createBinaryResponseHandler(),\n failedResponseHandler: replicateFailedResponseHandler,\n abortSignal,\n fetch: this.config.fetch,\n });\n return image;\n }),\n );\n\n return {\n images,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n\nconst replicateImageResponseSchema = z.object({\n output: z.union([z.array(z.string()), z.string()]),\n});\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst replicateErrorSchema = z.object({\n detail: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const replicateFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: replicateErrorSchema,\n errorToMessage: error =>\n error.detail ?? error.error ?? 'Unknown Replicate error',\n});\n"],"mappings":"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","names":["z","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/replicate",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ai-sdk/provider": "1.0.
|
|
23
|
-
"@ai-sdk/provider-utils": "2.1.
|
|
22
|
+
"@ai-sdk/provider": "1.0.7",
|
|
23
|
+
"@ai-sdk/provider-utils": "2.1.6"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "^18",
|