fix(shared): update category fallback priorities
Align ultrabrain with GPT-5.4 xhigh and move unspecified-high to Opus-first fallback order so category routing reflects the new model policy. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -239,19 +239,19 @@ describe("AGENT_MODEL_REQUIREMENTS", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
describe("CATEGORY_MODEL_REQUIREMENTS", () => {
|
describe("CATEGORY_MODEL_REQUIREMENTS", () => {
|
||||||
test("ultrabrain has valid fallbackChain with gpt-5.3-codex as primary", () => {
|
test("ultrabrain has valid fallbackChain with gpt-5.4 as primary", () => {
|
||||||
// given - ultrabrain category requirement
|
// given - ultrabrain category requirement
|
||||||
const ultrabrain = CATEGORY_MODEL_REQUIREMENTS["ultrabrain"]
|
const ultrabrain = CATEGORY_MODEL_REQUIREMENTS["ultrabrain"]
|
||||||
|
|
||||||
// when - accessing ultrabrain requirement
|
// when - accessing ultrabrain requirement
|
||||||
// then - fallbackChain exists with gpt-5.3-codex as first entry
|
// then - fallbackChain exists with gpt-5.4 as first entry
|
||||||
expect(ultrabrain).toBeDefined()
|
expect(ultrabrain).toBeDefined()
|
||||||
expect(ultrabrain.fallbackChain).toBeArray()
|
expect(ultrabrain.fallbackChain).toBeArray()
|
||||||
expect(ultrabrain.fallbackChain.length).toBeGreaterThan(0)
|
expect(ultrabrain.fallbackChain.length).toBeGreaterThan(0)
|
||||||
|
|
||||||
const primary = ultrabrain.fallbackChain[0]
|
const primary = ultrabrain.fallbackChain[0]
|
||||||
expect(primary.variant).toBe("xhigh")
|
expect(primary.variant).toBe("xhigh")
|
||||||
expect(primary.model).toBe("gpt-5.3-codex")
|
expect(primary.model).toBe("gpt-5.4")
|
||||||
expect(primary.providers[0]).toBe("openai")
|
expect(primary.providers[0]).toBe("openai")
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -326,20 +326,25 @@ describe("CATEGORY_MODEL_REQUIREMENTS", () => {
|
|||||||
expect(primary.providers[0]).toBe("anthropic")
|
expect(primary.providers[0]).toBe("anthropic")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("unspecified-high has gpt-5.4 as primary", () => {
|
test("unspecified-high has claude-opus-4-6 as primary and gpt-5.4 as secondary", () => {
|
||||||
// #given - unspecified-high category requirement
|
// #given - unspecified-high category requirement
|
||||||
const unspecifiedHigh = CATEGORY_MODEL_REQUIREMENTS["unspecified-high"]
|
const unspecifiedHigh = CATEGORY_MODEL_REQUIREMENTS["unspecified-high"]
|
||||||
|
|
||||||
// #when - accessing unspecified-high requirement
|
// #when - accessing unspecified-high requirement
|
||||||
// #then - gpt-5.4 is first
|
// #then - claude-opus-4-6 is first and gpt-5.4 is second
|
||||||
expect(unspecifiedHigh).toBeDefined()
|
expect(unspecifiedHigh).toBeDefined()
|
||||||
expect(unspecifiedHigh.fallbackChain).toBeArray()
|
expect(unspecifiedHigh.fallbackChain).toBeArray()
|
||||||
expect(unspecifiedHigh.fallbackChain.length).toBeGreaterThan(1)
|
expect(unspecifiedHigh.fallbackChain.length).toBeGreaterThan(1)
|
||||||
|
|
||||||
const primary = unspecifiedHigh.fallbackChain[0]
|
const primary = unspecifiedHigh.fallbackChain[0]
|
||||||
expect(primary.model).toBe("gpt-5.4")
|
expect(primary.model).toBe("claude-opus-4-6")
|
||||||
expect(primary.variant).toBe("high")
|
expect(primary.variant).toBe("max")
|
||||||
expect(primary.providers).toEqual(["openai", "github-copilot", "opencode"])
|
expect(primary.providers).toEqual(["anthropic", "github-copilot", "opencode"])
|
||||||
|
|
||||||
|
const secondary = unspecifiedHigh.fallbackChain[1]
|
||||||
|
expect(secondary.model).toBe("gpt-5.4")
|
||||||
|
expect(secondary.variant).toBe("high")
|
||||||
|
expect(secondary.providers).toEqual(["openai", "github-copilot", "opencode"])
|
||||||
})
|
})
|
||||||
|
|
||||||
test("artistry has valid fallbackChain with gemini-3.1-pro as primary", () => {
|
test("artistry has valid fallbackChain with gemini-3.1-pro as primary", () => {
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
|||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{
|
{
|
||||||
providers: ["openai", "opencode"],
|
providers: ["openai", "opencode"],
|
||||||
model: "gpt-5.3-codex",
|
model: "gpt-5.4",
|
||||||
variant: "xhigh",
|
variant: "xhigh",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -288,16 +288,16 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
|||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{
|
|
||||||
providers: ["openai", "github-copilot", "opencode"],
|
|
||||||
model: "gpt-5.4",
|
|
||||||
variant: "high",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
providers: ["anthropic", "github-copilot", "opencode"],
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
model: "claude-opus-4-6",
|
model: "claude-opus-4-6",
|
||||||
variant: "max",
|
variant: "max",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.4",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user