ai-world-sdk 1.0.7 → 1.0.8
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/README.md
CHANGED
|
@@ -29,7 +29,7 @@ npm install ai-world-sdk
|
|
|
29
29
|
import { sdkConfig } from 'ai-world-sdk';
|
|
30
30
|
|
|
31
31
|
// 设置全局配置(只需一次)
|
|
32
|
-
sdkConfig.setBaseUrl('
|
|
32
|
+
sdkConfig.setBaseUrl('your-base-url');
|
|
33
33
|
sdkConfig.setToken('your-jwt-token');
|
|
34
34
|
sdkConfig.setDebug(true); // 可选:启用调试模式
|
|
35
35
|
|
|
@@ -233,6 +233,20 @@ const result2 = await client.generate({
|
|
|
233
233
|
temperature: 0.7, // 可选: 0.0-2.0
|
|
234
234
|
max_output_tokens: 1000, // 可选
|
|
235
235
|
});
|
|
236
|
+
|
|
237
|
+
// 使用 aihubmix provider(通过 aihubmix 代理服务)
|
|
238
|
+
const aihubmixClient = new GeminiImageGenerationClient({
|
|
239
|
+
provider: 'aihubmix', // 使用 aihubmix 代理
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const result3 = await aihubmixClient.generate({
|
|
243
|
+
prompt: 'A beautiful landscape with mountains',
|
|
244
|
+
model: 'gemini-3-pro-image-preview',
|
|
245
|
+
aspect_ratio: '16:9',
|
|
246
|
+
image_size: '1K',
|
|
247
|
+
number_of_images: 1,
|
|
248
|
+
response_modalities: ['IMAGE'],
|
|
249
|
+
});
|
|
236
250
|
```
|
|
237
251
|
|
|
238
252
|
**参数说明:**
|
|
@@ -250,6 +264,11 @@ const result2 = await client.generate({
|
|
|
250
264
|
|
|
251
265
|
**支持的宽高比:** `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9`
|
|
252
266
|
|
|
267
|
+
**Provider 说明:**
|
|
268
|
+
|
|
269
|
+
- `provider: 'gemini'`(默认)- 直接使用 Google Gemini 官方 API
|
|
270
|
+
- `provider: 'aihubmix'` - 通过 aihubmix 代理服务调用,适合需要统一管理多个 API 的场景
|
|
271
|
+
|
|
253
272
|
**模型对比:**
|
|
254
273
|
|
|
255
274
|
| 模型 | 分辨率 | 特点 | 适用场景 |
|
|
@@ -290,7 +309,7 @@ const result = await client.poll(task.id, {
|
|
|
290
309
|
import { sdkConfig } from 'ai-world-sdk';
|
|
291
310
|
|
|
292
311
|
// 设置配置
|
|
293
|
-
sdkConfig.setBaseUrl('
|
|
312
|
+
sdkConfig.setBaseUrl('your-base-url');
|
|
294
313
|
sdkConfig.setToken('your-jwt-token');
|
|
295
314
|
sdkConfig.setHeaders({ 'X-Custom-Header': 'value' });
|
|
296
315
|
sdkConfig.setDebug(true);
|
|
@@ -345,11 +364,26 @@ const gptModel = new ChatOpenAI({
|
|
|
345
364
|
|
|
346
365
|
// Gemini 模型(通过 aihubmix)
|
|
347
366
|
const geminiModel = new ChatGoogleGenerativeAI({
|
|
348
|
-
modelName: 'gemini-2.5-flash
|
|
367
|
+
modelName: 'gemini-2.5-flash',
|
|
349
368
|
temperature: 0.7,
|
|
350
369
|
provider: 'aihubmix',
|
|
351
370
|
});
|
|
352
371
|
|
|
372
|
+
// Gemini 图像生成(通过 aihubmix)
|
|
373
|
+
import { GeminiImageGenerationClient } from 'ai-world-sdk';
|
|
374
|
+
|
|
375
|
+
const geminiImageClient = new GeminiImageGenerationClient({
|
|
376
|
+
provider: 'aihubmix',
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
const imageResult = await geminiImageClient.generate({
|
|
380
|
+
prompt: 'A beautiful landscape',
|
|
381
|
+
model: 'gemini-3-pro-image-preview',
|
|
382
|
+
aspect_ratio: '16:9',
|
|
383
|
+
image_size: '1K',
|
|
384
|
+
response_modalities: ['IMAGE'],
|
|
385
|
+
});
|
|
386
|
+
|
|
353
387
|
// Claude 模型(通过 aihubmix)
|
|
354
388
|
const claudeModel = new ChatAnthropic({
|
|
355
389
|
modelName: 'claude-3-sonnet-20240229',
|
|
@@ -228,38 +228,6 @@ describe("Langchain SDK Tests", () => {
|
|
|
228
228
|
console.log("响应内容:", content);
|
|
229
229
|
}
|
|
230
230
|
}, 60000);
|
|
231
|
-
test("ChatGoogleGenerativeAI - aihubmix.com 图像生成", async () => {
|
|
232
|
-
const gemini = new index_1.ChatGoogleGenerativeAI({
|
|
233
|
-
modelName: "gemini-3-pro-image-preview",
|
|
234
|
-
temperature: 0.7,
|
|
235
|
-
provider: "aihubmix",
|
|
236
|
-
});
|
|
237
|
-
const response = await gemini.invoke([
|
|
238
|
-
new index_1.HumanMessage("请生成一张展示人工智能概念的图片"),
|
|
239
|
-
]);
|
|
240
|
-
expect(response).toBeDefined();
|
|
241
|
-
expect(response.content).toBeDefined();
|
|
242
|
-
// 图像生成响应可能包含文本和图像数据
|
|
243
|
-
// 检查响应内容(可能是字符串、数组或包含图像的对象)
|
|
244
|
-
const content = response.content;
|
|
245
|
-
if (typeof content === "string") {
|
|
246
|
-
console.log("✅ aihubmix.com 图像生成测试成功(文本响应)");
|
|
247
|
-
console.log("AI:", content);
|
|
248
|
-
}
|
|
249
|
-
else if (Array.isArray(content)) {
|
|
250
|
-
// 多模态响应,可能包含图像
|
|
251
|
-
const hasImage = content.some((item) => item?.type === "image_url" ||
|
|
252
|
-
item?.image_url ||
|
|
253
|
-
(typeof item === "string" && item.startsWith("data:image")));
|
|
254
|
-
console.log("✅ aihubmix.com 图像生成测试成功(多模态响应)");
|
|
255
|
-
console.log("响应类型: 数组,包含图像:", hasImage);
|
|
256
|
-
console.log("响应内容:", JSON.stringify(content, null, 2));
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
console.log("✅ aihubmix.com 图像生成测试成功(其他格式)");
|
|
260
|
-
console.log("响应内容:", content);
|
|
261
|
-
}
|
|
262
|
-
}, 60000);
|
|
263
231
|
test("DoubaoImageGenerationClient - 基础图像生成", async () => {
|
|
264
232
|
const imageClient = new index_1.DoubaoImageGenerationClient({});
|
|
265
233
|
const result = await imageClient.generate({
|
|
@@ -592,7 +560,7 @@ describe("Langchain SDK Tests", () => {
|
|
|
592
560
|
prompt: 'A beautiful sunset over the ocean',
|
|
593
561
|
model: 'gemini-3-pro-image-preview',
|
|
594
562
|
aspect_ratio: '16:9',
|
|
595
|
-
image_size: '
|
|
563
|
+
image_size: '1K', // 仅适用于 gemini-3-pro-image-preview
|
|
596
564
|
number_of_images: 1,
|
|
597
565
|
response_modalities: ['IMAGE'], // 仅返回图片
|
|
598
566
|
});
|
|
@@ -613,41 +581,35 @@ describe("Langchain SDK Tests", () => {
|
|
|
613
581
|
console.log("图像描述:", result.text);
|
|
614
582
|
}
|
|
615
583
|
}, 120000);
|
|
616
|
-
test("GeminiImageGenerationClient -
|
|
617
|
-
const imageClient = new index_1.GeminiImageGenerationClient({
|
|
584
|
+
test("GeminiImageGenerationClient - 使用 aihubmix provider", async () => {
|
|
585
|
+
const imageClient = new index_1.GeminiImageGenerationClient({
|
|
586
|
+
provider: "aihubmix",
|
|
587
|
+
});
|
|
618
588
|
const result = await imageClient.generate({
|
|
619
|
-
prompt:
|
|
620
|
-
model:
|
|
621
|
-
|
|
622
|
-
|
|
589
|
+
prompt: 'A beautiful sunset over the ocean',
|
|
590
|
+
model: 'gemini-3-pro-image-preview',
|
|
591
|
+
aspect_ratio: '16:9',
|
|
592
|
+
image_size: '1K',
|
|
593
|
+
number_of_images: 1,
|
|
594
|
+
response_modalities: ['IMAGE'], // 仅返回图片
|
|
623
595
|
});
|
|
624
596
|
expect(result).toBeDefined();
|
|
597
|
+
expect(result.created).toBeDefined();
|
|
598
|
+
expect(typeof result.created).toBe("number");
|
|
625
599
|
expect(result.data).toBeDefined();
|
|
626
600
|
expect(Array.isArray(result.data)).toBe(true);
|
|
627
|
-
expect(result.data.length).
|
|
628
|
-
|
|
601
|
+
expect(result.data.length).toBeGreaterThan(0);
|
|
602
|
+
result.data.forEach((item) => {
|
|
603
|
+
expect(item).toBeDefined();
|
|
604
|
+
expect(item.url || item.b64_json).toBeDefined();
|
|
605
|
+
});
|
|
606
|
+
console.log("✅ GeminiImageGenerationClient (aihubmix provider) 测试成功");
|
|
629
607
|
console.log(`生成图像数量: ${result.data.length}`);
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
const aspectRatios = [
|
|
634
|
-
"1:1",
|
|
635
|
-
"16:9",
|
|
636
|
-
"9:16",
|
|
637
|
-
];
|
|
638
|
-
for (const aspectRatio of aspectRatios) {
|
|
639
|
-
const result = await imageClient.generate({
|
|
640
|
-
prompt: "A beautiful landscape",
|
|
641
|
-
model: "gemini-2.0-flash-exp-image-generation",
|
|
642
|
-
aspect_ratio: aspectRatio,
|
|
643
|
-
number_of_images: 1,
|
|
644
|
-
});
|
|
645
|
-
expect(result).toBeDefined();
|
|
646
|
-
expect(result.data).toBeDefined();
|
|
647
|
-
expect(result.data.length).toBeGreaterThan(0);
|
|
648
|
-
console.log(`✅ Gemini 宽高比 ${aspectRatio} 测试成功`);
|
|
608
|
+
console.log("图像 URL:", result.data[0]?.url || ("Base64 编码" + result.data[0]?.b64_json));
|
|
609
|
+
if (result.text) {
|
|
610
|
+
console.log("图像描述:", result.text);
|
|
649
611
|
}
|
|
650
|
-
},
|
|
612
|
+
}, 120000);
|
|
651
613
|
test("DoubaoImageGenerationClient - quality 参数测试", async () => {
|
|
652
614
|
const imageClient = new index_1.DoubaoImageGenerationClient({});
|
|
653
615
|
const qualities = ["standard", "hd"];
|
|
@@ -662,7 +624,7 @@ describe("Langchain SDK Tests", () => {
|
|
|
662
624
|
expect(result).toBeDefined();
|
|
663
625
|
expect(result.data).toBeDefined();
|
|
664
626
|
expect(result.data.length).toBeGreaterThan(0);
|
|
665
|
-
console.log(`✅ quality ${quality}
|
|
627
|
+
console.log(`✅ quality ${quality} 测试成功`, result.data);
|
|
666
628
|
}
|
|
667
629
|
}, 180000);
|
|
668
630
|
test("DoubaoImageGenerationClient - style 参数测试", async () => {
|
|
@@ -679,7 +641,7 @@ describe("Langchain SDK Tests", () => {
|
|
|
679
641
|
expect(result).toBeDefined();
|
|
680
642
|
expect(result.data).toBeDefined();
|
|
681
643
|
expect(result.data.length).toBeGreaterThan(0);
|
|
682
|
-
console.log(`✅ style ${style}
|
|
644
|
+
console.log(`✅ style ${style} 测试成功`, result.data);
|
|
683
645
|
}
|
|
684
646
|
}, 180000);
|
|
685
647
|
test("DoubaoImageGenerationClient - response_format 参数测试", async () => {
|
|
@@ -719,7 +681,7 @@ describe("Langchain SDK Tests", () => {
|
|
|
719
681
|
expect(result).toBeDefined();
|
|
720
682
|
expect(result.data).toBeDefined();
|
|
721
683
|
expect(result.data.length).toBeGreaterThan(0);
|
|
722
|
-
console.log("✅ watermark 参数测试成功");
|
|
684
|
+
console.log("✅ watermark 参数测试成功", result.data);
|
|
723
685
|
}, 120000);
|
|
724
686
|
test("sdkConfig - 全局配置测试", () => {
|
|
725
687
|
const originalBaseUrl = index_1.sdkConfig.getServerUrl();
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Google Gemini 图像生成客户端
|
|
4
4
|
*/
|
|
5
5
|
export interface GeminiImageGenerationConfig {
|
|
6
|
+
provider?: "aihubmix" | "gemini";
|
|
6
7
|
baseUrl?: string;
|
|
7
8
|
headers?: Record<string, string>;
|
|
8
9
|
}
|
|
@@ -29,6 +30,7 @@ export interface GeminiImageGenerationResponse {
|
|
|
29
30
|
}
|
|
30
31
|
export declare class GeminiImageGenerationClient {
|
|
31
32
|
private headers;
|
|
33
|
+
private provider;
|
|
32
34
|
constructor(config?: GeminiImageGenerationConfig);
|
|
33
35
|
/**
|
|
34
36
|
* Generate images
|
|
@@ -9,15 +9,21 @@ const config_1 = require("./config");
|
|
|
9
9
|
const log_1 = require("./log");
|
|
10
10
|
class GeminiImageGenerationClient {
|
|
11
11
|
constructor(config) {
|
|
12
|
+
// 确定 provider(默认为 gemini)
|
|
13
|
+
this.provider = config?.provider || "gemini";
|
|
12
14
|
// 合并全局 headers 和配置 headers
|
|
13
15
|
const globalHeaders = config_1.sdkConfig.getHeaders();
|
|
14
16
|
this.headers = {
|
|
15
17
|
"Content-Type": "application/json",
|
|
16
18
|
"Authorization": `Bearer ${config_1.sdkConfig.getToken()}`,
|
|
17
|
-
"X-
|
|
19
|
+
"X-Provider": this.provider, // 在 header 中传递 provider,由后端确定 baseUrl
|
|
18
20
|
...globalHeaders,
|
|
19
21
|
...config?.headers,
|
|
20
22
|
};
|
|
23
|
+
// 如果明确指定了 baseUrl,也添加到 header 中
|
|
24
|
+
if (config?.baseUrl) {
|
|
25
|
+
this.headers["X-Base-Url"] = config.baseUrl;
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
/**
|
|
23
29
|
* Generate images
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { GeminiImageGenerationClient, type GeminiImageGenerationConfig, type Gem
|
|
|
10
10
|
import { VideoGenerationClient, type VideoGenerationConfig, type VideoGenerationRequest, type ContentGenerationTaskID, type ContentGenerationTask } from "./video_generation";
|
|
11
11
|
import { sdkConfig } from "./config";
|
|
12
12
|
export { BaseMessage, HumanMessage, AIMessage, SystemMessage, AIMessageChunk, type MessageContent, type AIMessageChunkData, } from "./messages";
|
|
13
|
-
export { BaseChatModel, type BaseChatModelParams, type ToolDefinition, type BindOptions, } from "./base";
|
|
13
|
+
export { BaseChatModel, type BaseChatModelParams, type AIModelProvider, type ToolDefinition, type BindOptions, } from "./base";
|
|
14
14
|
export { ChatOpenAI } from "./chat_models/openai";
|
|
15
15
|
export { ChatGoogleGenerativeAI } from "./chat_models/google";
|
|
16
16
|
export { ChatAnthropic } from "./chat_models/anthropic";
|
package/package.json
CHANGED