import { describe, expect, it } from "vitest"; import { resolveDeploymentModel } from "./deployment-model.js"; import { LOCAL_API_KEY } from "./pi-local-provider.js"; describe("resolveDeploymentModel", () => { it("pairs the deployment model key with the provider it belongs to", () => { const both = { OPENROUTER_API_KEY: "or-key", ANTHROPIC_API_KEY: "sk-ant-key" }; expect(resolveDeploymentModel(both)).toEqual({ provider: "openrouter", model: "openai/gpt-5.6-luna", key: "or-key", }); // The whole point: switching the provider switches the key with it. expect(resolveDeploymentModel({ ...both, PI_DEFAULT_PROVIDER: "anthropic" })).toEqual({ provider: "anthropic", model: "claude-opus-5-5", key: "sk-ant-key", }); // A provider with no key configured yields no key — never another vendor's. expect( resolveDeploymentModel({ OPENROUTER_API_KEY: "or-key", PI_DEFAULT_PROVIDER: "anthropic" }), ).toEqual({ provider: "anthropic", model: "claude-opus-5-5", key: undefined }); }); it("treats configured local models as the deployment's keyless model", () => { const local = { PI_DEFAULT_PROVIDER: "local", RAKAZO_LOCAL_MODELS: "strong,weak" }; expect(resolveDeploymentModel(local)).toEqual({ provider: "local", model: "strong", key: LOCAL_API_KEY, }); expect(resolveDeploymentModel({ ...local, PI_DEFAULT_MODEL: "weak" }).model).toBe("weak"); // Without local models there is nothing to run, so no key either. expect(resolveDeploymentModel({ PI_DEFAULT_PROVIDER: "local" }).key).toBeUndefined(); }); });