provider-chain.json 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. {
  2. "circuit": {
  3. "closed": "Closed (Normal)",
  4. "halfOpen": "Half-Open (Testing)",
  5. "open": "Open (Circuit Broken)",
  6. "unknown": "Unknown"
  7. },
  8. "errors": {
  9. "ENOTFOUND": "DNS resolution failed (domain name not found)",
  10. "ECONNREFUSED": "Connection refused (target server rejected connection)",
  11. "ETIMEDOUT": "TCP connection timeout (high network latency or firewall blocking)",
  12. "ECONNRESET": "Connection reset (network interruption or server disconnect)",
  13. "EHOSTUNREACH": "Host unreachable (network routing issue)",
  14. "ENETUNREACH": "Network unreachable (local network configuration issue)",
  15. "EPROTO": "Protocol error (SSL/TLS handshake failed)",
  16. "CLIENT_ABORT": "Client aborted request",
  17. "PROVIDER_TIMEOUT": "Provider response timeout (high first-byte latency)",
  18. "STREAMING_IDLE_TIMEOUT": "Streaming idle timeout (provider stopped sending data)"
  19. },
  20. "summary": {
  21. "singleSuccess": "{total} providers, {healthy} healthy → {provider} ✓",
  22. "sessionReuse": "Session reuse → {provider} ✓",
  23. "originHint": "Session reuse - originally selected via {method}"
  24. },
  25. "description": {
  26. "noDecisionRecord": "No decision record",
  27. "sessionReuse": "Session Reuse - Provider Selection",
  28. "sessionId": "Session ID: {id}",
  29. "unknown": "Unknown",
  30. "reuseProvider": "Reused Provider: {provider}",
  31. "initialSelection": "Initial Selection: {provider}",
  32. "candidateCount": "{count} candidate providers",
  33. "groupFiltered": "{group} group filtered to {count}",
  34. "healthyCount": "{count} after health check",
  35. "priority": "Priority {priority}",
  36. "candidate": "{name}({probability}%)",
  37. "requestChain": "Request Chain:",
  38. "systemError": "System Error",
  39. "resourceNotFound": "Resource Not Found (404)",
  40. "concurrentLimit": "Concurrent Limit",
  41. "http2Fallback": "HTTP/2 Fallback",
  42. "clientError": "Client Error",
  43. "endpointPoolExhausted": "Endpoint Pool Exhausted",
  44. "vendorTypeAllTimeout": "Vendor-Type All Endpoints Timeout",
  45. "hedgeTriggered": "Hedge Triggered",
  46. "hedgeLaunched": "Hedge Alternative Launched",
  47. "hedgeWinner": "Hedge Winner",
  48. "hedgeLoserCancelled": "Hedge Loser (Cancelled)",
  49. "clientAbort": "Client Aborted"
  50. },
  51. "reasons": {
  52. "request_success": "Success",
  53. "retry_success": "Retry Success",
  54. "retry_failed": "Retry Failed",
  55. "system_error": "System Error",
  56. "resource_not_found": "Resource Not Found (404)",
  57. "client_error_non_retryable": "Client Error",
  58. "concurrent_limit_failed": "Concurrent Limit",
  59. "http2_fallback": "HTTP/2 Fallback",
  60. "session_reuse": "Session Reuse",
  61. "initial_selection": "Initial Selection",
  62. "endpoint_pool_exhausted": "Endpoint Pool Exhausted",
  63. "vendor_type_all_timeout": "Vendor-Type All Endpoints Timeout",
  64. "client_restriction_filtered": "Client Restricted",
  65. "hedge_triggered": "Hedge Triggered",
  66. "hedge_launched": "Hedge Alternative Launched",
  67. "hedge_winner": "Hedge Winner",
  68. "hedge_loser_cancelled": "Hedge Loser (Cancelled)",
  69. "client_abort": "Client Aborted"
  70. },
  71. "filterReasons": {
  72. "rate_limited": "Rate Limited",
  73. "circuit_open": "Circuit Open",
  74. "disabled": "Disabled",
  75. "excluded": "Excluded",
  76. "format_type_mismatch": "Format Type Mismatch",
  77. "type_mismatch": "Type Mismatch",
  78. "model_not_allowed": "Model Not Allowed",
  79. "model_not_supported": "Model Not Supported",
  80. "group_mismatch": "Group Mismatch",
  81. "health_check_failed": "Health Check Failed",
  82. "endpoint_circuit_open": "Endpoint Circuit Open",
  83. "endpoint_disabled": "Endpoint Disabled",
  84. "client_restriction": "Client Restriction"
  85. },
  86. "filterDetails": {
  87. "vendor_type_circuit_open": "Vendor-type temporarily circuit-broken",
  88. "circuit_open": "Circuit breaker open",
  89. "circuit_half_open": "Circuit breaker half-open",
  90. "rate_limited": "Rate limited",
  91. "provider_client_restriction": "Provider skipped due to client restriction",
  92. "session_reuse_client_restriction": "Session reuse rejected: client restriction",
  93. "blocklist_hit": "Blocked by pattern: {pattern}",
  94. "allowlist_miss": "Not in allowed list",
  95. "detectedClient": "Detected: {client}",
  96. "providerAllowlist": "Allowlist: {list}",
  97. "providerBlocklist": "Blocklist: {list}"
  98. },
  99. "details": {
  100. "selectionMethod": "Selection",
  101. "attemptNumber": "Attempt",
  102. "endpoint": "Endpoint",
  103. "config": "Configuration",
  104. "priority": "Priority",
  105. "weight": "Weight",
  106. "costMultiplier": "Cost",
  107. "groupTag": "Group",
  108. "circuitBreaker": "Circuit Breaker",
  109. "circuitDisabled": "Disabled",
  110. "failures": "failures",
  111. "modelRedirect": "Model Redirect",
  112. "error": "Error",
  113. "errorDetails": "Error Details",
  114. "decisionContext": "Decision Context",
  115. "beforeHealthCheck": "Before Health Check",
  116. "afterHealthCheck": "After Health Check",
  117. "filteredProviders": "Filtered Providers",
  118. "priorityLevels": "Priority Levels",
  119. "candidates": "Candidates"
  120. },
  121. "technicalTimeline": "Technical Timeline",
  122. "timeline": {
  123. "sessionReuse": "Session Reuse",
  124. "sessionReuseSelection": "Session Reuse - Provider Selection",
  125. "sessionReuseTitle": "Session Reuse - Provider Selection",
  126. "sessionId": "Session ID: {id}",
  127. "reuseProvider": "Reused Provider: {provider}",
  128. "configuration": "Configuration",
  129. "priority": "Priority",
  130. "weight": "Weight",
  131. "cost": "Cost",
  132. "providerConfig": "Provider Config: priority={priority} weight={weight} cost={cost}",
  133. "basedOnCache": "Reusing provider based on session cache (within 5 minutes)",
  134. "sessionCache": "Based on session cache (within 5 minutes)",
  135. "waitingForResult": "Waiting for request result...",
  136. "waiting": "Waiting for request result...",
  137. "initialSelection": "Initial Provider Selection",
  138. "initialSelectionTitle": "Initial Provider Selection",
  139. "systemStatus": "System Status",
  140. "totalProviders": "Total Providers: {count}",
  141. "enabledProviders": "Enabled {type} type: {count}",
  142. "type": "Type",
  143. "userGroup": "User Group {group}: {count}",
  144. "healthCheck": "Health Check Passed: {count}",
  145. "filtered": "Filtered",
  146. "priorityLevel": "Priority",
  147. "priorityCandidates": "Priority {priority} Candidates ({count})",
  148. "candidates": "Candidates",
  149. "candidateInfo": " • {name}: weight={weight} cost={cost} probability={probability}%",
  150. "selected": "✓ Selected: {provider}",
  151. "requestFailed": "Request Failed (Attempt {attempt})",
  152. "resourceNotFoundFailed": "Resource Not Found (404) (Attempt {attempt})",
  153. "attemptNumber": "Attempt {number}",
  154. "firstAttempt": "First Attempt",
  155. "nthAttempt": "Attempt {attempt}",
  156. "provider": "Provider: {provider}",
  157. "statusCode": "Status Code: {code}",
  158. "statusCodeInferred": "Status Code (inferred): {code}",
  159. "error": "Error: {error}",
  160. "requestDuration": "Request Duration: {duration}ms",
  161. "requestDurationSeconds": "Request Duration: {duration}s",
  162. "circuitStatus": "Circuit Status",
  163. "current": "Current",
  164. "circuitCurrent": "Current State: {state}",
  165. "failureCount": "Failure Count: {current}/{threshold}",
  166. "untilBreak": "Until Circuit Break",
  167. "circuitRemaining": "{remaining} attempts until circuit break",
  168. "remaining": "{count} attempts remaining",
  169. "status": "Status",
  170. "alreadyBroken": "Circuit already broken",
  171. "circuitTriggered": "Warning: Circuit breaker triggered",
  172. "circuitDisabled": "Circuit Breaker Disabled",
  173. "errorDetails": "Error Details",
  174. "systemError": "Network/System Error",
  175. "systemErrorFailed": "Network/System Error (Attempt {attempt})",
  176. "errorType": "Error Type: ",
  177. "errorName": "Error",
  178. "errorCode": "Error Code: {code}",
  179. "errorSyscall": "Syscall: {syscall}",
  180. "errorMeaning": "Meaning: {meaning}",
  181. "meaning": "Meaning",
  182. "notCountedInCircuit": "This error is not counted in provider circuit breaker",
  183. "systemErrorNote": "Note: This error is not counted in provider circuit breaker",
  184. "resourceNotFoundNote": "Note: This error is not counted in the circuit breaker and will trigger failover after retries are exhausted.",
  185. "reselection": "Reselecting Provider",
  186. "reselect": "Reselecting Provider",
  187. "excluded": "Excluded: {providers}",
  188. "remainingCandidates": "Remaining Candidates: {count}",
  189. "requestSuccess": "{label} Request Success",
  190. "requestSuccessAttempt": "{attempt} Request Success",
  191. "requestOk": "OK",
  192. "successStatus": "Status: {code} OK",
  193. "requestCompleted": "Request completed successfully",
  194. "completed": "Request completed successfully",
  195. "concurrentLimitFailed": "Concurrent Limit",
  196. "attemptFailed": "Attempt Failed ({attempt})",
  197. "concurrentLimit": "Concurrent Limit",
  198. "concurrentLimitInfo": "Current Concurrent: {current}/{limit}",
  199. "sessions": "Sessions",
  200. "withPriorityWeight": "(priority={priority} weight={weight})",
  201. "unknown": "Unknown",
  202. "noDecisionRecord": "No decision record",
  203. "modelRedirect": "Model Redirect",
  204. "modelRedirectFrom": " Requested Model: {model}",
  205. "modelRedirectTo": " Redirected To: {model}",
  206. "modelRedirectBilling": " Billing Model: {model}",
  207. "http2Fallback": "HTTP/2 Protocol Fallback",
  208. "http2ErrorType": "HTTP/2 Error Type: {type}",
  209. "http2FallbackNote": "Transparently fell back to HTTP/1.1, not counted in circuit breaker",
  210. "requestDetails": "Request Details (for debugging)",
  211. "requestMethod": "Method",
  212. "requestUrl": "URL",
  213. "requestHeaders": "Headers",
  214. "requestBody": "Body",
  215. "requestBodyTruncated": "(truncated)",
  216. "clientErrorNonRetryable": "Client Error (Attempt {attempt}, non-retryable)",
  217. "matchedRule": "Matched Error Rule",
  218. "ruleId": "Rule ID: {id}",
  219. "ruleCategory": "Rule Category: {category}",
  220. "rulePattern": "Rule Pattern: {pattern}",
  221. "ruleMatchType": "Match Type: {matchType}",
  222. "ruleDescription": "Description: {description}",
  223. "ruleHasOverride": "Overrides: response={response}, statusCode={statusCode}",
  224. "clientErrorNote": "This error is caused by client input and is not retried or counted in the circuit breaker.",
  225. "endpointPoolExhausted": "Endpoint Pool Exhausted (all endpoints unavailable)",
  226. "endpointStats": "Endpoint Filter Stats",
  227. "endpointStatsTotal": "Total Endpoints: {count}",
  228. "endpointStatsEnabled": "Enabled Endpoints: {count}",
  229. "endpointStatsCircuitOpen": "Circuit-Open Endpoints: {count}",
  230. "endpointStatsAvailable": "Available Endpoints: {count}",
  231. "strictBlockNoEndpoints": "Strict mode: no endpoint candidates available, provider skipped without fallback",
  232. "strictBlockSelectorError": "Strict mode: endpoint selector encountered an error, provider skipped without fallback",
  233. "vendorTypeAllTimeout": "Vendor-Type All Endpoints Timeout (524)",
  234. "vendorTypeAllTimeoutNote": "All endpoints for this vendor-type timed out. Vendor-type circuit breaker triggered.",
  235. "hedgeTriggered": "Hedge Threshold Exceeded (launching alternative)",
  236. "hedgeLaunched": "Hedge Alternative Provider Launched",
  237. "hedgeWinner": "Hedge Race Winner (first byte received first)",
  238. "hedgeLoserCancelled": "Hedge Race Loser (request cancelled)",
  239. "clientAbort": "Client Disconnected (request aborted)",
  240. "hedgeRace": "Hedge Race",
  241. "hedgeThresholdExceeded": "First-byte timeout exceeded, alternative provider launched"
  242. },
  243. "selectionMethods": {
  244. "session_reuse": "Session Reuse",
  245. "weighted_random": "Weighted Random",
  246. "group_filtered": "Group Filtered",
  247. "fail_open_fallback": "Fail-Open Fallback"
  248. }
  249. }