mirror of
https://github.com/openai/codex.git
synced 2026-05-17 17:53:06 +00:00
## Summary - Add `codex-model-provider` as the runtime home for model-provider behavior that does not belong in `codex-core`, `codex-login`, or `codex-api`. - The new crate wraps configured `ModelProviderInfo` in a `ModelProvider` trait object that can resolve the API provider config, provider-scoped auth manager, and request auth provider for each call. - This centralizes provider auth behavior in one place today, and gives us an extension point for future provider-specific auth, model listing, request setup, and related runtime behavior. ## Tests Ran tests manually to make sure that provider auth under different configs still work as expected. --------- Co-authored-by: pakrym-oai <pakrym@openai.com>
33 lines
968 B
Rust
33 lines
968 B
Rust
use http::HeaderMap;
|
|
use std::sync::Arc;
|
|
|
|
/// Adds authentication headers to API requests.
|
|
///
|
|
/// Implementations should be cheap and non-blocking; any asynchronous
|
|
/// refresh or I/O should be handled by higher layers before requests
|
|
/// reach this interface.
|
|
pub trait AuthProvider: Send + Sync {
|
|
fn add_auth_headers(&self, headers: &mut HeaderMap);
|
|
}
|
|
|
|
/// Shared auth handle passed through API clients.
|
|
pub type SharedAuthProvider = Arc<dyn AuthProvider>;
|
|
|
|
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
|
|
pub struct AuthHeaderTelemetry {
|
|
pub attached: bool,
|
|
pub name: Option<&'static str>,
|
|
}
|
|
|
|
pub fn auth_header_telemetry(auth: &dyn AuthProvider) -> AuthHeaderTelemetry {
|
|
let mut headers = HeaderMap::new();
|
|
auth.add_auth_headers(&mut headers);
|
|
let name = headers
|
|
.contains_key(http::header::AUTHORIZATION)
|
|
.then_some("authorization");
|
|
AuthHeaderTelemetry {
|
|
attached: name.is_some(),
|
|
name,
|
|
}
|
|
}
|