@workflow-manager/runner
Version:
CLI runner for in-memory and markdown workflow orchestration using ATEP-like envelopes
99 lines (98 loc) • 3.23 kB
JavaScript
// Hand-curated judge knowledge. Update this table when new models ship —
// the judge prompt is rendered from it, so edits here change judgments.
export const MODEL_CATALOG = [
{
idPatterns: ["fable", "mythos"],
displayName: "Claude Fable 5",
provider: "anthropic",
tier: "frontier",
costBand: 5,
strengths: ["coding", "review", "orchestration"],
notes: "Top-end reasoning; overkill for retrieval/summarization steps.",
},
{
idPatterns: ["opus"],
displayName: "Claude Opus",
provider: "anthropic",
tier: "frontier",
costBand: 4,
strengths: ["coding", "review", "orchestration"],
},
{
idPatterns: ["sonnet"],
displayName: "Claude Sonnet",
provider: "anthropic",
tier: "mid",
costBand: 3,
strengths: ["coding", "general", "review"],
notes: "Default workhorse for implementation steps.",
},
{
idPatterns: ["haiku"],
displayName: "Claude Haiku",
provider: "anthropic",
tier: "small",
costBand: 2,
strengths: ["general", "retrieval", "summarization"],
},
{
idPatterns: ["codex"],
displayName: "GPT Codex tier",
provider: "openai",
tier: "frontier",
costBand: 4,
strengths: ["coding"],
},
// Must precede the OpenAI mini/nano entry: "gemini" contains "mini".
{
idPatterns: ["gemini"],
displayName: "Gemini",
provider: "google",
tier: "mid",
costBand: 2,
strengths: ["general", "retrieval", "summarization"],
notes: "Flash tiers are cheaper; Pro tiers are mid-cost.",
},
{
idPatterns: ["mini", "nano"],
displayName: "OpenAI mini/nano tier",
provider: "openai",
tier: "small",
costBand: 2,
strengths: ["general", "retrieval", "summarization"],
},
{
idPatterns: ["gpt-5", "gpt-"],
displayName: "GPT (full-size)",
provider: "openai",
tier: "frontier",
costBand: 4,
strengths: ["coding", "general", "review"],
},
{
idPatterns: ["ollama/", "gemma", "llama", "qwen"],
displayName: "Local / open-weights (Ollama etc.)",
provider: "local",
tier: "small",
costBand: 1,
strengths: ["general", "summarization"],
notes: "Free to run; quality varies widely by model and size.",
},
];
export function lookupModel(modelId) {
const normalized = modelId.trim().toLowerCase();
if (!normalized) {
return undefined;
}
return MODEL_CATALOG.find((entry) => entry.idPatterns.some((pattern) => normalized.includes(pattern.toLowerCase())));
}
export function renderCatalogForPrompt() {
const lines = [
"| Model | Provider | Tier | Cost band (1=cheapest, 5=priciest) | Strengths | Notes |",
"| --- | --- | --- | --- | --- | --- |",
];
for (const entry of MODEL_CATALOG) {
lines.push(`| ${entry.displayName} | ${entry.provider} | ${entry.tier} | ${entry.costBand} | ${entry.strengths.join(", ")} | ${entry.notes ?? ""} |`);
}
return lines.join("\n");
}