@sweetretry/ai-sdk-volcengine-adapter 0.1.4 → 0.1.5
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ImageModelV3
|
|
1
|
+
import { ImageModelV3 } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
export type VolcengineImageModelId = 'doubao-seedream-4-5-251128' | 'doubao-seedream-4-0-250828' | (string & {});
|
|
4
4
|
export interface VolcengineImageConfig {
|
|
@@ -14,16 +14,6 @@ export declare class VolcengineImageModel implements ImageModelV3 {
|
|
|
14
14
|
get maxImagesPerCall(): number;
|
|
15
15
|
get provider(): string;
|
|
16
16
|
constructor(modelId: VolcengineImageModelId, config: VolcengineImageConfig);
|
|
17
|
-
doGenerate({ prompt, files, size, aspectRatio, seed, providerOptions, headers, abortSignal, }:
|
|
18
|
-
images: Array<string> | Array<Uint8Array>;
|
|
19
|
-
warnings: Array<SharedV3Warning>;
|
|
20
|
-
providerMetadata?: ImageModelV3ProviderMetadata;
|
|
21
|
-
response: {
|
|
22
|
-
timestamp: Date;
|
|
23
|
-
modelId: string;
|
|
24
|
-
headers: Record<string, string> | undefined;
|
|
25
|
-
};
|
|
26
|
-
usage?: ImageModelV3Usage;
|
|
27
|
-
}>;
|
|
17
|
+
doGenerate({ prompt, files, size, aspectRatio, seed, providerOptions, headers, abortSignal, }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<Awaited<ReturnType<ImageModelV3['doGenerate']>>>;
|
|
28
18
|
private convertFileToDataUrl;
|
|
29
19
|
}
|
|
@@ -30,13 +30,14 @@ export class VolcengineImageModel {
|
|
|
30
30
|
feature: 'seed'
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
|
-
// Build request body
|
|
33
|
+
// Build request body - always use b64_json as AI SDK requires base64 data
|
|
34
|
+
const { response_format: _, ...volcengineOptions } = providerOptions.volcengine ?? {};
|
|
34
35
|
const body = {
|
|
35
36
|
model: this.modelId,
|
|
36
37
|
prompt,
|
|
37
|
-
size: size ?? '
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
size: size ?? '2048x2048',
|
|
39
|
+
...volcengineOptions,
|
|
40
|
+
response_format: 'b64_json'
|
|
40
41
|
};
|
|
41
42
|
// Handle reference images for image-to-image generation
|
|
42
43
|
if (files && files.length > 0) {
|
|
@@ -56,15 +57,12 @@ export class VolcengineImageModel {
|
|
|
56
57
|
abortSignal,
|
|
57
58
|
fetch: this.config.fetch
|
|
58
59
|
});
|
|
59
|
-
// Extract images from response
|
|
60
|
+
// Extract base64 images from response
|
|
60
61
|
const images = response.data.map((item)=>{
|
|
61
|
-
if (item.b64_json) {
|
|
62
|
-
|
|
62
|
+
if (!item.b64_json) {
|
|
63
|
+
throw new Error('No base64 image data in response');
|
|
63
64
|
}
|
|
64
|
-
|
|
65
|
-
return item.url;
|
|
66
|
-
}
|
|
67
|
-
throw new Error('No image data in response');
|
|
65
|
+
return item.b64_json;
|
|
68
66
|
});
|
|
69
67
|
return {
|
|
70
68
|
images,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/image/volcengine-image-model.ts"],"sourcesContent":["import {\n ImageModelV3,\n
|
|
1
|
+
{"version":3,"sources":["../../src/image/volcengine-image-model.ts"],"sourcesContent":["import {\n ImageModelV3,\n ImageModelV3File,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { volcengineFailedResponseHandler } from '../chat/volcengine-error';\nimport { volcengineImageResponseSchema } from './volcengine-image-api';\n\nexport type VolcengineImageModelId =\n | 'doubao-seedream-4-5-251128'\n | 'doubao-seedream-4-0-250828'\n | (string & {});\n\nexport interface VolcengineImageConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n}\n\nexport class VolcengineImageModel implements ImageModelV3 {\n readonly specificationVersion = 'v3' as const;\n\n get maxImagesPerCall(): number {\n return 1;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: VolcengineImageModelId,\n private readonly config: VolcengineImageConfig,\n ) {}\n\n async doGenerate({\n prompt,\n files,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const warnings: SharedV3Warning[] = [];\n\n // Handle unsupported options\n if (aspectRatio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n });\n }\n\n // Build request body - always use b64_json as AI SDK requires base64 data\n const { response_format: _, ...volcengineOptions } =\n (providerOptions.volcengine as Record<string, unknown>) ?? {};\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n prompt,\n size: size ?? '2048x2048',\n ...volcengineOptions,\n response_format: 'b64_json',\n };\n\n // Handle reference images for image-to-image generation\n if (files && files.length > 0) {\n const imageUrls = files.map(file => this.convertFileToDataUrl(file));\n\n if (imageUrls.length === 1) {\n body.image = imageUrls[0];\n } else {\n body.image = imageUrls;\n }\n }\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/images/generations`,\n headers: combineHeaders(this.config.headers(), headers),\n body,\n failedResponseHandler: volcengineFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n volcengineImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n // Extract base64 images from response\n const images: string[] = response.data.map(item => {\n if (!item.b64_json) {\n throw new Error('No base64 image data in response');\n }\n return item.b64_json;\n });\n\n return {\n images,\n warnings,\n response: {\n timestamp: new Date(),\n modelId: response.model ?? this.modelId,\n headers: responseHeaders,\n },\n usage: response.usage\n ? {\n inputTokens: undefined,\n outputTokens: response.usage.output_tokens,\n totalTokens: response.usage.total_tokens,\n }\n : undefined,\n };\n }\n\n private convertFileToDataUrl(file: ImageModelV3File): string {\n if (file.type === 'url') {\n return file.url;\n }\n\n // file.type === \"file\"\n if (typeof file.data === 'string') {\n // base64 string - convert to data URL\n return `data:${file.mediaType};base64,${file.data}`;\n }\n\n // Uint8Array - convert to base64 data URL\n const base64 = btoa(String.fromCharCode(...file.data));\n return `data:${file.mediaType};base64,${base64}`;\n }\n}\n"],"names":["combineHeaders","createJsonResponseHandler","postJsonToApi","volcengineFailedResponseHandler","volcengineImageResponseSchema","VolcengineImageModel","specificationVersion","maxImagesPerCall","provider","config","modelId","doGenerate","prompt","files","size","aspectRatio","seed","providerOptions","headers","abortSignal","warnings","push","type","feature","response_format","_","volcengineOptions","volcengine","body","model","length","imageUrls","map","file","convertFileToDataUrl","image","value","response","responseHeaders","url","baseURL","failedResponseHandler","successfulResponseHandler","fetch","images","data","item","b64_json","Error","timestamp","Date","usage","inputTokens","undefined","outputTokens","output_tokens","totalTokens","total_tokens","mediaType","base64","btoa","String","fromCharCode"],"mappings":"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"}
|