fix: address independent verification findings

Classify empty completions as transient per human ruling (fixes flaky
real-gateway smoke and prevents caching empty responses), rename the
factory injection parameter gate to breaker per the frozen design,
rewrite the probe-entry cleanup without except BaseException, declare
python-dotenv explicitly, add a mid-backoff cancellation test, and
record all implementation errata in the design and architecture docs.
This commit is contained in:
2026-07-20 22:01:26 -04:00
parent 0f4ae5ee8b
commit 0b8460b6d5
12 changed files with 101 additions and 16 deletions
+6 -6
View File
@@ -62,7 +62,7 @@ class GatewayClient:
sources: list[SourceConfig],
selector: SourceSelector,
limiter: RateLimiter,
gate: ProviderGate,
breaker: ProviderGate,
transport: Transport,
retry: RetryPolicy,
backpressure: BackpressurePolicy,
@@ -84,7 +84,7 @@ class GatewayClient:
sources=sources,
selector=selector,
limiter=limiter,
gate=gate,
gate=breaker,
transport=transport,
retry=retry,
backpressure=backpressure,
@@ -183,7 +183,7 @@ class GatewayClient:
settings: GatewaySettings,
*,
limiter: RateLimiter | None = None,
gate: ProviderGate | None = None,
breaker: ProviderGate | None = None,
cache: CacheBackend | None = None,
telemetry: TelemetryRecorder | None = None,
registry: Mapping[str, ProviderProfile] | None = None,
@@ -203,7 +203,7 @@ class GatewayClient:
global_limits=settings.global_limits,
lease_ttl_s=settings.lease_ttl_s,
),
gate=gate or InMemoryGate(config=settings.breaker),
breaker=breaker or InMemoryGate(config=settings.breaker),
transport=OpenAICompatTransport(registry=registry),
retry=settings.retry,
backpressure=settings.backpressure,
@@ -223,7 +223,7 @@ class GatewayClient:
scope: str = "LLM",
*,
limiter: RateLimiter | None = None,
gate: ProviderGate | None = None,
breaker: ProviderGate | None = None,
cache: CacheBackend | None = None,
telemetry: TelemetryRecorder | None = None,
registry: Mapping[str, ProviderProfile] | None = None,
@@ -233,7 +233,7 @@ class GatewayClient:
return cls.from_settings(
GatewaySettings.from_env(scope, env=env),
limiter=limiter,
gate=gate,
breaker=breaker,
cache=cache,
telemetry=telemetry,
registry=registry,