Files
awoooi/apps/web/src/lib/ai-route-activation.ts

60 lines
1.8 KiB
TypeScript

export interface GeminiActivationEvidence {
enabled?: boolean | null
authentication_verified?: boolean | null
cost_guard_ready?: boolean | null
proof_source?: string | null
receipt_id?: string | null
receipt_status?: string | null
run_id?: string | null
work_item_id?: string | null
}
interface AiRouteActivationStatus {
selected_provider?: string | null
active_lane?: { provider_name?: string | null } | null
gemini_activation_evidence?: GeminiActivationEvidence | null
}
const GEMINI_ACTIVE_RECEIPT_STATUSES = new Set([
'reserved',
'succeeded',
'succeeded_usage_estimated',
])
export function hasDurableGeminiActivationProof(
evidence?: GeminiActivationEvidence | null,
): boolean {
const receiptId = evidence?.receipt_id?.trim() ?? ''
const receiptStatus = evidence?.receipt_status?.trim() ?? ''
const runId = evidence?.run_id?.trim() ?? ''
const workItemId = evidence?.work_item_id?.trim() ?? ''
return Boolean(
evidence?.enabled === true
&& evidence.authentication_verified === true
&& evidence.cost_guard_ready === true
&& evidence.proof_source === 'durable_generation_receipt'
&& receiptId
&& runId
&& workItemId
&& GEMINI_ACTIVE_RECEIPT_STATUSES.has(receiptStatus),
)
}
export function resolveAiRouteActiveProvider(
status?: AiRouteActivationStatus | null,
): string | null {
const selectedProvider = status?.selected_provider ?? null
const reportedActive = status?.active_lane?.provider_name ?? null
if (!reportedActive) return null
if (reportedActive !== 'gemini') return reportedActive
if (hasDurableGeminiActivationProof(status?.gemini_activation_evidence)) {
return 'gemini'
}
return selectedProvider && selectedProvider !== 'gemini'
? selectedProvider
: null
}