use std::sync::Arc;
use rho_sdk::{provider::ModelProvider, ReasoningLevel};
use crate::tools::process::CacheWarmRoute;
pub(crate) struct ProviderController {
provider: Arc<dyn ModelProvider>,
reasoning: ReasoningLevel,
cache_warm_route: CacheWarmRoute,
}
impl ProviderController {
pub(crate) fn new(
provider: Arc<dyn ModelProvider>,
reasoning: ReasoningLevel,
cache_warm_route: CacheWarmRoute,
) -> Self {
cache_warm_route.set_supported(provider.honors_max_output_tokens());
Self {
provider,
reasoning,
cache_warm_route,
}
}
pub(crate) fn provider(&self) -> &Arc<dyn ModelProvider> {
&self.provider
}
pub(crate) fn reasoning(&self) -> ReasoningLevel {
self.reasoning
}
pub(crate) fn supports_cache_warm(&self) -> bool {
self.cache_warm_route.is_supported()
}
pub(crate) fn adopt(&mut self, provider: Arc<dyn ModelProvider>, reasoning: ReasoningLevel) {
self.cache_warm_route
.set_supported(provider.honors_max_output_tokens());
self.provider = provider;
self.reasoning = reasoning;
}
}