Skip to main content

roder_core/runtime/
service_tier.rs

1use super::*;
2
3impl Runtime {
4    /// Persist a thread's default inference service tier. None restores the
5    /// provider default. An active turn retains its captured settings.
6    pub async fn set_thread_service_tier(
7        &self,
8        thread_id: &ThreadId,
9        service_tier: Option<String>,
10    ) -> anyhow::Result<Option<String>> {
11        let store = self
12            .thread_store
13            .as_ref()
14            .ok_or_else(|| anyhow::anyhow!("thread service tiers require a thread store"))?;
15        let mut metadata = store
16            .load_thread_metadata(thread_id)
17            .await?
18            .ok_or_else(|| anyhow::anyhow!("thread not found: {thread_id}"))?;
19        let service_tier = service_tier.map(|tier| tier.trim().to_string());
20        anyhow::ensure!(
21            service_tier.as_ref().is_none_or(|tier| !tier.is_empty()),
22            "service tier must be non-empty, or null to restore the provider default"
23        );
24        metadata.service_tier = service_tier.clone();
25        metadata.updated_at = OffsetDateTime::now_utc();
26        store.update_thread_metadata(metadata).await?;
27        Ok(service_tier)
28    }
29}