feat(awooop): surface degraded ai route lanes
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user