1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/// An LLM-callable tool that an agent can invoke during its reasoning loop.
///
/// Implement this trait to expose any capability — a calculator, web search,
/// file reader, or database query — to a [`crate::Chain`]-based agent. The
/// agent selects a tool by matching its [`Tool::name`] and calls [`Tool::run`]
/// with a plain-text input string.
///
/// # Example
///
/// ```rust
/// use rune_chain_core::Tool;
///
/// struct Echo;
///
/// impl Tool for Echo {
/// fn name(&self) -> &str { "echo" }
/// fn description(&self) -> &str { "Returns the input unchanged." }
/// fn run(&self, input: &str) -> String { input.to_string() }
/// }
///
/// let tool = Echo;
/// assert_eq!(tool.run("hello"), "hello");
/// ```