Skip to main content

vv_agent/runtime/tool_call_runner/
request.rs

1use 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}