feat: add test_load and test_parse binaries for configuration loading and parsing

This commit is contained in:
asepharyana
2026-07-20 14:47:55 +07:00
parent 66ac4dbf02
commit fe2e916937
10 changed files with 318 additions and 173 deletions
+39 -7
View File
@@ -33,6 +33,29 @@ pub fn spawn_agent_turn(state: &mut AppStateRest, text: String) {
let session_dir = state.session_dir.clone();
let workspace_roots = state.workspace_roots.clone();
// Resolve LLM provider configuration from settings
let provider_name = &state.settings.provider;
let provider_cfg = state.app_config.providers.get(provider_name).cloned();
let mut api_key = String::new();
if let Some(key) = state.settings.api_keys.get(provider_name) {
api_key = key.clone();
} else if let Some(ref cfg) = provider_cfg {
if let Some(ref default_key) = cfg.default_api_key {
api_key = default_key.clone();
}
if api_key.is_empty() {
if let Some(ref env_name) = cfg.api_key_env {
if let Ok(val) = std::env::var(env_name) {
api_key = val;
}
}
}
}
let model = state.settings.model.clone();
let api_base = provider_cfg.map(|cfg| cfg.api_base.clone());
let mut messages: Vec<ChatMessage> = state
.session_runtime
.as_ref()
@@ -44,10 +67,20 @@ pub fn spawn_agent_turn(state: &mut AppStateRest, text: String) {
rt.messages = messages.clone();
}
info!("spawning agent turn with {} messages", messages.len());
info!("spawning agent turn with {} messages (model: {})", messages.len(), model);
std::thread::spawn(move || {
run_turn(&mut messages, &session_dir, &workspace_roots, &turn_events, &in_flight, &abort);
run_turn(
&mut messages,
&session_dir,
&workspace_roots,
&turn_events,
&in_flight,
&abort,
api_key,
model,
api_base,
);
});
}
@@ -59,12 +92,11 @@ fn run_turn(
turn_events: &Arc<Mutex<VecDeque<TurnEvent>>>,
in_flight: &Arc<AtomicBool>,
abort: &Arc<AtomicBool>,
api_key: String,
model: String,
api_base: Option<String>,
) {
let client = LlmClient::new(
String::new(), // API key resolved internally from env
"deepseek-v4-flash-free".to_string(),
Some("https://opencode.ai/zen/v1".to_string()),
);
let client = LlmClient::new(api_key, model, api_base);
let tools = all_tools();
let defs = tool_defs(&tools);