| 372 | timestamp: "datetime.datetime | None"=None |
| 373 | ) -> "ToolHandle", text_signature = "(name: str, args: object, *, handle: ScopeHandle | None = None, attributes: ToolAttributes | None = None, data: object | None = None, metadata: object | None = None, tool_call_id: str | None = None, timestamp: datetime.datetime | None = None) -> ToolHandle")] |
| 374 | fn tool_call( |
| 375 | name: &str, |
| 376 | args: &Bound<'_, PyAny>, |
| 377 | handle: Option<PyScopeHandle>, |
| 378 | attributes: Option<PyToolAttributes>, |
| 379 | data: Option<&Bound<'_, PyAny>>, |
| 380 | metadata: Option<&Bound<'_, PyAny>>, |
| 381 | tool_call_id: Option<String>, |
| 382 | timestamp: Option<&Bound<'_, PyAny>>, |
| 383 | ) -> PyResult<PyToolHandle> { |
| 384 | let args_json = py_to_json(args)?; |
| 385 | let attrs = attributes |
| 386 | .map(|a| a.inner) |
| 387 | .unwrap_or(ToolAttributes::empty()); |
| 388 | let data = opt_py_to_json(data)?; |
| 389 | let metadata = opt_py_to_json(metadata)?; |
| 390 | let timestamp = opt_py_to_timestamp(timestamp)?; |
| 391 | core_tool_api::tool_call( |
| 392 | core_tool_api::ToolCallParams::builder() |
| 393 | .name(name) |
| 394 | .args(args_json) |
| 395 | .parent_opt(handle.as_ref().map(|h| &h.inner)) |
| 396 | .attributes(attrs) |
| 397 | .data_opt(data) |
| 398 | .metadata_opt(metadata) |
| 399 | .tool_call_id_opt(tool_call_id) |
| 400 | .timestamp_opt(timestamp) |
| 401 | .build(), |
| 402 | ) |
| 403 | .map(PyToolHandle::from) |
| 404 | .map_err(to_py_err) |
| 405 | } |
| 406 | |
| 407 | /// End a tool call — records the result and emits an ``End`` event. |
| 408 | /// |