browser_use/tools/
evaluate.rs1use crate::error::{BrowserError, Result};
2use crate::tools::{Tool, ToolContext, ToolResult};
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
8pub struct EvaluateParams {
9 pub code: String,
11
12 #[serde(default)]
14 pub await_promise: bool,
15}
16
17#[derive(Default)]
18pub struct EvaluateTool;
19
20impl Tool for EvaluateTool {
21 type Params = EvaluateParams;
22
23 fn name(&self) -> &str {
24 "evaluate"
25 }
26
27 fn execute_typed(
28 &self,
29 params: EvaluateParams,
30 context: &mut ToolContext,
31 ) -> Result<ToolResult> {
32 let result = context
33 .session
34 .tab()
35 .evaluate(¶ms.code, params.await_promise)
36 .map_err(|e| BrowserError::EvaluationFailed(e.to_string()))?;
37
38 let result_value = result.value.unwrap_or(Value::Null);
39
40 Ok(ToolResult::success_with(serde_json::json!({
41 "result": result_value
42 })))
43 }
44}