1use serde_json::{json, Value};
2
3use crate::config::ResolvedModelConfig;
4use crate::types::{AgentResult, AgentStatus};
5
6pub fn result_payload(result: &AgentResult, resolved: &ResolvedModelConfig) -> Value {
7 json!({
8 "status": status_value(result.status),
9 "final_answer": result.final_answer,
10 "wait_reason": result.wait_reason,
11 "error": result.error,
12 "cycles": result.cycles.len(),
13 "todo_list": result.todo_list(),
14 "resolved": {
15 "backend": resolved.backend,
16 "selected_model": resolved.selected_model,
17 "model_id": resolved.model_id,
18 "endpoint": resolved.endpoint().map(|endpoint| endpoint.endpoint_id.clone()),
19 },
20 })
21}
22
23fn status_value(status: AgentStatus) -> &'static str {
24 match status {
25 AgentStatus::Pending => "pending",
26 AgentStatus::Running => "running",
27 AgentStatus::WaitUser => "wait_user",
28 AgentStatus::Completed => "completed",
29 AgentStatus::Failed => "failed",
30 AgentStatus::MaxCycles => "max_cycles",
31 }
32}