| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| abstract class LlmRoleErrorBase extends Error { |
| abstract readonly status: string; |
| constructor(message: string) { |
| super(message); |
| this.name = new.target.name; |
| } |
| } |
|
|
| |
| export class LlmRoleDisabled extends LlmRoleErrorBase { |
| readonly status = "disabled"; |
| constructor(reason = "CAPABILITY_LLM_ENABLED is false") { |
| super(reason); |
| } |
| } |
|
|
| |
| export class LlmRoleBudgetExceeded extends LlmRoleErrorBase { |
| readonly status = "budget_exceeded"; |
| constructor( |
| public readonly capabilityId: string | null, |
| public readonly role: string, |
| public readonly spent: number, |
| public readonly limit: number, |
| ) { |
| super( |
| `Daily LLM budget exceeded for capability=${capabilityId ?? "global"} role=${role}: spent=$${spent.toFixed(4)} limit=$${limit.toFixed(4)}`, |
| ); |
| } |
| } |
|
|
| |
| export class LlmRoleResponseInvalid extends LlmRoleErrorBase { |
| readonly status = "invalid_response"; |
| constructor( |
| public readonly role: string, |
| public readonly zodIssues: unknown, |
| public readonly rawText: string, |
| ) { |
| super(`LLM role=${role} response did not validate after retry`); |
| } |
| } |
|
|
| |
| export class LlmRoleTimeout extends LlmRoleErrorBase { |
| readonly status = "timeout"; |
| constructor( |
| public readonly role: string, |
| public readonly timeoutMs: number, |
| ) { |
| super(`LLM role=${role} timed out after ${timeoutMs}ms`); |
| } |
| } |
|
|
| |
| export class LlmRoleProviderUnavailable extends LlmRoleErrorBase { |
| readonly status = "provider_unavailable"; |
| constructor( |
| public readonly role: string, |
| public readonly providerErrorCode: string, |
| detail = "", |
| ) { |
| super( |
| `LLM role=${role} provider unavailable: ${providerErrorCode}${detail ? " — " + detail : ""}`, |
| ); |
| } |
| } |
|
|
| |
| export function isLlmRoleError(err: unknown): err is LlmRoleErrorBase { |
| return err instanceof LlmRoleErrorBase; |
| } |
|
|
| export type LlmRoleErrorStatus = |
| | "disabled" |
| | "budget_exceeded" |
| | "invalid_response" |
| | "timeout" |
| | "provider_unavailable"; |
|
|