impl Client {
fn discard_pending_output(&mut self) {
self.current_stream = None;
self.auto_output = None;
self.manual_receive_buffer.clear();
}
pub fn clear_history(&mut self) {
self.history.clear();
self.discard_pending_output();
}
pub(crate) fn push_assistant(&mut self, blocks: &[ContentBlock]) {
self.history
.push(Message::assistant(coalesce_text_blocks(blocks)));
}
pub fn add_tool_result(&mut self, tool_use_id: &str, content: serde_json::Value) -> Result<()> {
use crate::types::ToolResultBlock;
if !self.manual_receive_buffer.is_empty() {
let blocks = std::mem::take(&mut self.manual_receive_buffer);
self.push_assistant(&blocks);
}
self.history.push(Message::new(
MessageRole::Tool,
vec![ContentBlock::ToolResult(ToolResultBlock::new(
tool_use_id,
content,
))],
));
Ok(())
}
pub fn get_tool(&self, name: &str) -> Option<&crate::tools::Tool> {
self.options
.tools()
.iter()
.find(|t| t.name() == name)
.map(|t| t.as_ref())
}
}