| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-10-21 | 1.4 kB | |
| v1.8.8.5 source code.tar.gz | 2026-10-21 | 7.4 MB | |
| v1.8.8.5 source code.zip | 2026-10-21 | 11.4 MB | |
| Totals: 3 Items | 18.8 MB | 0 | |
What's Changed
Fixed
- Return a decidable synthetic 429 when no AI key can be selected for the target cluster (all keys penalized /
Weight=0/ dead), instead of(res=nil, err=nil): a configured fallback cluster is actually tried, and without one the client gets a retryable 429 instead of an opaque empty-body 500.shouldTriggerFallbackalso treats(nil, nil)as fallback-eligible as a hard invariant (issue [#1440]) - Exclude
Weight=0keys from the session-affinity penalty filter and replace the "fallback to the original list" branch with a circuit breaker: when every usable key is penalized the filter returns no candidates — key selection fails, the synthetic 429 triggers cluster fallback, and the cluster makes zero upstream interaction until the penalty TTL expires (new 429s extend the window) (issue [#1439]) - Emit the unified error contract on gateway-synthesized AI failures: the key-exhaustion 429 now carries
error.code = NO_AVAILABLE_KEY(429,rate_limit_error),error.details.retry_after_secondsand a standardRetry-Afterheader, and setserr_code = NO_AVAILABLE_KEYfor access-log attribution; gateway-side failures (findProduct failure, no cluster, backend connect/transport errors) returnBACKEND_UNAVAILABLE(502) with the unified body instead of a bare empty-body 500 (issue [#1441])
Full Changelog: https://github.com/bfenetworks/bfe/blob/v1.8.8.5/CHANGELOG.md