Update an existing model in global config
(&mut self, result: ModelFormResult)
| 1522 | |
| 1523 | /// Update an existing model in global config |
| 1524 | fn update_existing_model(&mut self, result: ModelFormResult) { |
| 1525 | let model_id = match &result.editing_model_id { |
| 1526 | Some(id) => id.clone(), |
| 1527 | None => return, |
| 1528 | }; |
| 1529 | |
| 1530 | let custom_headers: Option<std::collections::HashMap<String, String>> = |
| 1531 | if result.custom_headers.is_empty() { |
| 1532 | None |
| 1533 | } else { |
| 1534 | serde_json::from_str(&result.custom_headers).ok() |
| 1535 | }; |
| 1536 | |
| 1537 | let custom_request_body: Option<String> = if result.custom_request_body.is_empty() { |
| 1538 | None |
| 1539 | } else { |
| 1540 | Some(result.custom_request_body.clone()) |
| 1541 | }; |
| 1542 | |
| 1543 | let model_config = bitfun_core::service::config::AIModelConfig { |
| 1544 | id: model_id.clone(), |
| 1545 | name: result.name.clone(), |
| 1546 | provider: result.provider_format.clone(), |
| 1547 | model_name: result.model_name.clone(), |
| 1548 | base_url: result.base_url.clone(), |
| 1549 | api_key: result.api_key.clone(), |
| 1550 | context_window: Some(result.context_window), |
| 1551 | max_tokens: Some(result.max_tokens), |
| 1552 | enabled: true, |
| 1553 | enable_thinking_process: result.enable_thinking || result.support_preserved_thinking, |
| 1554 | skip_ssl_verify: result.skip_ssl_verify, |
| 1555 | custom_headers, |
| 1556 | custom_headers_mode: if result.custom_headers_mode.is_empty() |
| 1557 | || result.custom_headers_mode == "merge" |
| 1558 | { |
| 1559 | None |
| 1560 | } else { |
| 1561 | Some(result.custom_headers_mode.clone()) |
| 1562 | }, |
| 1563 | custom_request_body, |
| 1564 | ..Default::default() |
| 1565 | }; |
| 1566 | |
| 1567 | let result_name = result.name.clone(); |
| 1568 | let result_model_display = format!("{} / {}", result.model_name, result.name); |
| 1569 | |
| 1570 | let success = tokio::task::block_in_place(|| { |
| 1571 | tokio::runtime::Handle::current().block_on(async { |
| 1572 | let config_service = match GlobalConfigManager::get_service().await { |
| 1573 | Ok(s) => s, |
| 1574 | Err(e) => { |
| 1575 | tracing::error!("Failed to get config service: {}", e); |
| 1576 | return false; |
| 1577 | } |
| 1578 | }; |
| 1579 | |
| 1580 | if let Err(e) = config_service |
| 1581 | .update_ai_model(&model_id, model_config) |
no test coverage detected