use langchainrust::{ContextWindow, Message};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== ContextWindow example ===\n");
let cw: ContextWindow<langchainrust::OpenAIChat> = ContextWindow::new(4096)?;
let messages = vec![
Message::system("You are an assistant"),
Message::human("First question"),
Message::ai("First answer"),
Message::human("Second question"),
Message::ai("Second answer"),
Message::human("Latest question"),
];
let fitted = cw.fit(messages.clone()).await?;
println!(
"Truncate strategy: {} messages → {} messages (within 4096 tokens)",
messages.len(),
fitted.len()
);
println!("\nSummarize strategy:");
println!(" let llm = OpenAIChat::new(config);");
println!(" let cw = ContextWindow::with_strategy(4096, Strategy::summarize(llm));");
println!(" let fitted = cw.fit(messages).await?;");
println!("\nWorkflow:");
println!(" 1. Count the total tokens of the messages");
println!(" 2. If over the limit, find the split point that keeps the newest messages");
println!(" 3. Use the LLM to compress the old messages into a summary");
println!(" 4. Return: system + [summary] + newest messages");
println!("\nCustom summary prompt:");
println!(" let cw = ContextWindow::with_strategy(");
println!(" 4096,");
println!(
" Strategy::summarize_with_prompt(llm, \"Summarize in English: {{conversation}}\\nSummary:\"),"
);
println!(" );");
Ok(())
}