|
|
@@ -0,0 +1,66 @@
|
|
|
+import { describe, expect, test } from "bun:test"
|
|
|
+import { cycleModelVariant, getConfiguredAgentVariant, resolveModelVariant } from "./model-variant"
|
|
|
+
|
|
|
+describe("model variant", () => {
|
|
|
+ test("resolves configured agent variant when model matches", () => {
|
|
|
+ const value = getConfiguredAgentVariant({
|
|
|
+ agent: {
|
|
|
+ model: { providerID: "openai", modelID: "gpt-5.2" },
|
|
|
+ variant: "xhigh",
|
|
|
+ },
|
|
|
+ model: {
|
|
|
+ providerID: "openai",
|
|
|
+ modelID: "gpt-5.2",
|
|
|
+ variants: { low: {}, high: {}, xhigh: {} },
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(value).toBe("xhigh")
|
|
|
+ })
|
|
|
+
|
|
|
+ test("ignores configured variant when model does not match", () => {
|
|
|
+ const value = getConfiguredAgentVariant({
|
|
|
+ agent: {
|
|
|
+ model: { providerID: "openai", modelID: "gpt-5.2" },
|
|
|
+ variant: "xhigh",
|
|
|
+ },
|
|
|
+ model: {
|
|
|
+ providerID: "anthropic",
|
|
|
+ modelID: "claude-sonnet-4",
|
|
|
+ variants: { low: {}, high: {}, xhigh: {} },
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(value).toBeUndefined()
|
|
|
+ })
|
|
|
+
|
|
|
+ test("prefers selected variant over configured variant", () => {
|
|
|
+ const value = resolveModelVariant({
|
|
|
+ variants: ["low", "high", "xhigh"],
|
|
|
+ selected: "high",
|
|
|
+ configured: "xhigh",
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(value).toBe("high")
|
|
|
+ })
|
|
|
+
|
|
|
+ test("cycles from configured variant to next", () => {
|
|
|
+ const value = cycleModelVariant({
|
|
|
+ variants: ["low", "high", "xhigh"],
|
|
|
+ selected: undefined,
|
|
|
+ configured: "high",
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(value).toBe("xhigh")
|
|
|
+ })
|
|
|
+
|
|
|
+ test("wraps from configured last variant to first", () => {
|
|
|
+ const value = cycleModelVariant({
|
|
|
+ variants: ["low", "high", "xhigh"],
|
|
|
+ selected: undefined,
|
|
|
+ configured: "xhigh",
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(value).toBe("low")
|
|
|
+ })
|
|
|
+})
|