Skip to main content

starweaver_model/providers/
client.rs

1//! Production protocol clients built on replay-validated wire mappers.
2
3mod adapter_impl;
4mod factory;
5mod output_schema;
6mod request_options;
7mod wire;
8
9use crate::{
10    profile::ModelProfile,
11    settings::ModelSettings,
12    transport::{
13        DynHttpClient, DynProviderRequestAuditRecorder, DynSleeper, HttpModelConfig,
14        ProviderRequestAuditCapture, ProviderRequestAuditPolicy, TokioSleeper,
15    },
16};
17
18/// Shared production model client for a supported wire protocol family.
19pub struct ProtocolModelClient {
20    provider_name: String,
21    model_name: String,
22    profile: ModelProfile,
23    default_settings: Option<ModelSettings>,
24    http_config: HttpModelConfig,
25    http_client: DynHttpClient,
26    sleeper: DynSleeper,
27    request_audit: Option<ProviderRequestAuditCapture>,
28}
29
30impl ProtocolModelClient {
31    /// Create a protocol client with an injected HTTP client.
32    #[must_use]
33    pub fn new(
34        provider_name: impl Into<String>,
35        model_name: impl Into<String>,
36        profile: ModelProfile,
37        http_config: HttpModelConfig,
38        http_client: DynHttpClient,
39    ) -> Self {
40        Self {
41            provider_name: provider_name.into(),
42            model_name: model_name.into(),
43            profile,
44            default_settings: None,
45            http_config,
46            http_client,
47            sleeper: std::sync::Arc::new(TokioSleeper),
48            request_audit: None,
49        }
50    }
51
52    /// Set adapter-level default settings.
53    #[must_use]
54    pub fn with_default_settings(mut self, settings: ModelSettings) -> Self {
55        self.default_settings = Some(settings);
56        self
57    }
58
59    /// Override the model capability profile.
60    #[must_use]
61    pub fn with_profile(mut self, profile: ModelProfile) -> Self {
62        self.profile = profile;
63        self
64    }
65
66    /// Set a custom sleeper for retry policy execution.
67    #[must_use]
68    pub fn with_sleeper(mut self, sleeper: DynSleeper) -> Self {
69        self.sleeper = sleeper;
70        self
71    }
72
73    /// Record provider HTTP request audit snapshots outside redacted trace events.
74    #[must_use]
75    pub fn with_provider_request_audit(
76        mut self,
77        recorder: DynProviderRequestAuditRecorder,
78        policy: ProviderRequestAuditPolicy,
79    ) -> Self {
80        self.request_audit = Some(ProviderRequestAuditCapture::new(recorder, policy));
81        self
82    }
83}