mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-02 20:11:37 +00:00
123 lines
3.7 KiB
TypeScript
123 lines
3.7 KiB
TypeScript
import { createCapturedThinkingConfigStream } from "openclaw/plugin-sdk/provider-test-contracts";
|
|
import { describe, expect, it } from "vitest";
|
|
import { GOOGLE_GEMINI_PROVIDER_HOOKS } from "./provider-hooks.js";
|
|
|
|
describe("GOOGLE_GEMINI_PROVIDER_HOOKS.wrapStreamFn", () => {
|
|
it.each([
|
|
{
|
|
label: "direct Gemma",
|
|
api: "google-generative-ai",
|
|
provider: "google",
|
|
modelId: "gemma-4-26b-a4b-it",
|
|
thinkingLevel: "high",
|
|
expected: { thinkingLevel: "HIGH" },
|
|
},
|
|
{
|
|
label: "provider-qualified Gemma",
|
|
api: "google-generative-ai",
|
|
provider: "google",
|
|
modelId: "google/gemma-4-26b-a4b-it",
|
|
thinkingLevel: "high",
|
|
expected: { thinkingLevel: "HIGH" },
|
|
},
|
|
{
|
|
label: "resource-qualified Gemma",
|
|
api: "google-generative-ai",
|
|
provider: "google",
|
|
modelId: "models/gemma-4-26b-a4b-it",
|
|
thinkingLevel: "high",
|
|
expected: { thinkingLevel: "HIGH" },
|
|
},
|
|
{
|
|
label: "Vertex Gemma",
|
|
api: "google-vertex",
|
|
provider: "google-vertex",
|
|
modelId: "gemma-4-26b-a4b-it",
|
|
thinkingLevel: "low",
|
|
expected: { thinkingLevel: "MINIMAL" },
|
|
},
|
|
{
|
|
label: "disabled Vertex Gemma",
|
|
api: "google-vertex",
|
|
provider: "google-vertex",
|
|
modelId: "gemma-4-26b-a4b-it",
|
|
thinkingLevel: "off",
|
|
expected: undefined,
|
|
},
|
|
{
|
|
label: "adaptive Vertex Gemini 2.5",
|
|
api: "google-vertex",
|
|
provider: "google-vertex",
|
|
modelId: "gemini-2.5-flash",
|
|
thinkingLevel: "adaptive",
|
|
expected: { thinkingBudget: -1 },
|
|
},
|
|
{
|
|
label: "adaptive Vertex Gemini 3",
|
|
api: "google-vertex",
|
|
provider: "google-vertex",
|
|
modelId: "gemini-3-flash-preview",
|
|
thinkingLevel: "adaptive",
|
|
expected: undefined,
|
|
},
|
|
{
|
|
label: "Gemini CLI native Google transport",
|
|
api: "google-generative-ai",
|
|
provider: "google-gemini-cli",
|
|
modelId: "gemini-3-pro-preview",
|
|
thinkingLevel: "high",
|
|
expected: { thinkingLevel: "HIGH" },
|
|
},
|
|
{
|
|
label: "unrelated transport",
|
|
api: "openai-completions",
|
|
provider: "other",
|
|
modelId: "gemma-4-26b-a4b-it",
|
|
thinkingLevel: "high",
|
|
expected: { thinkingBudget: -1 },
|
|
},
|
|
] as const)("normalizes $label", ({ api, provider, modelId, thinkingLevel, expected }) => {
|
|
const capture = createCapturedThinkingConfigStream();
|
|
const wrapped = GOOGLE_GEMINI_PROVIDER_HOOKS.wrapStreamFn({
|
|
provider,
|
|
modelId,
|
|
thinkingLevel,
|
|
streamFn: capture.streamFn,
|
|
});
|
|
|
|
void wrapped({ api, provider, id: modelId } as never, { messages: [] } as never, {});
|
|
|
|
const capturedConfig = capture.getCapturedPayload()?.config as
|
|
| { thinkingConfig?: unknown }
|
|
| undefined;
|
|
expect(capturedConfig?.thinkingConfig).toEqual(expected);
|
|
});
|
|
});
|
|
|
|
describe("GOOGLE_GEMINI_PROVIDER_HOOKS.classifyFailoverReason", () => {
|
|
it.each([
|
|
{ provider: "google", code: "UNAVAILABLE", expected: "overloaded" },
|
|
{ provider: "google-vertex", code: "DEADLINE_EXCEEDED", expected: "timeout" },
|
|
{ provider: "google-antigravity", code: "INTERNAL", expected: "server_error" },
|
|
{ provider: "google-gemini-cli", code: "UNAVAILABLE", expected: "overloaded" },
|
|
] as const)("classifies $provider $code as $expected", ({ provider, code, expected }) => {
|
|
expect(
|
|
GOOGLE_GEMINI_PROVIDER_HOOKS.classifyFailoverReason({
|
|
provider,
|
|
errorMessage: "",
|
|
code,
|
|
}),
|
|
).toBe(expected);
|
|
});
|
|
|
|
it("leaves unknown codes for generic classification", () => {
|
|
expect(
|
|
GOOGLE_GEMINI_PROVIDER_HOOKS.classifyFailoverReason({
|
|
provider: "google-vertex",
|
|
errorMessage: "",
|
|
code: "INSUFFICIENT_QUOTA",
|
|
}),
|
|
).toBeUndefined();
|
|
});
|
|
});
|