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('http://localhost:8000');
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('http://localhost:8000');
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-image',
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: '2K', // 仅适用于 gemini-3-pro-image-preview
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 - 多图像生成", async () => {
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: "A futuristic city skyline",
620
- model: "gemini-2.0-flash-exp-image-generation",
621
- number_of_images: 2,
622
- aspect_ratio: "16:9",
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).toBe(2);
628
- console.log("✅ GeminiImageGenerationClient 多图像生成测试成功");
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
- }, 120000);
631
- test("GeminiImageGenerationClient - 不同宽高比测试", async () => {
632
- const imageClient = new index_1.GeminiImageGenerationClient({});
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
- }, 180000);
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-Base-Url": config?.baseUrl || "",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-world-sdk",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "TypeScript SDK for AI World Platform - Chat Models, Image Generation, and Video Generation",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",