feat(awooop): surface degraded ai route lanes
All checks were successful
CD Pipeline / tests (push) Successful in 1m25s
Code Review / ai-code-review (push) Successful in 12s
CD Pipeline / build-and-deploy (push) Successful in 3m37s
CD Pipeline / post-deploy-checks (push) Successful in 1m44s

This commit is contained in:
Your Name
2026-05-25 13:24:53 +08:00
parent 19d306c720
commit ed3e658578
8 changed files with 455 additions and 17 deletions

View File

@@ -120,6 +120,12 @@ interface AiRouteStatusResponse {
route_reason?: string | null
route_error?: string | null
health?: Record<string, AiRouteHealthItem>
lane_mode?: string | null
skipped_lanes?: Array<{ provider_name?: string | null }>
operator_action?: {
action?: string | null
human_required?: boolean
} | null
}
interface EvidenceSnapshot {
@@ -185,6 +191,18 @@ function routeHealthLabelKey(status?: string | null) {
return 'routeHealth.unknown'
}
function routeLaneModeLabelKey(mode?: string | null) {
if (
mode === 'primary' ||
mode === 'degraded_failover' ||
mode === 'cloud_fallback' ||
mode === 'unavailable'
) {
return `routeLaneMode.${mode}`
}
return 'routeLaneMode.unknown'
}
function providerDisplayName(provider?: string | null) {
switch (provider) {
case 'ollama_gcp_a':
@@ -353,6 +371,10 @@ export function AutomationEvidenceCard() {
const primaryProvider = route?.policy_order?.[0]?.provider_name ?? null
const primaryStatus = primaryProvider ? route?.health?.[primaryProvider]?.status : null
const selectedProvider = providerDisplayName(route?.selected_provider)
const laneMode = route?.lane_mode ?? null
const skippedLanes = route?.skipped_lanes
?.map((lane) => providerDisplayName(lane.provider_name))
.join(' -> ')
const fallback = route?.fallback_chain
?.map((item) => item.provider_name)
.map(providerDisplayName)
@@ -366,8 +388,14 @@ export function AutomationEvidenceCard() {
primaryStatus: t(routeHealthLabelKey(primaryStatus) as never),
fallback: fallback || t('routeNoFallback'),
})
const laneDetail = laneMode && laneMode !== 'primary'
? t('routeLaneDetail', {
mode: t(routeLaneModeLabelKey(laneMode) as never),
skipped: skippedLanes || '--',
})
: null
const routeDetail = route?.route_reason && !route.route_error
? `${routeSummary}${t('routeReasonSeparator')}${t('routeReason', { reason: route.route_reason })}`
? `${routeSummary}${laneDetail ? t('routeReasonSeparator') + laneDetail : ''}${t('routeReasonSeparator')}${t('routeReason', { reason: route.route_reason })}`
: routeSummary
return {