import { describe, expect, test } from "bun:test" import { cycleVariant, formatModelLabel, pickVariant, resolveVariant } from "../../src/mini/variant.shared" import type { RunSession } from "../../src/mini/session.shared" import type { RunProvider } from "../../src/mini/types" const model = { providerID: "openai", modelID: "gpt-5", } const providers: RunProvider[] = [ { id: "openai", name: "OpenAI", source: "api", env: [], options: {}, models: { "gpt-5": { id: "gpt-5", providerID: "openai", api: { id: "gpt-5", url: "https://openai.test", npm: "@ai-sdk/openai", }, name: "GPT-5", capabilities: { temperature: true, reasoning: true, attachment: true, toolcall: true, input: { text: true, audio: false, image: false, video: false, pdf: false, }, output: { text: true, audio: false, image: false, video: false, pdf: false, }, interleaved: false, }, cost: { input: 0, output: 0, cache: { read: 0, write: 0, }, }, limit: { context: 128000, output: 8192, }, status: "active", options: {}, headers: {}, release_date: "2026-01-01", }, }, }, ] describe("run variant shared", () => { test("prefers cli then session then saved variants", () => { expect(resolveVariant("max", "high", "low", ["low", "high"])).toBe("max") expect(resolveVariant(undefined, "high", "low", ["low", "high"])).toBe("high") expect(resolveVariant(undefined, "missing", "low", ["low", "high"])).toBe("low") }) test("cycles through variants and back to default", () => { expect(cycleVariant(undefined, ["low", "high"])).toBe("low") expect(cycleVariant("low", ["low", "high"])).toBe("high") expect(cycleVariant("high", ["low", "high"])).toBeUndefined() expect(cycleVariant(undefined, [])).toBeUndefined() }) test("formats model labels", () => { expect(formatModelLabel(model, undefined)).toBe("gpt-5 · openai") expect(formatModelLabel(model, "high")).toBe("gpt-5 · openai · high") expect(formatModelLabel(model, undefined, providers)).toBe("GPT-5 · OpenAI") expect(formatModelLabel(model, "high", providers)).toBe("GPT-5 · OpenAI · high") }) test("picks the latest matching variant from session history", () => { const session: RunSession = { first: false, turns: [ { prompt: { text: "one", parts: [] }, provider: "openai", model: "gpt-5", variant: "high" }, { prompt: { text: "two", parts: [] }, provider: "anthropic", model: "sonnet", variant: "max" }, { prompt: { text: "three", parts: [] }, provider: "openai", model: "gpt-5", variant: "minimal" }, ], } expect(pickVariant(model, session)).toBe("minimal") }) })