lib/agent-providers.test.ts
Rama main · réplica de lectura del repositorio original.
import { describe, expect, it } from "vitest";
import {
getAgentProvider,
isLocalAgentProvider,
resolveProviderBaseUrl,
} from "./agent-providers";
describe("providers BYOK locaux", () => {
it("déclare OpenAI-compatible et Ollama comme locaux, jamais catalogués depuis le cloud", () => {
expect(isLocalAgentProvider("local_openai")).toBe(true);
expect(isLocalAgentProvider("ollama")).toBe(true);
expect(getAgentProvider("local_openai")?.listStrategy).toBe("none");
expect(getAgentProvider("ollama")?.listStrategy).toBe("none");
expect(isLocalAgentProvider("generic")).toBe(false);
});
it("complète l'URL racine d'Ollama avec son API OpenAI-compatible", () => {
expect(resolveProviderBaseUrl("ollama", "http://127.0.0.1:11434")).toBe(
"http://127.0.0.1:11434/v1",
);
expect(resolveProviderBaseUrl("ollama", "http://127.0.0.1:11434/v1/")).toBe(
"http://127.0.0.1:11434/v1",
);
});
it("propose les URL d'installation locales les plus courantes", () => {
expect(getAgentProvider("ollama")?.localDefaultBaseUrl).toBe("http://127.0.0.1:11434");
expect(getAgentProvider("local_openai")?.localDefaultBaseUrl).toBe(
"http://127.0.0.1:1234/v1",
);
});
});
describe("OpenCode BYOK providers (MIN-544)", () => {
it("exposes the Go subscription and the Zen gateway as first-class cloud providers", () => {
expect(getAgentProvider("opencode-go")?.baseUrl).toBe("https://opencode.ai/zen/go/v1");
expect(getAgentProvider("opencode-zen")?.baseUrl).toBe("https://opencode.ai/zen/v1");
// The public `/models` listing feeds the picker, exactly like OpenAI and Google.
expect(getAgentProvider("opencode-go")?.listStrategy).toBe("openai");
expect(getAgentProvider("opencode-zen")?.listStrategy).toBe("openai");
expect(isLocalAgentProvider("opencode-go")).toBe(false);
expect(isLocalAgentProvider("opencode-zen")).toBe(false);
expect(getAgentProvider("opencode-go")?.keysUrl).toBe("https://opencode.ai/auth");
});
it("keeps a conservative wire profile: no reasoning field, OpenAI max_tokens alias", () => {
const profile = getAgentProvider("opencode-go")?.requestProfile;
expect(profile).toEqual({ streamUsage: true, outputTokenField: "max_tokens" });
expect(getAgentProvider("opencode-zen")?.requestProfile).toEqual(profile);
});
it("defaults both gateways to the cheapest strong coder they share", () => {
expect(getAgentProvider("opencode-go")?.defaultModel).toBe("glm-5.3-flash");
expect(getAgentProvider("opencode-zen")?.defaultModel).toBe("glm-5.3-flash");
});
});