(&mut self)
| 2114 | } |
| 2115 | |
| 2116 | fn load_current_model_name(&mut self) { |
| 2117 | let agent_type = self.agent_type.clone(); |
| 2118 | let result: Option<String> = tokio::task::block_in_place(|| { |
| 2119 | tokio::runtime::Handle::current().block_on(async { |
| 2120 | let config_service = GlobalConfigManager::get_service().await.ok()?; |
| 2121 | let models: Vec<bitfun_core::service::config::AIModelConfig> = |
| 2122 | config_service.get_ai_models().await.ok()?; |
| 2123 | let global_config: bitfun_core::service::config::GlobalConfig = |
| 2124 | config_service.get_config(None).await.ok()?; |
| 2125 | |
| 2126 | let model_id = global_config |
| 2127 | .ai |
| 2128 | .agent_models |
| 2129 | .get(&agent_type) |
| 2130 | .cloned() |
| 2131 | .or_else(|| global_config.ai.default_models.primary.clone()) |
| 2132 | .unwrap_or_else(|| "primary".to_string()); |
| 2133 | |
| 2134 | fn provider_display_name( |
| 2135 | model: &bitfun_core::service::config::AIModelConfig, |
| 2136 | ) -> String { |
| 2137 | let raw_name = model.name.trim(); |
| 2138 | let model_name = model.model_name.trim(); |
| 2139 | if !raw_name.is_empty() && !model_name.is_empty() { |
| 2140 | let dashed_suffix = format!(" - {}", model_name); |
| 2141 | let slash_suffix = format!("/{}", model_name); |
| 2142 | if let Some(provider) = raw_name.strip_suffix(&dashed_suffix) { |
| 2143 | return provider.trim().to_string(); |
| 2144 | } |
| 2145 | if let Some(provider) = raw_name.strip_suffix(&slash_suffix) { |
| 2146 | return provider.trim().to_string(); |
| 2147 | } |
| 2148 | } |
| 2149 | if raw_name.is_empty() { |
| 2150 | model.provider.clone() |
| 2151 | } else { |
| 2152 | raw_name.to_string() |
| 2153 | } |
| 2154 | } |
| 2155 | |
| 2156 | fn model_display_name( |
| 2157 | model: &bitfun_core::service::config::AIModelConfig, |
| 2158 | ) -> String { |
| 2159 | format!("{} / {}", model.model_name, provider_display_name(model)) |
| 2160 | } |
| 2161 | |
| 2162 | if model_id == "primary" { |
| 2163 | let primary_id = global_config.ai.default_models.primary.as_deref()?; |
| 2164 | models |
| 2165 | .iter() |
| 2166 | .find(|m| m.id == primary_id) |
| 2167 | .map(model_display_name) |
| 2168 | } else { |
| 2169 | models |
| 2170 | .iter() |
| 2171 | .find(|m| m.id == model_id) |
| 2172 | .map(model_display_name) |
| 2173 | } |
no test coverage detected