use super::bodies::openai_compatible_chat_completions_body;
use super::*;
use crate::providers::{ChatMessage, ProviderConversationItem, ProviderToolResult};
use serde_json::json;
#[test]
#[ignore = "diagnostic-only optimization measurement; run explicitly with --ignored --nocapture"]
fn optimization_harness_measures_large_chat_body_construction() {
let tool_pair_count = 2_000;
let mut items = vec![ProviderConversationItem::Message(ChatMessage::user(
"measure body construction",
))];
for index in 0..tool_pair_count {
items.push(ProviderConversationItem::ResponseItem(json!({
"type": "function_call",
"call_id": format!("call_{index}"),
"name": "read",
"arguments": {"path": format!("fixtures/{index}.txt")},
"status": "completed"
})));
items.push(ProviderConversationItem::ToolResult(ProviderToolResult {
call_id: format!("call_{index}"),
tool_name: "read".to_string(),
success: true,
output: format!("file contents {index}"),
skill_reads: Vec::new(),
}));
}
let request = ProviderRequest::from_conversation("model-a", items);
let started = std::time::Instant::now();
let body = openai_compatible_chat_completions_body("model-a", &request);
let elapsed = started.elapsed();
let messages = body["messages"].as_array().unwrap();
println!(
"optimization_harness chat_body tool_pairs={} messages={} elapsed={elapsed:?}",
tool_pair_count,
messages.len()
);
assert_eq!(messages.len(), 1 + tool_pair_count * 2);
}