@aigne/doubao 1.3.0 → 1.74.0-beta

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.
Files changed (36) hide show
  1. package/README.md +8 -8
  2. package/dist/doubao-chat-model.cjs +34 -0
  3. package/{lib/dts/doubao-chat-model.d.ts → dist/doubao-chat-model.d.cts} +9 -4
  4. package/dist/doubao-chat-model.d.cts.map +1 -0
  5. package/{lib/cjs/doubao-chat-model.d.ts → dist/doubao-chat-model.d.mts} +9 -4
  6. package/dist/doubao-chat-model.d.mts.map +1 -0
  7. package/dist/doubao-chat-model.mjs +35 -0
  8. package/dist/doubao-chat-model.mjs.map +1 -0
  9. package/dist/doubao-image-model.cjs +180 -0
  10. package/dist/doubao-image-model.d.cts +38 -0
  11. package/dist/doubao-image-model.d.cts.map +1 -0
  12. package/dist/doubao-image-model.d.mts +38 -0
  13. package/dist/doubao-image-model.d.mts.map +1 -0
  14. package/dist/doubao-image-model.mjs +181 -0
  15. package/dist/doubao-image-model.mjs.map +1 -0
  16. package/dist/index.cjs +5 -0
  17. package/dist/index.d.cts +3 -0
  18. package/dist/index.d.mts +3 -0
  19. package/dist/index.mjs +4 -0
  20. package/package.json +29 -30
  21. package/CHANGELOG.md +0 -1967
  22. package/lib/cjs/doubao-chat-model.js +0 -33
  23. package/lib/cjs/doubao-image-model.d.ts +0 -34
  24. package/lib/cjs/doubao-image-model.js +0 -176
  25. package/lib/cjs/index.d.ts +0 -2
  26. package/lib/cjs/index.js +0 -18
  27. package/lib/cjs/package.json +0 -3
  28. package/lib/dts/doubao-image-model.d.ts +0 -34
  29. package/lib/dts/index.d.ts +0 -2
  30. package/lib/esm/doubao-chat-model.d.ts +0 -21
  31. package/lib/esm/doubao-chat-model.js +0 -29
  32. package/lib/esm/doubao-image-model.d.ts +0 -34
  33. package/lib/esm/doubao-image-model.js +0 -172
  34. package/lib/esm/index.d.ts +0 -2
  35. package/lib/esm/index.js +0 -2
  36. package/lib/esm/package.json +0 -3
package/README.md CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
  <p align="center">
4
4
  <picture>
5
- <source srcset="https://raw.githubusercontent.com/AIGNE-io/aigne-framework/main/logo-dark.svg" media="(prefers-color-scheme: dark)">
6
- <source srcset="https://raw.githubusercontent.com/AIGNE-io/aigne-framework/main/logo.svg" media="(prefers-color-scheme: light)">
7
- <img src="https://raw.githubusercontent.com/AIGNE-io/aigne-framework/main/logo.svg" alt="AIGNE Logo" width="400" />
5
+ <source srcset="https://raw.githubusercontent.com/ArcBlock/aigne-framework/main/logo-dark.svg" media="(prefers-color-scheme: dark)">
6
+ <source srcset="https://raw.githubusercontent.com/ArcBlock/aigne-framework/main/logo.svg" media="(prefers-color-scheme: light)">
7
+ <img src="https://raw.githubusercontent.com/ArcBlock/aigne-framework/main/logo.svg" alt="AIGNE Logo" width="400" />
8
8
  </picture>
9
9
  </p>
10
10
 
11
- [![GitHub star chart](https://img.shields.io/github/stars/AIGNE-io/aigne-framework?style=flat-square)](https://star-history.com/#AIGNE-io/aigne-framework)
12
- [![Open Issues](https://img.shields.io/github/issues-raw/AIGNE-io/aigne-framework?style=flat-square)](https://github.com/AIGNE-io/aigne-framework/issues)
13
- [![codecov](https://codecov.io/gh/AIGNE-io/aigne-framework/graph/badge.svg?token=DO07834RQL)](https://codecov.io/gh/AIGNE-io/aigne-framework)
11
+ [![GitHub star chart](https://img.shields.io/github/stars/ArcBlock/aigne-framework?style=flat-square)](https://star-history.com/#ArcBlock/aigne-framework)
12
+ [![Open Issues](https://img.shields.io/github/issues-raw/ArcBlock/aigne-framework?style=flat-square)](https://github.com/ArcBlock/aigne-framework/issues)
13
+ [![codecov](https://codecov.io/gh/ArcBlock/aigne-framework/graph/badge.svg?token=DO07834RQL)](https://codecov.io/gh/ArcBlock/aigne-framework)
14
14
  [![NPM Version](https://img.shields.io/npm/v/@aigne/doubao)](https://www.npmjs.com/package/@aigne/doubao)
15
- [![Elastic-2.0 licensed](https://img.shields.io/npm/l/@aigne/doubao)](https://github.com/AIGNE-io/aigne-framework/blob/main/LICENSE.md)
15
+ [![Elastic-2.0 licensed](https://img.shields.io/npm/l/@aigne/doubao)](https://github.com/ArcBlock/aigne-framework/blob/main/LICENSE.md)
16
16
 
17
- AIGNE Doubao SDK for integrating with Doubao AI models within the [AIGNE Framework](https://github.com/AIGNE-io/aigne-framework).
17
+ AIGNE Doubao SDK for integrating with Doubao AI models within the [AIGNE Framework](https://github.com/ArcBlock/aigne-framework).
18
18
 
19
19
  ## Introduction
20
20
 
@@ -0,0 +1,34 @@
1
+ let _aigne_openai = require("@aigne/openai");
2
+
3
+ //#region src/doubao-chat-model.ts
4
+ const DOUBAO_DEFAULT_CHAT_MODEL = "doubao-seed-1-6-250615";
5
+ const DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3";
6
+ /**
7
+ * Implementation of the ChatModel interface for Doubao's API
8
+ *
9
+ * This model uses OpenAI-compatible API format to interact with Doubao's models,
10
+ * but with specific configuration and capabilities for Doubao.
11
+ *
12
+ * Default model: 'doubao-seed-1-6-250615'
13
+ *
14
+ * @example
15
+ * Here's how to create and use a Doubao chat model:
16
+ * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model}
17
+ *
18
+ * @example
19
+ * Here's an example with streaming response:
20
+ * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model-streaming}
21
+ */
22
+ var DoubaoChatModel = class extends _aigne_openai.OpenAIChatModel {
23
+ constructor(options) {
24
+ super({
25
+ ...options,
26
+ model: options?.model || DOUBAO_DEFAULT_CHAT_MODEL,
27
+ baseURL: options?.baseURL || DOUBAO_BASE_URL
28
+ });
29
+ }
30
+ apiKeyEnvName = "DOUBAO_API_KEY";
31
+ };
32
+
33
+ //#endregion
34
+ exports.DoubaoChatModel = DoubaoChatModel;
@@ -1,4 +1,6 @@
1
- import { OpenAIChatModel, type OpenAIChatModelOptions } from "@aigne/openai";
1
+ import { OpenAIChatModel, OpenAIChatModelOptions } from "@aigne/openai";
2
+
3
+ //#region src/doubao-chat-model.d.ts
2
4
  /**
3
5
  * Implementation of the ChatModel interface for Doubao's API
4
6
  *
@@ -15,7 +17,10 @@ import { OpenAIChatModel, type OpenAIChatModelOptions } from "@aigne/openai";
15
17
  * Here's an example with streaming response:
16
18
  * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model-streaming}
17
19
  */
18
- export declare class DoubaoChatModel extends OpenAIChatModel {
19
- constructor(options?: OpenAIChatModelOptions);
20
- protected apiKeyEnvName: string;
20
+ declare class DoubaoChatModel extends OpenAIChatModel {
21
+ constructor(options?: OpenAIChatModelOptions);
22
+ protected apiKeyEnvName: string;
21
23
  }
24
+ //#endregion
25
+ export { DoubaoChatModel };
26
+ //# sourceMappingURL=doubao-chat-model.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-chat-model.d.cts","names":[],"sources":["../src/doubao-chat-model.ts"],"mappings":";;;;AAqBA;;;;;;;;;;;;;;;cAAa,eAAA,SAAwB,eAAA;EAAA,YAAA,OAAA,GACb,sBAAA;EAAA,UAAA,aAAA;AAAA"}
@@ -1,4 +1,6 @@
1
- import { OpenAIChatModel, type OpenAIChatModelOptions } from "@aigne/openai";
1
+ import { OpenAIChatModel, OpenAIChatModelOptions } from "@aigne/openai";
2
+
3
+ //#region src/doubao-chat-model.d.ts
2
4
  /**
3
5
  * Implementation of the ChatModel interface for Doubao's API
4
6
  *
@@ -15,7 +17,10 @@ import { OpenAIChatModel, type OpenAIChatModelOptions } from "@aigne/openai";
15
17
  * Here's an example with streaming response:
16
18
  * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model-streaming}
17
19
  */
18
- export declare class DoubaoChatModel extends OpenAIChatModel {
19
- constructor(options?: OpenAIChatModelOptions);
20
- protected apiKeyEnvName: string;
20
+ declare class DoubaoChatModel extends OpenAIChatModel {
21
+ constructor(options?: OpenAIChatModelOptions);
22
+ protected apiKeyEnvName: string;
21
23
  }
24
+ //#endregion
25
+ export { DoubaoChatModel };
26
+ //# sourceMappingURL=doubao-chat-model.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-chat-model.d.mts","names":[],"sources":["../src/doubao-chat-model.ts"],"mappings":";;;;AAqBA;;;;;;;;;;;;;;;cAAa,eAAA,SAAwB,eAAA;EAAA,YAAA,OAAA,GACb,sBAAA;EAAA,UAAA,aAAA;AAAA"}
@@ -0,0 +1,35 @@
1
+ import { OpenAIChatModel } from "@aigne/openai";
2
+
3
+ //#region src/doubao-chat-model.ts
4
+ const DOUBAO_DEFAULT_CHAT_MODEL = "doubao-seed-1-6-250615";
5
+ const DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3";
6
+ /**
7
+ * Implementation of the ChatModel interface for Doubao's API
8
+ *
9
+ * This model uses OpenAI-compatible API format to interact with Doubao's models,
10
+ * but with specific configuration and capabilities for Doubao.
11
+ *
12
+ * Default model: 'doubao-seed-1-6-250615'
13
+ *
14
+ * @example
15
+ * Here's how to create and use a Doubao chat model:
16
+ * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model}
17
+ *
18
+ * @example
19
+ * Here's an example with streaming response:
20
+ * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model-streaming}
21
+ */
22
+ var DoubaoChatModel = class extends OpenAIChatModel {
23
+ constructor(options) {
24
+ super({
25
+ ...options,
26
+ model: options?.model || DOUBAO_DEFAULT_CHAT_MODEL,
27
+ baseURL: options?.baseURL || DOUBAO_BASE_URL
28
+ });
29
+ }
30
+ apiKeyEnvName = "DOUBAO_API_KEY";
31
+ };
32
+
33
+ //#endregion
34
+ export { DoubaoChatModel };
35
+ //# sourceMappingURL=doubao-chat-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-chat-model.mjs","names":[],"sources":["../src/doubao-chat-model.ts"],"sourcesContent":["import { OpenAIChatModel, type OpenAIChatModelOptions } from \"@aigne/openai\";\n\nconst DOUBAO_DEFAULT_CHAT_MODEL = \"doubao-seed-1-6-250615\";\nconst DOUBAO_BASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\";\n\n/**\n * Implementation of the ChatModel interface for Doubao's API\n *\n * This model uses OpenAI-compatible API format to interact with Doubao's models,\n * but with specific configuration and capabilities for Doubao.\n *\n * Default model: 'doubao-seed-1-6-250615'\n *\n * @example\n * Here's how to create and use a Doubao chat model:\n * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model}\n *\n * @example\n * Here's an example with streaming response:\n * {@includeCode ../test/doubao-chat-model.test.ts#example-doubao-chat-model-streaming}\n */\nexport class DoubaoChatModel extends OpenAIChatModel {\n constructor(options?: OpenAIChatModelOptions) {\n super({\n ...options,\n model: options?.model || DOUBAO_DEFAULT_CHAT_MODEL,\n baseURL: options?.baseURL || DOUBAO_BASE_URL,\n });\n }\n\n protected override apiKeyEnvName = \"DOUBAO_API_KEY\";\n}\n"],"mappings":";;;AAEA,MAAM,4BAA4B;AAClC,MAAM,kBAAkB;;;;;;;;;;;;;;;;;AAkBxB,IAAa,kBAAb,cAAqC,gBAAgB;CACnD,YAAY,SAAkC;AAC5C,QAAM;GACJ,GAAG;GACH,OAAO,SAAS,SAAS;GACzB,SAAS,SAAS,WAAW;GAC9B,CAAC;;CAGJ,AAAmB,gBAAgB"}
@@ -0,0 +1,180 @@
1
+ let _aigne_core = require("@aigne/core");
2
+ let _aigne_core_utils_camelize = require("@aigne/core/utils/camelize");
3
+ let _aigne_core_utils_fetch = require("@aigne/core/utils/fetch");
4
+ let _aigne_core_utils_type_utils = require("@aigne/core/utils/type-utils");
5
+ let ufo = require("ufo");
6
+ let zod = require("zod");
7
+
8
+ //#region src/doubao-image-model.ts
9
+ const DOUBAO_DEFAULT_IMAGE_MODEL = "doubao-seedream-4-0-250828";
10
+ const DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3";
11
+ const OUTPUT_MIME_TYPE = "image/jpeg";
12
+ const doubaoImageModelInputSchema = _aigne_core.imageModelInputSchema.extend({});
13
+ const doubaoImageModelOptionsSchema = zod.z.object({
14
+ apiKey: zod.z.string().optional(),
15
+ baseURL: zod.z.string().optional(),
16
+ model: zod.z.string().optional(),
17
+ modelOptions: zod.z.object({}).optional(),
18
+ clientOptions: zod.z.object({}).optional()
19
+ });
20
+ var DoubaoImageModel = class extends _aigne_core.ImageModel {
21
+ constructor(options) {
22
+ super({
23
+ ...options,
24
+ inputSchema: doubaoImageModelInputSchema,
25
+ description: options?.description ?? "Draw or edit image by Doubao image models"
26
+ });
27
+ this.options = options;
28
+ if (options) (0, _aigne_core_utils_type_utils.checkArguments)(this.name, doubaoImageModelOptionsSchema, options);
29
+ }
30
+ apiKeyEnvName = "DOUBAO_API_KEY";
31
+ get credential() {
32
+ return {
33
+ url: this.options?.baseURL || process.env.DOUBAO_BASE_URL || DOUBAO_BASE_URL,
34
+ apiKey: this.options?.apiKey || process.env[this.apiKeyEnvName],
35
+ model: this.options?.model || DOUBAO_DEFAULT_IMAGE_MODEL
36
+ };
37
+ }
38
+ get modelOptions() {
39
+ return this.options?.modelOptions;
40
+ }
41
+ extractDataObjects(text) {
42
+ const dataObjects = [];
43
+ const lines = text.split("\n");
44
+ for (const line of lines) {
45
+ const trimmed = line.trim();
46
+ if (trimmed.startsWith("data:")) {
47
+ const jsonPart = trimmed.slice(5).trim();
48
+ if (jsonPart === "[DONE]") continue;
49
+ try {
50
+ const obj = JSON.parse(jsonPart);
51
+ dataObjects.push(obj);
52
+ } catch (e) {
53
+ console.warn("Failed to parse JSON data object:", jsonPart, e);
54
+ }
55
+ }
56
+ }
57
+ return dataObjects;
58
+ }
59
+ async process(input, _options) {
60
+ const model = input.modelOptions?.model || this.credential.model;
61
+ const { url, apiKey } = this.credential;
62
+ if (!apiKey) throw new Error(`${this.name} requires an API key. Please provide it via \`options.apiKey\`, or set the \`${this.apiKeyEnvName}\` environment variable`);
63
+ const map = {
64
+ "doubao-seedream-4": [
65
+ "model",
66
+ "prompt",
67
+ "size",
68
+ "sequentialImageGeneration",
69
+ "sequentialImageGenerationOptions",
70
+ "stream",
71
+ "responseFormat",
72
+ "watermark"
73
+ ],
74
+ "doubao-seedream-3-0-t2i": [
75
+ "model",
76
+ "prompt",
77
+ "size",
78
+ "seed",
79
+ "guidanceScale",
80
+ "responseFormat",
81
+ "watermark"
82
+ ],
83
+ "doubao-seededit-3-0-i2i": [
84
+ "model",
85
+ "prompt",
86
+ "size",
87
+ "seed",
88
+ "guidanceScale",
89
+ "responseFormat",
90
+ "watermark"
91
+ ]
92
+ };
93
+ const key = Object.keys(map).find((key$1) => model.includes(key$1));
94
+ if (!key) throw new Error(`${this.name} only support ${Object.keys(map).join(", ")}`);
95
+ if (!map[key]) throw new Error(`${this.name} only support ${Object.keys(map).join(", ")}`);
96
+ const mergeInput = {
97
+ ...this.modelOptions,
98
+ ...input.modelOptions,
99
+ ...input
100
+ };
101
+ const image = await Promise.all((0, _aigne_core_utils_type_utils.flat)(input.image).map((image$1) => this.transformFileType("file", image$1).then((file) => `data:${file.mimeType || "image/png"};base64,${file.data}`)));
102
+ const body = {
103
+ ...(0, _aigne_core_utils_camelize.snakelize)((0, _aigne_core_utils_type_utils.pick)(mergeInput, map[key])),
104
+ model,
105
+ response_format: "b64_json",
106
+ watermark: mergeInput.watermark ?? false,
107
+ image: image.length ? image : void 0
108
+ };
109
+ const response = await (0, _aigne_core_utils_fetch.fetch)((0, ufo.joinURL)(url, `/images/generations`), {
110
+ method: "POST",
111
+ headers: {
112
+ Authorization: `Bearer ${apiKey}`,
113
+ "Content-Type": "application/json"
114
+ },
115
+ body: JSON.stringify(body),
116
+ timeout: this.options?.clientOptions?.timeout ?? 60 * 1e3
117
+ });
118
+ if (body.stream) {
119
+ if (!response.body) throw new Error("Streaming not supported in this environment");
120
+ const reader = response.body.getReader();
121
+ const decoder = new TextDecoder();
122
+ let done = false;
123
+ let buffer = "";
124
+ while (!done) {
125
+ const { value, done: doneReading } = await reader.read();
126
+ done = doneReading;
127
+ if (value) buffer += decoder.decode(value);
128
+ }
129
+ const dataObjects = this.extractDataObjects(buffer);
130
+ const error = dataObjects.find((i) => i.type === "image_generation.partial_failed");
131
+ if (error) throw new Error(`Doubao API error: ${error.error.message}`);
132
+ const completed = dataObjects.find((i) => i.type === "image_generation.completed");
133
+ return {
134
+ images: dataObjects.filter((i) => i.type === "image_generation.partial_succeeded").map((i) => {
135
+ if (typeof i.url === "string") return {
136
+ type: "url",
137
+ url: i.url,
138
+ mimeType: OUTPUT_MIME_TYPE
139
+ };
140
+ if (typeof i.b64_json === "string") return {
141
+ type: "file",
142
+ data: i.b64_json,
143
+ mimeType: OUTPUT_MIME_TYPE
144
+ };
145
+ throw new Error("Image response does not contain a valid URL or base64 data");
146
+ }),
147
+ usage: {
148
+ inputTokens: 0,
149
+ outputTokens: completed?.usage.output_tokens || 0
150
+ },
151
+ model
152
+ };
153
+ }
154
+ const data = await response.json();
155
+ if (data.error) throw new Error(`Doubao API error: ${data.error.message}`);
156
+ return {
157
+ images: data.data.map((item) => {
158
+ if (item.url) return {
159
+ type: "url",
160
+ url: item.url,
161
+ mimeType: OUTPUT_MIME_TYPE
162
+ };
163
+ if (item.b64_json) return {
164
+ type: "file",
165
+ data: item.b64_json,
166
+ mimeType: OUTPUT_MIME_TYPE
167
+ };
168
+ throw new Error("Image response does not contain a valid URL or base64 data");
169
+ }),
170
+ usage: {
171
+ inputTokens: 0,
172
+ outputTokens: data?.usage?.output_tokens || 0
173
+ },
174
+ model: data.model
175
+ };
176
+ }
177
+ };
178
+
179
+ //#endregion
180
+ exports.DoubaoImageModel = DoubaoImageModel;
@@ -0,0 +1,38 @@
1
+ import { AgentInvokeOptions, ImageModel, ImageModelInput, ImageModelOptions, ImageModelOutput } from "@aigne/core";
2
+
3
+ //#region src/doubao-image-model.d.ts
4
+ interface DoubaoImageModelInput extends ImageModelInput {
5
+ size?: string;
6
+ seed?: number;
7
+ sequentialImageGeneration?: boolean;
8
+ sequentialImageGenerationOptions?: {
9
+ maxImages: number;
10
+ };
11
+ stream?: boolean;
12
+ guidanceScale?: number;
13
+ watermark?: boolean;
14
+ }
15
+ interface DoubaoImageModelOutput extends ImageModelOutput {}
16
+ interface DoubaoImageModelOptions extends ImageModelOptions<DoubaoImageModelInput, DoubaoImageModelOutput> {
17
+ apiKey?: string;
18
+ baseURL?: string;
19
+ model?: string;
20
+ modelOptions?: Omit<Partial<DoubaoImageModelInput>, "model">;
21
+ clientOptions?: Record<string, any>;
22
+ }
23
+ declare class DoubaoImageModel extends ImageModel<DoubaoImageModelInput, DoubaoImageModelOutput> {
24
+ options?: DoubaoImageModelOptions | undefined;
25
+ constructor(options?: DoubaoImageModelOptions | undefined);
26
+ protected apiKeyEnvName: string;
27
+ get credential(): {
28
+ url: string;
29
+ apiKey: string | undefined;
30
+ model: string;
31
+ };
32
+ get modelOptions(): Omit<Partial<DoubaoImageModelInput>, "model"> | undefined;
33
+ private extractDataObjects;
34
+ process(input: DoubaoImageModelInput, _options: AgentInvokeOptions): Promise<ImageModelOutput>;
35
+ }
36
+ //#endregion
37
+ export { DoubaoImageModel, DoubaoImageModelInput, DoubaoImageModelOptions, DoubaoImageModelOutput };
38
+ //# sourceMappingURL=doubao-image-model.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-image-model.d.cts","names":[],"sources":["../src/doubao-image-model.ts"],"mappings":";;;UAmBiB,qBAAA,SAA8B,eAAA;EAAA,IAAA;EAAA,IAAA;EAAA,yBAAA;EAAA,gCAAA;IAAA,SAAA;EAAA;EAAA,MAAA;EAAA,aAAA;EAAA,SAAA;AAAA;AAAA,UAY9B,sBAAA,SAA+B,gBAAA;AAAA,UAE/B,uBAAA,SACP,iBAAA,CAAkB,qBAAA,EAAuB,sBAAA;EAAA,MAAA;EAAA,OAAA;EAAA,KAAA;EAAA,YAAA,GAIlC,IAAA,CAAK,OAAA,CAAQ,qBAAA;EAAA,aAAA,GACZ,MAAA;AAAA;AAAA,cAaL,gBAAA,SAAyB,UAAA,CAAW,qBAAA,EAAuB,sBAAA;EAAA,OAAA,GAChC,uBAAA;EAAA,YAAA,OAAA,GAAA,uBAAA;EAAA,UAAA,aAAA;EAAA,IAAA,WAAA;IAAA,GAAA;IAAA,MAAA;IAAA,KAAA;EAAA;EAAA,IAAA,aAAA,GAoBtB,IAAA,CAAA,OAAA,CAAA,qBAAA;EAAA,QAAA,kBAAA;EAAA,QAAA,KAAA,EA4BP,qBAAA,EAAA,QAAA,EACG,kBAAA,GACT,OAAA,CAAQ,gBAAA;AAAA"}
@@ -0,0 +1,38 @@
1
+ import { AgentInvokeOptions, ImageModel, ImageModelInput, ImageModelOptions, ImageModelOutput } from "@aigne/core";
2
+
3
+ //#region src/doubao-image-model.d.ts
4
+ interface DoubaoImageModelInput extends ImageModelInput {
5
+ size?: string;
6
+ seed?: number;
7
+ sequentialImageGeneration?: boolean;
8
+ sequentialImageGenerationOptions?: {
9
+ maxImages: number;
10
+ };
11
+ stream?: boolean;
12
+ guidanceScale?: number;
13
+ watermark?: boolean;
14
+ }
15
+ interface DoubaoImageModelOutput extends ImageModelOutput {}
16
+ interface DoubaoImageModelOptions extends ImageModelOptions<DoubaoImageModelInput, DoubaoImageModelOutput> {
17
+ apiKey?: string;
18
+ baseURL?: string;
19
+ model?: string;
20
+ modelOptions?: Omit<Partial<DoubaoImageModelInput>, "model">;
21
+ clientOptions?: Record<string, any>;
22
+ }
23
+ declare class DoubaoImageModel extends ImageModel<DoubaoImageModelInput, DoubaoImageModelOutput> {
24
+ options?: DoubaoImageModelOptions | undefined;
25
+ constructor(options?: DoubaoImageModelOptions | undefined);
26
+ protected apiKeyEnvName: string;
27
+ get credential(): {
28
+ url: string;
29
+ apiKey: string | undefined;
30
+ model: string;
31
+ };
32
+ get modelOptions(): Omit<Partial<DoubaoImageModelInput>, "model"> | undefined;
33
+ private extractDataObjects;
34
+ process(input: DoubaoImageModelInput, _options: AgentInvokeOptions): Promise<ImageModelOutput>;
35
+ }
36
+ //#endregion
37
+ export { DoubaoImageModel, DoubaoImageModelInput, DoubaoImageModelOptions, DoubaoImageModelOutput };
38
+ //# sourceMappingURL=doubao-image-model.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-image-model.d.mts","names":[],"sources":["../src/doubao-image-model.ts"],"mappings":";;;UAmBiB,qBAAA,SAA8B,eAAA;EAAA,IAAA;EAAA,IAAA;EAAA,yBAAA;EAAA,gCAAA;IAAA,SAAA;EAAA;EAAA,MAAA;EAAA,aAAA;EAAA,SAAA;AAAA;AAAA,UAY9B,sBAAA,SAA+B,gBAAA;AAAA,UAE/B,uBAAA,SACP,iBAAA,CAAkB,qBAAA,EAAuB,sBAAA;EAAA,MAAA;EAAA,OAAA;EAAA,KAAA;EAAA,YAAA,GAIlC,IAAA,CAAK,OAAA,CAAQ,qBAAA;EAAA,aAAA,GACZ,MAAA;AAAA;AAAA,cAaL,gBAAA,SAAyB,UAAA,CAAW,qBAAA,EAAuB,sBAAA;EAAA,OAAA,GAChC,uBAAA;EAAA,YAAA,OAAA,GAAA,uBAAA;EAAA,UAAA,aAAA;EAAA,IAAA,WAAA;IAAA,GAAA;IAAA,MAAA;IAAA,KAAA;EAAA;EAAA,IAAA,aAAA,GAoBtB,IAAA,CAAA,OAAA,CAAA,qBAAA;EAAA,QAAA,kBAAA;EAAA,QAAA,KAAA,EA4BP,qBAAA,EAAA,QAAA,EACG,kBAAA,GACT,OAAA,CAAQ,gBAAA;AAAA"}
@@ -0,0 +1,181 @@
1
+ import { ImageModel, imageModelInputSchema } from "@aigne/core";
2
+ import { snakelize } from "@aigne/core/utils/camelize";
3
+ import { fetch } from "@aigne/core/utils/fetch";
4
+ import { checkArguments, flat, pick } from "@aigne/core/utils/type-utils";
5
+ import { joinURL } from "ufo";
6
+ import { z } from "zod";
7
+
8
+ //#region src/doubao-image-model.ts
9
+ const DOUBAO_DEFAULT_IMAGE_MODEL = "doubao-seedream-4-0-250828";
10
+ const DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3";
11
+ const OUTPUT_MIME_TYPE = "image/jpeg";
12
+ const doubaoImageModelInputSchema = imageModelInputSchema.extend({});
13
+ const doubaoImageModelOptionsSchema = z.object({
14
+ apiKey: z.string().optional(),
15
+ baseURL: z.string().optional(),
16
+ model: z.string().optional(),
17
+ modelOptions: z.object({}).optional(),
18
+ clientOptions: z.object({}).optional()
19
+ });
20
+ var DoubaoImageModel = class extends ImageModel {
21
+ constructor(options) {
22
+ super({
23
+ ...options,
24
+ inputSchema: doubaoImageModelInputSchema,
25
+ description: options?.description ?? "Draw or edit image by Doubao image models"
26
+ });
27
+ this.options = options;
28
+ if (options) checkArguments(this.name, doubaoImageModelOptionsSchema, options);
29
+ }
30
+ apiKeyEnvName = "DOUBAO_API_KEY";
31
+ get credential() {
32
+ return {
33
+ url: this.options?.baseURL || process.env.DOUBAO_BASE_URL || DOUBAO_BASE_URL,
34
+ apiKey: this.options?.apiKey || process.env[this.apiKeyEnvName],
35
+ model: this.options?.model || DOUBAO_DEFAULT_IMAGE_MODEL
36
+ };
37
+ }
38
+ get modelOptions() {
39
+ return this.options?.modelOptions;
40
+ }
41
+ extractDataObjects(text) {
42
+ const dataObjects = [];
43
+ const lines = text.split("\n");
44
+ for (const line of lines) {
45
+ const trimmed = line.trim();
46
+ if (trimmed.startsWith("data:")) {
47
+ const jsonPart = trimmed.slice(5).trim();
48
+ if (jsonPart === "[DONE]") continue;
49
+ try {
50
+ const obj = JSON.parse(jsonPart);
51
+ dataObjects.push(obj);
52
+ } catch (e) {
53
+ console.warn("Failed to parse JSON data object:", jsonPart, e);
54
+ }
55
+ }
56
+ }
57
+ return dataObjects;
58
+ }
59
+ async process(input, _options) {
60
+ const model = input.modelOptions?.model || this.credential.model;
61
+ const { url, apiKey } = this.credential;
62
+ if (!apiKey) throw new Error(`${this.name} requires an API key. Please provide it via \`options.apiKey\`, or set the \`${this.apiKeyEnvName}\` environment variable`);
63
+ const map = {
64
+ "doubao-seedream-4": [
65
+ "model",
66
+ "prompt",
67
+ "size",
68
+ "sequentialImageGeneration",
69
+ "sequentialImageGenerationOptions",
70
+ "stream",
71
+ "responseFormat",
72
+ "watermark"
73
+ ],
74
+ "doubao-seedream-3-0-t2i": [
75
+ "model",
76
+ "prompt",
77
+ "size",
78
+ "seed",
79
+ "guidanceScale",
80
+ "responseFormat",
81
+ "watermark"
82
+ ],
83
+ "doubao-seededit-3-0-i2i": [
84
+ "model",
85
+ "prompt",
86
+ "size",
87
+ "seed",
88
+ "guidanceScale",
89
+ "responseFormat",
90
+ "watermark"
91
+ ]
92
+ };
93
+ const key = Object.keys(map).find((key$1) => model.includes(key$1));
94
+ if (!key) throw new Error(`${this.name} only support ${Object.keys(map).join(", ")}`);
95
+ if (!map[key]) throw new Error(`${this.name} only support ${Object.keys(map).join(", ")}`);
96
+ const mergeInput = {
97
+ ...this.modelOptions,
98
+ ...input.modelOptions,
99
+ ...input
100
+ };
101
+ const image = await Promise.all(flat(input.image).map((image$1) => this.transformFileType("file", image$1).then((file) => `data:${file.mimeType || "image/png"};base64,${file.data}`)));
102
+ const body = {
103
+ ...snakelize(pick(mergeInput, map[key])),
104
+ model,
105
+ response_format: "b64_json",
106
+ watermark: mergeInput.watermark ?? false,
107
+ image: image.length ? image : void 0
108
+ };
109
+ const response = await fetch(joinURL(url, `/images/generations`), {
110
+ method: "POST",
111
+ headers: {
112
+ Authorization: `Bearer ${apiKey}`,
113
+ "Content-Type": "application/json"
114
+ },
115
+ body: JSON.stringify(body),
116
+ timeout: this.options?.clientOptions?.timeout ?? 60 * 1e3
117
+ });
118
+ if (body.stream) {
119
+ if (!response.body) throw new Error("Streaming not supported in this environment");
120
+ const reader = response.body.getReader();
121
+ const decoder = new TextDecoder();
122
+ let done = false;
123
+ let buffer = "";
124
+ while (!done) {
125
+ const { value, done: doneReading } = await reader.read();
126
+ done = doneReading;
127
+ if (value) buffer += decoder.decode(value);
128
+ }
129
+ const dataObjects = this.extractDataObjects(buffer);
130
+ const error = dataObjects.find((i) => i.type === "image_generation.partial_failed");
131
+ if (error) throw new Error(`Doubao API error: ${error.error.message}`);
132
+ const completed = dataObjects.find((i) => i.type === "image_generation.completed");
133
+ return {
134
+ images: dataObjects.filter((i) => i.type === "image_generation.partial_succeeded").map((i) => {
135
+ if (typeof i.url === "string") return {
136
+ type: "url",
137
+ url: i.url,
138
+ mimeType: OUTPUT_MIME_TYPE
139
+ };
140
+ if (typeof i.b64_json === "string") return {
141
+ type: "file",
142
+ data: i.b64_json,
143
+ mimeType: OUTPUT_MIME_TYPE
144
+ };
145
+ throw new Error("Image response does not contain a valid URL or base64 data");
146
+ }),
147
+ usage: {
148
+ inputTokens: 0,
149
+ outputTokens: completed?.usage.output_tokens || 0
150
+ },
151
+ model
152
+ };
153
+ }
154
+ const data = await response.json();
155
+ if (data.error) throw new Error(`Doubao API error: ${data.error.message}`);
156
+ return {
157
+ images: data.data.map((item) => {
158
+ if (item.url) return {
159
+ type: "url",
160
+ url: item.url,
161
+ mimeType: OUTPUT_MIME_TYPE
162
+ };
163
+ if (item.b64_json) return {
164
+ type: "file",
165
+ data: item.b64_json,
166
+ mimeType: OUTPUT_MIME_TYPE
167
+ };
168
+ throw new Error("Image response does not contain a valid URL or base64 data");
169
+ }),
170
+ usage: {
171
+ inputTokens: 0,
172
+ outputTokens: data?.usage?.output_tokens || 0
173
+ },
174
+ model: data.model
175
+ };
176
+ }
177
+ };
178
+
179
+ //#endregion
180
+ export { DoubaoImageModel };
181
+ //# sourceMappingURL=doubao-image-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-image-model.mjs","names":["key","image"],"sources":["../src/doubao-image-model.ts"],"sourcesContent":["import {\n type AgentInvokeOptions,\n type FileUnionContent,\n ImageModel,\n type ImageModelInput,\n type ImageModelOptions,\n type ImageModelOutput,\n imageModelInputSchema,\n} from \"@aigne/core\";\nimport { snakelize } from \"@aigne/core/utils/camelize\";\nimport { fetch } from \"@aigne/core/utils/fetch\";\nimport { checkArguments, flat, pick } from \"@aigne/core/utils/type-utils\";\nimport { joinURL } from \"ufo\";\nimport { z } from \"zod\";\n\nconst DOUBAO_DEFAULT_IMAGE_MODEL = \"doubao-seedream-4-0-250828\";\nconst DOUBAO_BASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\";\nconst OUTPUT_MIME_TYPE = \"image/jpeg\";\n\nexport interface DoubaoImageModelInput extends ImageModelInput {\n size?: string;\n seed?: number;\n sequentialImageGeneration?: boolean;\n sequentialImageGenerationOptions?: {\n maxImages: number;\n };\n stream?: boolean;\n guidanceScale?: number;\n watermark?: boolean;\n}\n\nexport interface DoubaoImageModelOutput extends ImageModelOutput {}\n\nexport interface DoubaoImageModelOptions\n extends ImageModelOptions<DoubaoImageModelInput, DoubaoImageModelOutput> {\n apiKey?: string;\n baseURL?: string;\n model?: string;\n modelOptions?: Omit<Partial<DoubaoImageModelInput>, \"model\">;\n clientOptions?: Record<string, any>;\n}\n\nconst doubaoImageModelInputSchema = imageModelInputSchema.extend({});\n\nconst doubaoImageModelOptionsSchema = z.object({\n apiKey: z.string().optional(),\n baseURL: z.string().optional(),\n model: z.string().optional(),\n modelOptions: z.object({}).optional(),\n clientOptions: z.object({}).optional(),\n});\n\nexport class DoubaoImageModel extends ImageModel<DoubaoImageModelInput, DoubaoImageModelOutput> {\n constructor(public override options?: DoubaoImageModelOptions) {\n super({\n ...options,\n inputSchema: doubaoImageModelInputSchema,\n description: options?.description ?? \"Draw or edit image by Doubao image models\",\n });\n\n if (options) checkArguments(this.name, doubaoImageModelOptionsSchema, options);\n }\n\n protected apiKeyEnvName = \"DOUBAO_API_KEY\";\n\n override get credential() {\n return {\n url: this.options?.baseURL || process.env.DOUBAO_BASE_URL || DOUBAO_BASE_URL,\n apiKey: this.options?.apiKey || process.env[this.apiKeyEnvName],\n model: this.options?.model || DOUBAO_DEFAULT_IMAGE_MODEL,\n };\n }\n\n get modelOptions() {\n return this.options?.modelOptions;\n }\n\n private extractDataObjects(text: string) {\n const dataObjects = [];\n const lines = text.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (trimmed.startsWith(\"data:\")) {\n const jsonPart = trimmed.slice(5).trim();\n if (jsonPart === \"[DONE]\") continue;\n\n try {\n const obj = JSON.parse(jsonPart);\n dataObjects.push(obj);\n } catch (e) {\n console.warn(\"Failed to parse JSON data object:\", jsonPart, e);\n }\n }\n }\n\n return dataObjects;\n }\n\n override async process(\n input: DoubaoImageModelInput,\n _options: AgentInvokeOptions,\n ): Promise<ImageModelOutput> {\n const model = input.modelOptions?.model || this.credential.model;\n const { url, apiKey } = this.credential;\n if (!apiKey) {\n throw new Error(\n `${this.name} requires an API key. Please provide it via \\`options.apiKey\\`, or set the \\`${this.apiKeyEnvName}\\` environment variable`,\n );\n }\n\n const map: { [key: string]: string[] } = {\n \"doubao-seedream-4\": [\n \"model\",\n \"prompt\",\n \"size\",\n \"sequentialImageGeneration\",\n \"sequentialImageGenerationOptions\",\n \"stream\",\n \"responseFormat\",\n \"watermark\",\n ],\n \"doubao-seedream-3-0-t2i\": [\n \"model\",\n \"prompt\",\n \"size\",\n \"seed\",\n \"guidanceScale\",\n \"responseFormat\",\n \"watermark\",\n ],\n \"doubao-seededit-3-0-i2i\": [\n \"model\",\n \"prompt\",\n \"size\",\n \"seed\",\n \"guidanceScale\",\n \"responseFormat\",\n \"watermark\",\n ],\n };\n\n const key = Object.keys(map).find((key) => model.includes(key));\n if (!key) {\n throw new Error(`${this.name} only support ${Object.keys(map).join(\", \")}`);\n }\n\n if (!map[key]) {\n throw new Error(`${this.name} only support ${Object.keys(map).join(\", \")}`);\n }\n\n const mergeInput = { ...this.modelOptions, ...input.modelOptions, ...input };\n\n const image = await Promise.all(\n flat(input.image).map((image) =>\n this.transformFileType(\"file\", image).then(\n (file) => `data:${file.mimeType || \"image/png\"};base64,${file.data}`,\n ),\n ),\n );\n\n const body = {\n ...snakelize(pick(mergeInput, map[key])),\n model,\n response_format: \"b64_json\",\n watermark: mergeInput.watermark ?? false,\n image: image.length ? image : undefined,\n };\n\n const response = await fetch(joinURL(url, `/images/generations`), {\n method: \"POST\",\n headers: { Authorization: `Bearer ${apiKey}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n timeout: this.options?.clientOptions?.timeout ?? 60 * 1000,\n });\n\n if (body.stream) {\n if (!response.body) throw new Error(\"Streaming not supported in this environment\");\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let done = false;\n let buffer = \"\";\n\n while (!done) {\n const { value, done: doneReading } = await reader.read();\n done = doneReading;\n if (value) {\n buffer += decoder.decode(value);\n }\n }\n\n const dataObjects = this.extractDataObjects(buffer);\n const error = dataObjects.find((i) => i.type === \"image_generation.partial_failed\");\n if (error) {\n throw new Error(`Doubao API error: ${error.error.message}`);\n }\n\n const completed = dataObjects.find((i) => i.type === \"image_generation.completed\");\n\n return {\n images: dataObjects\n .filter((i) => i.type === \"image_generation.partial_succeeded\")\n .map<FileUnionContent>((i) => {\n if (typeof i.url === \"string\")\n return { type: \"url\", url: i.url, mimeType: OUTPUT_MIME_TYPE };\n if (typeof i.b64_json === \"string\")\n return { type: \"file\", data: i.b64_json, mimeType: OUTPUT_MIME_TYPE };\n throw new Error(\"Image response does not contain a valid URL or base64 data\");\n }),\n usage: { inputTokens: 0, outputTokens: completed?.usage.output_tokens || 0 },\n model: model,\n };\n }\n\n const data: {\n model: string;\n usage?: { output_tokens?: number };\n data: { url?: string; b64_json?: string }[];\n error?: { message: string };\n } = await response.json();\n\n if (data.error) {\n throw new Error(`Doubao API error: ${data.error.message}`);\n }\n\n return {\n images: data.data.map<FileUnionContent>((item) => {\n if (item.url) return { type: \"url\", url: item.url, mimeType: OUTPUT_MIME_TYPE };\n if (item.b64_json) return { type: \"file\", data: item.b64_json, mimeType: OUTPUT_MIME_TYPE };\n throw new Error(\"Image response does not contain a valid URL or base64 data\");\n }),\n usage: {\n inputTokens: 0,\n outputTokens: data?.usage?.output_tokens || 0,\n },\n model: data.model,\n };\n }\n}\n"],"mappings":"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"}
package/dist/index.cjs ADDED
@@ -0,0 +1,5 @@
1
+ const require_doubao_chat_model = require('./doubao-chat-model.cjs');
2
+ const require_doubao_image_model = require('./doubao-image-model.cjs');
3
+
4
+ exports.DoubaoChatModel = require_doubao_chat_model.DoubaoChatModel;
5
+ exports.DoubaoImageModel = require_doubao_image_model.DoubaoImageModel;
@@ -0,0 +1,3 @@
1
+ import { DoubaoChatModel } from "./doubao-chat-model.cjs";
2
+ import { DoubaoImageModel, DoubaoImageModelInput, DoubaoImageModelOptions, DoubaoImageModelOutput } from "./doubao-image-model.cjs";
3
+ export { DoubaoChatModel, DoubaoImageModel, DoubaoImageModelInput, DoubaoImageModelOptions, DoubaoImageModelOutput };
@@ -0,0 +1,3 @@
1
+ import { DoubaoChatModel } from "./doubao-chat-model.mjs";
2
+ import { DoubaoImageModel, DoubaoImageModelInput, DoubaoImageModelOptions, DoubaoImageModelOutput } from "./doubao-image-model.mjs";
3
+ export { DoubaoChatModel, DoubaoImageModel, DoubaoImageModelInput, DoubaoImageModelOptions, DoubaoImageModelOutput };
package/dist/index.mjs ADDED
@@ -0,0 +1,4 @@
1
+ import { DoubaoChatModel } from "./doubao-chat-model.mjs";
2
+ import { DoubaoImageModel } from "./doubao-image-model.mjs";
3
+
4
+ export { DoubaoChatModel, DoubaoImageModel };