Просмотр исходного кода

fix(core): 兼容 Google Gemini agent 调用

fanghanjun 6 месяцев назад
Родитель
Сommit
adcb9eb935
2 измененных файлов с 18 добавлено и 0 удалено
  1. 13 0
      packages/core/src/__tests__/provider.test.ts
  2. 5 0
      packages/core/src/llm/provider.ts

+ 13 - 0
packages/core/src/__tests__/provider.test.ts

@@ -593,4 +593,17 @@ describe("createLLMClient with providers lookup", () => {
     }));
     expect(client._piModel?.id).toBe("kimi-k2-thinking");
   });
+
+  it("Google Gemini OpenAI-compatible endpoint disables OpenAI store parameter", async () => {
+    const { createLLMClient } = await import("../llm/provider.js");
+    const { LLMConfigSchema } = await import("../models/project.js");
+    const client = createLLMClient(LLMConfigSchema.parse({
+      provider: "openai",
+      service: "google",
+      model: "gemini-2.5-flash",
+      apiKey: "test",
+      baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
+    }));
+    expect(client._piModel?.compat).toMatchObject({ supportsStore: false });
+  });
 });

+ 5 - 0
packages/core/src/llm/provider.ts

@@ -155,6 +155,10 @@ export function createLLMClient(config: LLMConfig): LLMClient {
   const piApi = resolvePiApi(serviceName, config.apiFormat, (inkosProvider?.api ?? preset?.api) as PiApi) as PiApi;
   const baseUrl = config.baseUrl || inkosProvider?.baseUrl || preset?.baseUrl || "";
   const extraHeaders = config.headers ?? parseEnvHeaders();
+  const compat = piApi === "openai-completions"
+    && (inkosProvider?.id === "google" || baseUrl.includes("generativelanguage.googleapis.com"))
+    ? { supportsStore: false }
+    : undefined;
 
   const provider = config.provider === "anthropic" ? "anthropic" : "openai";
   // pi-ai provider 字段:大多数情况 pi-ai 会按 baseUrl 自动嗅探(openrouter.ai / api.z.ai /
@@ -182,6 +186,7 @@ export function createLLMClient(config: LLMConfig): LLMClient {
     contextWindow: modelCard?.contextWindowTokens ?? 128_000,
     maxTokens: modelCard?.maxOutput ?? 8192,
     ...(extraHeaders ? { headers: extraHeaders } : {}),
+    ...(compat ? { compat } : {}),
   };
 
   return {