roder_core/runtime/
service_tier.rs1use super::*;
2
3impl Runtime {
4 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}