feat(agent): implement phase 2 runtime and inline clarification
This commit is contained in:
77
lib/agent-models.ts
Normal file
77
lib/agent-models.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
export type AgentModelId =
|
||||
| "openai/gpt-5.4-nano"
|
||||
| "openai/gpt-5.4-mini"
|
||||
| "openai/gpt-5.4"
|
||||
| "openai/gpt-5.4-pro";
|
||||
|
||||
export type AgentModelMinTier = "starter" | "max";
|
||||
export type AgentModelAccessTier = "free" | "starter" | "pro" | "max" | "business";
|
||||
|
||||
export interface AgentModel {
|
||||
id: AgentModelId;
|
||||
label: string;
|
||||
minTier: AgentModelMinTier;
|
||||
creditCost: number;
|
||||
description: string;
|
||||
}
|
||||
|
||||
export const AGENT_MODELS = {
|
||||
"openai/gpt-5.4-nano": {
|
||||
id: "openai/gpt-5.4-nano",
|
||||
label: "GPT-5.4 Nano",
|
||||
minTier: "starter",
|
||||
creditCost: 6,
|
||||
description: "Fastest option for lightweight agent runs",
|
||||
},
|
||||
"openai/gpt-5.4-mini": {
|
||||
id: "openai/gpt-5.4-mini",
|
||||
label: "GPT-5.4 Mini",
|
||||
minTier: "starter",
|
||||
creditCost: 15,
|
||||
description: "Balanced quality and latency for default use",
|
||||
},
|
||||
"openai/gpt-5.4": {
|
||||
id: "openai/gpt-5.4",
|
||||
label: "GPT-5.4",
|
||||
minTier: "starter",
|
||||
creditCost: 38,
|
||||
description: "Higher reasoning quality for complex tasks",
|
||||
},
|
||||
"openai/gpt-5.4-pro": {
|
||||
id: "openai/gpt-5.4-pro",
|
||||
label: "GPT-5.4 Pro",
|
||||
minTier: "max",
|
||||
creditCost: 180,
|
||||
description: "Top-tier capability for hardest workflows",
|
||||
},
|
||||
} as const satisfies Record<AgentModelId, AgentModel>;
|
||||
|
||||
export const DEFAULT_AGENT_MODEL_ID: AgentModelId = "openai/gpt-5.4-mini";
|
||||
|
||||
const AGENT_MODEL_IDS = Object.keys(AGENT_MODELS) as AgentModelId[];
|
||||
|
||||
const AGENT_MODEL_TIER_ORDER: Record<AgentModelAccessTier, number> = {
|
||||
free: 0,
|
||||
starter: 1,
|
||||
pro: 2,
|
||||
max: 3,
|
||||
business: 4,
|
||||
};
|
||||
|
||||
export function getAgentModel(id: string): AgentModel | undefined {
|
||||
return AGENT_MODELS[id as AgentModelId];
|
||||
}
|
||||
|
||||
export function isAgentModelAvailableForTier(
|
||||
tier: AgentModelAccessTier,
|
||||
modelId: AgentModelId,
|
||||
): boolean {
|
||||
const model = AGENT_MODELS[modelId];
|
||||
return AGENT_MODEL_TIER_ORDER[model.minTier] <= AGENT_MODEL_TIER_ORDER[tier];
|
||||
}
|
||||
|
||||
export function getAvailableAgentModels(tier: AgentModelAccessTier): AgentModel[] {
|
||||
return AGENT_MODEL_IDS.map((id) => AGENT_MODELS[id]).filter((model) =>
|
||||
isAgentModelAvailableForTier(tier, model.id),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user