use std::collections::HashMap;
use rand::Rng;
use super::super::client::{MockToolCall, random_string};
use crate::agent::completions::ResolvedTool;
pub fn tasks_tool_call(
input_schema_json: &str,
tasks_min: u64,
tool_names: &[String],
tool_map: &HashMap<String, ResolvedTool>,
rng: &mut impl Rng,
) -> MockToolCall {
let tool_name = super::pick_invention_tool("oaifi_AppendTask", tool_names, tool_map, rng);
let arguments = match tool_name {
"oaifi_AppendTask" => {
let modalities = super::parse_scalar_schema(input_schema_json);
let messages_expr = super::build_messages_expr("input", &modalities);
let n_responses = rng.random_range(2u32..=5) as usize;
let responses: Vec<serde_json::Value> = (0..n_responses)
.map(|_| {
serde_json::json!([{"type": "text", "text": random_string(rng, 5, 40)}])
})
.collect();
let task_json = serde_json::json!({
"type": "vector.completion",
"messages": { "$starlark": messages_expr },
"responses": responses,
}).to_string();
serde_json::json!({"task": task_json}).to_string()
}
"oaifi_EditPredictedTasksLength" => {
serde_json::json!({"tasks_length": tasks_min}).to_string()
}
"oaifi_DeleteTask" | "oaifi_ReadTask" => {
serde_json::json!({ "index": rng.random_range(0u32..5) }).to_string()
}
_ => "{}".to_string(),
};
MockToolCall {
tool_name: tool_name.to_string(),
call_id: format!("call_mock_{}", rng.random_range(0u64..u64::MAX)),
arguments,
n_deltas: rng.random_range(1u32..=5) as usize,
}
}