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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! lellm-derive — 派生宏与属性宏。
//!
//! # 三级 API
//!
//! ## Level 1: `#[tool]` 函数宏(推荐,95% 用户)
//!
//! ```ignore
//! use lellm_agent::ToolResult;
//! use lellm_derive::tool;
//!
//! #[tool(name = "search", description = "搜索互联网信息")]
//! async fn search(query: String, limit: Option<u32>) -> ToolResult {
//! // 实现逻辑
//! Ok(format!("搜索结果: {}", query))
//! }
//!
//! // 无依赖 — 直接调用生成的工厂函数:
//! builder.tool(search_tool());
//!
//! // 有依赖 — 使用 _with 后缀工厂函数:
//! let client = SearchClient::new();
//! builder.tool(search_tool_with({
//! let client = client.clone();
//! move |args| async move {
//! client.search(&args.query, args.limit).await
//! }
//! }));
//! ```
//!
//! ## Level 2: `#[derive(Tool)]` struct 宏(高级用户)
//!
//! ```ignore
//! use lellm_agent::ToolResult;
//! use lellm_derive::Tool;
//!
//! #[derive(Tool, JsonSchema)]
//! #[tool(name = "search", description = "搜索互联网信息")]
//! struct SearchArgs {
//! /// 搜索关键词
//! query: String,
//! /// 返回数量
//! limit: Option<u32>,
//! }
//!
//! // 注册:
//! let reg = SearchArgs::safe(|args| async move {
//! Ok(format!("搜索结果: {}", args.query))
//! });
//! ```
//!
//! ## Level 3: `ToolRegistration::safe()`(框架开发者)
//!
//! ```ignore
//! use lellm_agent::{ToolDefinition, ToolRegistration};
//!
//! let reg = ToolRegistration::safe(
//! ToolDefinition {
//! name: "search".to_string(),
//! description: "搜索".to_string(),
//! parameters: serde_json::json!({
//! "type": "object",
//! "properties": { "query": { "type": "string" } }
//! }),
//! },
//! |args| async { Ok(args["query"].as_str().unwrap().to_string()) }
//! );
//! ```
use TokenStream;
use Span;
use ;
// ─────────────────────────────────────────────────────────────────
// Entry: #[tool] attribute macro (handles both fn and struct)
// ─────────────────────────────────────────────────────────────────
// ─────────────────────────────────────────────────────────────────
// Entry: #[derive(Tool)] derive macro
// ─────────────────────────────────────────────────────────────────
// ─────────────────────────────────────────────────────────────────
// Backward compatibility: ToolDefinition alias
// ─────────────────────────────────────────────────────────────────