feat(model-requirements): update unspecified-high to gpt-5.4, add glm-5/k2p5/kimi-k2.5 fallbacks
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -305,7 +305,7 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa
|
|||||||
"variant": "xhigh",
|
"variant": "xhigh",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "openai/gpt-5.2",
|
"model": "openai/gpt-5.4",
|
||||||
"variant": "high",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
@@ -428,7 +428,7 @@ exports[`generateModelConfig single native provider uses Gemini models with isMa
|
|||||||
"variant": "high",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "google/gemini-3.1-pro-preview",
|
"model": "opencode/glm-4.7-free",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
"model": "google/gemini-3-flash-preview",
|
"model": "google/gemini-3-flash-preview",
|
||||||
@@ -578,8 +578,8 @@ exports[`generateModelConfig all native providers uses preferred models with isM
|
|||||||
"variant": "xhigh",
|
"variant": "xhigh",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "anthropic/claude-opus-4-6",
|
"model": "openai/gpt-5.4",
|
||||||
"variant": "max",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
"model": "anthropic/claude-sonnet-4-5",
|
"model": "anthropic/claude-sonnet-4-5",
|
||||||
@@ -729,8 +729,8 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is
|
|||||||
"variant": "xhigh",
|
"variant": "xhigh",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "opencode/claude-opus-4-6",
|
"model": "opencode/gpt-5.4",
|
||||||
"variant": "max",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
"model": "opencode/claude-sonnet-4-5",
|
"model": "opencode/claude-sonnet-4-5",
|
||||||
@@ -862,8 +862,8 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with
|
|||||||
"variant": "high",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "github-copilot/claude-opus-4.6",
|
"model": "github-copilot/gpt-5.4",
|
||||||
"variant": "max",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
"model": "github-copilot/claude-sonnet-4.5",
|
"model": "github-copilot/claude-sonnet-4.5",
|
||||||
@@ -974,7 +974,7 @@ exports[`generateModelConfig fallback providers uses ZAI model for librarian wit
|
|||||||
"model": "opencode/glm-4.7-free",
|
"model": "opencode/glm-4.7-free",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "opencode/glm-4.7-free",
|
"model": "zai-coding-plan/glm-5",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
"model": "opencode/glm-4.7-free",
|
"model": "opencode/glm-4.7-free",
|
||||||
@@ -1475,8 +1475,8 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is
|
|||||||
"variant": "xhigh",
|
"variant": "xhigh",
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
"model": "anthropic/claude-opus-4-6",
|
"model": "openai/gpt-5.4",
|
||||||
"variant": "max",
|
"variant": "high",
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
"model": "anthropic/claude-sonnet-4-5",
|
"model": "anthropic/claude-sonnet-4-5",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { ModelRequirement } from "../shared/model-requirements"
|
import type { ModelRequirement } from "../shared/model-requirements";
|
||||||
|
|
||||||
// NOTE: These requirements are used by the CLI config generator (`generateModelConfig`).
|
// NOTE: These requirements are used by the CLI config generator (`generateModelConfig`).
|
||||||
// They intentionally use "install-time" provider IDs (anthropic/openai/google/opencode/etc),
|
// They intentionally use "install-time" provider IDs (anthropic/openai/google/opencode/etc),
|
||||||
@@ -7,7 +7,11 @@ import type { ModelRequirement } from "../shared/model-requirements"
|
|||||||
export const CLI_AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
export const CLI_AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
||||||
sisyphus: {
|
sisyphus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{ providers: ["zai-coding-plan"], model: "glm-4.7" },
|
{ providers: ["zai-coding-plan"], model: "glm-4.7" },
|
||||||
{ providers: ["opencode"], model: "glm-4.7-free" },
|
{ providers: ["opencode"], model: "glm-4.7-free" },
|
||||||
@@ -16,22 +20,41 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
|||||||
},
|
},
|
||||||
hephaestus: {
|
hephaestus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
{
|
||||||
|
providers: ["openai", "opencode"],
|
||||||
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
requiresProvider: ["openai", "opencode"],
|
requiresProvider: ["openai", "opencode"],
|
||||||
},
|
},
|
||||||
oracle: {
|
oracle: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
model: "gpt-5.2",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
librarian: {
|
librarian: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["zai-coding-plan"], model: "glm-4.7" },
|
{ providers: ["zai-coding-plan"], model: "glm-4.7" },
|
||||||
{ providers: ["opencode"], model: "glm-4.7-free" },
|
{ providers: ["opencode"], model: "glm-4.7-free" },
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-5" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-sonnet-4-5",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
explore: {
|
explore: {
|
||||||
@@ -43,104 +66,228 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
|||||||
},
|
},
|
||||||
"multimodal-looker": {
|
"multimodal-looker": {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
{
|
||||||
|
providers: ["openai", "opencode"],
|
||||||
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
||||||
{ providers: ["opencode"], model: "gpt-5-nano" },
|
{ providers: ["opencode"], model: "gpt-5-nano" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
prometheus: {
|
prometheus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.2",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
metis: {
|
metis: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.2",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
momus: {
|
momus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "medium" },
|
{
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
model: "gpt-5.2",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
atlas: {
|
atlas: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-5" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-sonnet-4-5",
|
||||||
|
},
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" },
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export const CLI_CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
export const CLI_CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> =
|
||||||
"visual-engineering": {
|
{
|
||||||
fallbackChain: [
|
"visual-engineering": {
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
fallbackChain: [
|
||||||
{ providers: ["zai-coding-plan"], model: "glm-5" },
|
{
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
model: "gemini-3.1-pro",
|
||||||
],
|
variant: "high",
|
||||||
},
|
},
|
||||||
ultrabrain: {
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
||||||
fallbackChain: [
|
{
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "xhigh" },
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
model: "claude-opus-4-6",
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
variant: "max",
|
||||||
],
|
},
|
||||||
},
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
deep: {
|
],
|
||||||
fallbackChain: [
|
},
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
ultrabrain: {
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
fallbackChain: [
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
{
|
||||||
],
|
providers: ["openai", "opencode"],
|
||||||
requiresModel: "gpt-5.3-codex",
|
model: "gpt-5.3-codex",
|
||||||
},
|
variant: "xhigh",
|
||||||
artistry: {
|
},
|
||||||
fallbackChain: [
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
model: "gemini-3.1-pro",
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
variant: "high",
|
||||||
],
|
},
|
||||||
requiresModel: "gemini-3.1-pro",
|
{
|
||||||
},
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
quick: {
|
model: "claude-opus-4-6",
|
||||||
fallbackChain: [
|
variant: "max",
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" },
|
},
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
],
|
||||||
{ providers: ["opencode"], model: "gpt-5-nano" },
|
},
|
||||||
],
|
deep: {
|
||||||
},
|
fallbackChain: [
|
||||||
"unspecified-low": {
|
{
|
||||||
fallbackChain: [
|
providers: ["openai", "opencode"],
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-5" },
|
model: "gpt-5.3-codex",
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
variant: "medium",
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
},
|
||||||
],
|
{
|
||||||
},
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
"unspecified-high": {
|
model: "claude-opus-4-6",
|
||||||
fallbackChain: [
|
variant: "max",
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
},
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" },
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
],
|
model: "gemini-3.1-pro",
|
||||||
},
|
variant: "high",
|
||||||
writing: {
|
},
|
||||||
fallbackChain: [
|
],
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
requiresModel: "gpt-5.3-codex",
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
},
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-5" },
|
artistry: {
|
||||||
],
|
fallbackChain: [
|
||||||
},
|
{
|
||||||
}
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.2",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
requiresModel: "gemini-3.1-pro",
|
||||||
|
},
|
||||||
|
quick: {
|
||||||
|
fallbackChain: [
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-haiku-4-5",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
|
{ providers: ["opencode"], model: "gpt-5-nano" },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"unspecified-low": {
|
||||||
|
fallbackChain: [
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-sonnet-4-5",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["openai", "opencode"],
|
||||||
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"unspecified-high": {
|
||||||
|
fallbackChain: [
|
||||||
|
{
|
||||||
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.4",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{ providers: ["zai-coding-plan"], model: "glm-5" },
|
||||||
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
|
{ providers: ["opencode"], model: "kimi-k2.5" },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
writing: {
|
||||||
|
fallbackChain: [
|
||||||
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-sonnet-4-5",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|||||||
@@ -311,20 +311,20 @@ describe("CATEGORY_MODEL_REQUIREMENTS", () => {
|
|||||||
expect(primary.providers[0]).toBe("anthropic")
|
expect(primary.providers[0]).toBe("anthropic")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("unspecified-high has claude-opus-4-6 as primary", () => {
|
test("unspecified-high has gpt-5.4 as primary", () => {
|
||||||
// #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 - claude-opus-4-6 is first
|
// #then - gpt-5.4 is first
|
||||||
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("claude-opus-4-6")
|
expect(primary.model).toBe("gpt-5.4")
|
||||||
expect(primary.variant).toBe("max")
|
expect(primary.variant).toBe("high")
|
||||||
expect(primary.providers).toEqual(["anthropic", "github-copilot", "opencode"])
|
expect(primary.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", () => {
|
||||||
|
|||||||
@@ -1,21 +1,25 @@
|
|||||||
export type FallbackEntry = {
|
export type FallbackEntry = {
|
||||||
providers: string[]
|
providers: string[];
|
||||||
model: string
|
model: string;
|
||||||
variant?: string // Entry-specific variant (e.g., GPT→high, Opus→max)
|
variant?: string; // Entry-specific variant (e.g., GPT→high, Opus→max)
|
||||||
}
|
};
|
||||||
|
|
||||||
export type ModelRequirement = {
|
export type ModelRequirement = {
|
||||||
fallbackChain: FallbackEntry[]
|
fallbackChain: FallbackEntry[];
|
||||||
variant?: string // Default variant (used when entry doesn't specify one)
|
variant?: string; // Default variant (used when entry doesn't specify one)
|
||||||
requiresModel?: string // If set, only activates when this model is available (fuzzy match)
|
requiresModel?: string; // If set, only activates when this model is available (fuzzy match)
|
||||||
requiresAnyModel?: boolean // If true, requires at least ONE model in fallbackChain to be available (or empty availability treated as unavailable)
|
requiresAnyModel?: boolean; // If true, requires at least ONE model in fallbackChain to be available (or empty availability treated as unavailable)
|
||||||
requiresProvider?: string[] // If set, only activates when any of these providers is connected
|
requiresProvider?: string[]; // If set, only activates when any of these providers is connected
|
||||||
}
|
};
|
||||||
|
|
||||||
export const AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
export const AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
||||||
sisyphus: {
|
sisyphus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
||||||
{ providers: ["opencode"], model: "big-pickle" },
|
{ providers: ["opencode"], model: "big-pickle" },
|
||||||
],
|
],
|
||||||
@@ -23,25 +27,44 @@ export const AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
|||||||
},
|
},
|
||||||
hephaestus: {
|
hephaestus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "venice", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
{
|
||||||
|
providers: ["openai", "venice", "opencode"],
|
||||||
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
{ providers: ["github-copilot"], model: "gpt-5.2", variant: "medium" },
|
{ providers: ["github-copilot"], model: "gpt-5.2", variant: "medium" },
|
||||||
],
|
],
|
||||||
requiresProvider: ["openai", "github-copilot", "venice", "opencode"],
|
requiresProvider: ["openai", "github-copilot", "venice", "opencode"],
|
||||||
},
|
},
|
||||||
oracle: {
|
oracle: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
model: "gpt-5.2",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
librarian: {
|
||||||
|
fallbackChain: [
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
|
{ providers: ["opencode"], model: "minimax-m2.5-free" },
|
||||||
|
{ providers: ["opencode"], model: "big-pickle" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
librarian: {
|
|
||||||
fallbackChain: [
|
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
|
||||||
{ providers: ["opencode"], model: "minimax-m2.5-free" },
|
|
||||||
{ providers: ["opencode"], model: "big-pickle" },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
explore: {
|
explore: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["github-copilot"], model: "grok-code-fast-1" },
|
{ providers: ["github-copilot"], model: "grok-code-fast-1" },
|
||||||
@@ -52,98 +75,228 @@ export const AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
|||||||
},
|
},
|
||||||
"multimodal-looker": {
|
"multimodal-looker": {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
{
|
||||||
|
providers: ["openai", "opencode"],
|
||||||
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5-nano" },
|
{
|
||||||
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5-nano",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
prometheus: {
|
prometheus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" },
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.2",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
metis: {
|
metis: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
|
model: "gpt-5.2",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
momus: {
|
momus: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "medium" },
|
{
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
model: "gpt-5.2",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
atlas: {
|
atlas: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-sonnet-4-6",
|
||||||
|
},
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export const CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
export const CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
|
||||||
"visual-engineering": {
|
"visual-engineering": {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
ultrabrain: {
|
ultrabrain: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "xhigh" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
providers: ["openai", "opencode"],
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "xhigh",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
deep: {
|
deep: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
{
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
providers: ["openai", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
requiresModel: "gpt-5.3-codex",
|
requiresModel: "gpt-5.3-codex",
|
||||||
},
|
},
|
||||||
artistry: {
|
artistry: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
{
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3.1-pro",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" },
|
||||||
],
|
],
|
||||||
requiresModel: "gemini-3.1-pro",
|
requiresModel: "gemini-3.1-pro",
|
||||||
},
|
},
|
||||||
quick: {
|
quick: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" },
|
{
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-haiku-4-5",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
{ providers: ["opencode"], model: "gpt-5-nano" },
|
{ providers: ["opencode"], model: "gpt-5-nano" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"unspecified-low": {
|
"unspecified-low": {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
{
|
||||||
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
model: "claude-sonnet-4-6",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["openai", "opencode"],
|
||||||
|
model: "gpt-5.3-codex",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"unspecified-high": {
|
"unspecified-high": {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
{
|
||||||
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
providers: ["openai", "github-copilot", "opencode"],
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" },
|
model: "gpt-5.4",
|
||||||
|
variant: "high",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
||||||
|
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
||||||
|
{
|
||||||
|
providers: [
|
||||||
|
"opencode",
|
||||||
|
"moonshotai",
|
||||||
|
"moonshotai-cn",
|
||||||
|
"firmware",
|
||||||
|
"ollama-cloud",
|
||||||
|
"aihubmix",
|
||||||
|
],
|
||||||
|
model: "kimi-k2.5",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
writing: {
|
writing: {
|
||||||
fallbackChain: [
|
fallbackChain: [
|
||||||
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
|
{
|
||||||
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
providers: ["google", "github-copilot", "opencode"],
|
||||||
|
model: "gemini-3-flash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providers: ["anthropic", "github-copilot", "opencode"],
|
||||||
|
model: "claude-sonnet-4-6",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ export const DEFAULT_CATEGORIES: Record<string, CategoryConfig> = {
|
|||||||
artistry: { model: "google/gemini-3.1-pro", variant: "high" },
|
artistry: { model: "google/gemini-3.1-pro", variant: "high" },
|
||||||
quick: { model: "anthropic/claude-haiku-4-5" },
|
quick: { model: "anthropic/claude-haiku-4-5" },
|
||||||
"unspecified-low": { model: "anthropic/claude-sonnet-4-6" },
|
"unspecified-low": { model: "anthropic/claude-sonnet-4-6" },
|
||||||
"unspecified-high": { model: "anthropic/claude-opus-4-6", variant: "max" },
|
"unspecified-high": { model: "openai/gpt-5.4", variant: "high" },
|
||||||
writing: { model: "kimi-for-coding/k2p5" },
|
writing: { model: "kimi-for-coding/k2p5" },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user