vv_agent/runtime/tool_call_runner/
request.rs1use crate::runtime::context::ExecutionContext;
2use crate::tools::ToolContext;
3use crate::types::{AgentTask, CycleRecord, Message, ToolCall, ToolExecutionResult};
4
5pub type ToolResultCallback<'a> = dyn FnMut(&ToolCall, &ToolExecutionResult) + 'a;
6
7pub struct ToolRunRequest<'a> {
8 pub task: &'a AgentTask,
9 pub tool_calls: Vec<ToolCall>,
10 pub context: &'a mut ToolContext,
11 pub messages: &'a mut Vec<Message>,
12 pub cycle_record: &'a mut CycleRecord,
13 pub interruption_provider: Option<&'a dyn Fn() -> Vec<Message>>,
14 pub on_tool_result: Option<&'a mut ToolResultCallback<'a>>,
15 pub execution_context: Option<&'a ExecutionContext>,
16}
17
18impl<'a> ToolRunRequest<'a> {
19 pub fn new(
20 task: &'a AgentTask,
21 tool_calls: Vec<ToolCall>,
22 context: &'a mut ToolContext,
23 messages: &'a mut Vec<Message>,
24 cycle_record: &'a mut CycleRecord,
25 ) -> Self {
26 Self {
27 task,
28 tool_calls,
29 context,
30 messages,
31 cycle_record,
32 interruption_provider: None,
33 on_tool_result: None,
34 execution_context: None,
35 }
36 }
37
38 pub fn with_interruption_provider(mut self, provider: &'a dyn Fn() -> Vec<Message>) -> Self {
39 self.interruption_provider = Some(provider);
40 self
41 }
42
43 pub fn with_tool_result_callback(mut self, callback: &'a mut ToolResultCallback<'a>) -> Self {
44 self.on_tool_result = Some(callback);
45 self
46 }
47
48 pub fn with_execution_context(mut self, execution_context: &'a ExecutionContext) -> Self {
49 self.execution_context = Some(execution_context);
50 self
51 }
52}