pub struct Provider { /* private fields */ }Expand description
One provider: a backend, its concurrency budget, and the two pieces of run-scoped state that belong to it.
The limiter is per provider rather than per process because the slot
represents in-flight backend work, and max_concurrent
is configured per [[llm]] entry. A single shared limiter would apply the
local model’s generous budget to a rate-limited cloud endpoint.
down and served live here rather than in vectors parallel to the
provider list. Parallel vectors force a length invariant the type system
cannot check, and make every reader defensive about an index that is
structurally always valid — a mark_down that silently did nothing on an
out-of-range index would be invisible.
The cache identity is computed once because it includes stable backend metadata such as the Codex CLI version. The model and display location stay on the backend so reporting cannot drift from the client that is used.
Implementations§
Source§impl Provider
impl Provider
Sourcepub fn limiter(&self) -> &Limiter
pub fn limiter(&self) -> &Limiter
The concurrency budget for this provider’s backend.
Exposed because it is the only thing that can demonstrate the limiter
works: wiremock never overlaps requests, so neither an in-flight
counter nor wall-clock can tell a working limiter from a deleted one.
Observing available() while the analysis runs can.
Sourcepub fn served(&self) -> usize
pub fn served(&self) -> usize
How many files this provider answered.
Counted here rather than carried out through the analysis result and rejoined against the chain later: the chain already knows who answered, it is already shared for the whole process, and it already holds per-provider interior-mutable state. A cache hit counts — the answer still originated with that provider, and the user’s code was still reviewed by that model.
Sourcepub fn cache_key(
&self,
cache: &Cache,
system_prompt: &str,
user_content: &str,
) -> CacheKey
pub fn cache_key( &self, cache: &Cache, system_prompt: &str, user_content: &str, ) -> CacheKey
This provider’s cache key for one prompt.
The single definition of “which key belongs to which provider”. It lives
here rather than at the call site so a test cannot compute the key a
different way than production does - which is exactly how the endpoint
went missing from it: the tests spelled out model and temperature by
hand and agreed with the bug.