()
| 87 | // } |
| 88 | |
| 89 | fn load_test_config() -> Option<(String, String, String)> { |
| 90 | let config_path = std::path::Path::new(env!("CARGO_MANIFEST_DIR")) |
| 91 | .parent()? |
| 92 | .parent()? |
| 93 | .join("config.json"); |
| 94 | |
| 95 | let content = std::fs::read_to_string(&config_path).ok()?; |
| 96 | let config: serde_json::Value = serde_json::from_str(&content).ok()?; |
| 97 | |
| 98 | // Try new format first (providers array) |
| 99 | if let Some(providers) = config.get("providers").and_then(|p| p.as_array()) { |
| 100 | // Look for openai provider with kimi-k2.5 model |
| 101 | for provider in providers { |
| 102 | if let Some(models) = provider.get("models").and_then(|m| m.as_array()) { |
| 103 | for model in models { |
| 104 | if model.get("id")?.as_str()? == "kimi-k2.5" { |
| 105 | let api_base = model.get("baseUrl")?.as_str()?.to_string(); |
| 106 | let api_key = model.get("apiKey")?.as_str()?.to_string(); |
| 107 | let model_id = model.get("id")?.as_str()?.to_string(); |
| 108 | return Some((api_base, api_key, model_id)); |
| 109 | } |
| 110 | } |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | // Fallback: use first provider's first model |
| 115 | if let Some(provider) = providers.first() { |
| 116 | let api_base = provider.get("baseUrl")?.as_str()?.to_string(); |
| 117 | let api_key = provider.get("apiKey")?.as_str()?.to_string(); |
| 118 | let models = provider.get("models")?.as_array()?; |
| 119 | let model_id = models.first()?.get("id")?.as_str()?.to_string(); |
| 120 | return Some((api_base, api_key, model_id)); |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | // Try old format (llm object) |
| 125 | if let Some(llm) = config.get("llm") { |
| 126 | let api_base = llm.get("api_base")?.as_str()?.to_string(); |
| 127 | let api_key = llm.get("api_key")?.as_str()?.to_string(); |
| 128 | let model = llm.get("model")?.as_str()?.to_string(); |
| 129 | return Some((api_base, api_key, model)); |
| 130 | } |
| 131 | |
| 132 | None |
| 133 | } |
| 134 | |
| 135 | #[tokio::test] |
| 136 | #[ignore] // Run with: cargo test -p a3s-code --lib test_real_llm_openai_complete -- --ignored |
no test coverage detected