hjxdl 0.2.46__py3-none-any.whl → 0.2.47__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hdl/_version.py +2 -2
- hdl/utils/desc/func_desc.py +3 -117
- hdl/utils/desc/template.py +7 -7
- hdl/utils/llm/chat.py +83 -40
- {hjxdl-0.2.46.dist-info → hjxdl-0.2.47.dist-info}/METADATA +1 -1
- {hjxdl-0.2.46.dist-info → hjxdl-0.2.47.dist-info}/RECORD +8 -8
- {hjxdl-0.2.46.dist-info → hjxdl-0.2.47.dist-info}/WHEEL +0 -0
- {hjxdl-0.2.46.dist-info → hjxdl-0.2.47.dist-info}/top_level.txt +0 -0
hdl/_version.py
CHANGED
hdl/utils/desc/func_desc.py
CHANGED
@@ -1,123 +1,9 @@
|
|
1
|
-
FN_DESC = {
|
2
|
-
|
3
|
-
"get_weather": """
|
4
|
-
## 函数名:get_weather
|
5
|
-
描述:只有在用户询问一个城市的天气时,调用此工具获得此城市的天气信息
|
6
|
-
触发条件:用户的问题中询问到了一个城市的天气
|
7
|
-
参数:
|
8
|
-
# city (str): 城市名
|
9
|
-
返回值 (str):天气信息
|
10
|
-
需要返回的json
|
11
|
-
{
|
12
|
-
"function_name": "get_weather",
|
13
|
-
"params":
|
14
|
-
{
|
15
|
-
"city": <city_name>
|
16
|
-
}
|
17
|
-
}
|
18
|
-
|
19
|
-
""",
|
20
|
-
|
21
|
-
"get_datetime_by_cityname": """
|
22
|
-
## 函数名:get_datetime_by_cityname
|
23
|
-
描述:只有在用户询问一个城市当前的日期或时间时,调用此工具可以获得此城市当前的日期和时间
|
24
|
-
触发条件:用户询问一个城市当前的日期或时间
|
25
|
-
参数:
|
26
|
-
# city (str): 城市名
|
27
|
-
返回值 (str):这个城市当前所在时区的日期和时间
|
28
|
-
需要返回的json
|
29
|
-
{
|
30
|
-
"function_name": "get_datetime_by_cityname",
|
31
|
-
"params":
|
32
|
-
{
|
33
|
-
"city": <city_name>
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
""",
|
38
|
-
|
39
|
-
"execute_code": """
|
40
|
-
## 函数名:execute_code,
|
41
|
-
描述:当用户明确要求执行一段代码时,调用此工具,执行这段代码,返回执行结果。
|
42
|
-
触发条件:用户要求执行一段代码
|
43
|
-
参数:
|
44
|
-
# code (str): 用户要求执行的代码
|
45
|
-
返回值 (str): 执行结果
|
46
|
-
需要返回的json
|
47
|
-
{
|
48
|
-
"function_name": "execute_code",
|
49
|
-
"params":
|
50
|
-
{
|
51
|
-
"code": <code>
|
52
|
-
}
|
53
|
-
}
|
54
|
-
|
55
|
-
""",
|
56
|
-
|
57
|
-
"calculate": """
|
58
|
-
## 函数名:calculate,
|
59
|
-
描述:当用户要求计算一个数学表达式时,调用此工具,计算这个表达式,返回计算结果。
|
60
|
-
触发条件:用户要求计算一个数学表达式
|
61
|
-
参数:
|
62
|
-
# expression (str): 用户要求的数学表达式
|
63
|
-
返回值 (str): 计算结果
|
64
|
-
需要返回的json
|
65
|
-
{
|
66
|
-
"function_name": "calculate",
|
67
|
-
"params":
|
68
|
-
{
|
69
|
-
"expression": <expression>
|
70
|
-
}
|
71
|
-
}
|
72
|
-
|
73
|
-
""",
|
74
|
-
|
75
|
-
"fetch_baidu_results": """
|
76
|
-
## 函数名:fetch_baidu_results,
|
77
|
-
描述:在用户明确要求查询网络上相关信息时,调用此工具,返回查询结果。
|
78
|
-
触发条件:用户明确要求查询网络上相关信息
|
79
|
-
参数:
|
80
|
-
# query (str): 用户要求的查询内容
|
81
|
-
# max_n_links (int, optional): 搜索条目的最大数目,若用户指定了数目,则使用用户指定的数目,若用户提问中没有指定,你需要在下面的json中"max_n_links"这一项指定为数值3。
|
82
|
-
返回值 (str): 联网搜索到的信息
|
83
|
-
需要返回的json
|
84
|
-
{
|
85
|
-
"function_name": "fetch_baidu_results",
|
86
|
-
"params":
|
87
|
-
{
|
88
|
-
"query": <query from user question>,
|
89
|
-
"max_n_links": <num of max results, 如果用户没有要求,这一项则指定为3>
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
""",
|
94
|
-
"wolfram_alpha_calculate": """
|
95
|
-
## 函数名:wolfram_alpha_calculate
|
96
|
-
描述:当用户要求计算一个数学表达式时,调用此工具,计算这个表达式,返回计算结果。
|
97
|
-
触发条件:用户要求计算一个数学表达式
|
98
|
-
参数:
|
99
|
-
# query (str): 用户要求的数学表达式,需要转换为英文,比如"integrate sin(x)"
|
100
|
-
返回值 (str): 计算结果
|
101
|
-
需要返回的json
|
102
|
-
{
|
103
|
-
"function_name": "wolfram_alpha_calculate",
|
104
|
-
"params":
|
105
|
-
{
|
106
|
-
"query": <expression>
|
107
|
-
}
|
108
|
-
}
|
109
|
-
""",
|
110
|
-
|
111
|
-
"default": None
|
112
|
-
}
|
113
|
-
|
114
|
-
|
115
1
|
TOOL_DESC = {
|
116
2
|
|
117
3
|
"get_weather":{
|
118
4
|
"desc": """
|
119
5
|
## 函数名:get_weather
|
120
|
-
|
6
|
+
描述:用户询问一个城市的天气时,调用此工具获得此城市的天气信息
|
121
7
|
参数:
|
122
8
|
# city (str): 城市名
|
123
9
|
返回值 (str):天气信息
|
@@ -138,7 +24,7 @@ TOOL_DESC = {
|
|
138
24
|
"get_datetime_by_cityname": {
|
139
25
|
"desc": """
|
140
26
|
## 函数名:get_datetime_by_cityname
|
141
|
-
|
27
|
+
描述:用户询问一个城市当前的日期或时间时,调用此工具可以获得此城市当前的日期和时间
|
142
28
|
参数:
|
143
29
|
# city (str): 城市名
|
144
30
|
返回值 (str):这个城市当前所在时区的日期和时间
|
@@ -198,7 +84,7 @@ TOOL_DESC = {
|
|
198
84
|
"fetch_baidu_results": {
|
199
85
|
"desc": """
|
200
86
|
## 函数名:fetch_baidu_results,
|
201
|
-
|
87
|
+
描述:在用户提的问题需要联网搜索才能得到结果或者问题中有联网搜索的需求时,调用此工具,返回查询结果。
|
202
88
|
参数:
|
203
89
|
# query (str): 用户要求的查询内容
|
204
90
|
# max_n_links (int, optional): 搜索条目的最大数目,若用户指定了数目,则使用用户指定的数目,若用户提问中没有指定,你需要在下面的json中"max_n_links"这一项指定为数值3。
|
hdl/utils/desc/template.py
CHANGED
@@ -18,11 +18,11 @@ FN_TEMPLATE = """
|
|
18
18
|
"""
|
19
19
|
|
20
20
|
COT_TEMPLATE = """
|
21
|
-
你是一个专家级AI
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
你是一个专家级AI助手,有能针对一个问题和当前解决到的步骤给出下一步该进行操作的能力。
|
22
|
+
以JSON格式回复,该步骤对应的 json 包括'title'、'tool', 'content'和'stop_thinking',
|
23
|
+
若已有的信息可以回答用户问题,则'stop_thinking'键的值为 true 并把答案写在'conten'键的值中,若还需要下一步操作,'stop_thinking'键的则为 false 并在 'title' 键对应的值中给出该进行的操作;
|
24
|
+
若本步骤的操作不需要调用下文中提到的工具或信息足够回答用户问题,而不必包含'tool'键,若需要调用下文中的工具,则必须包含'tool'键,并且其值是工具函数名称。
|
25
|
+
你的回答中应只能是 json,且不包含其他多余文字不能有格式错误。
|
26
|
+
|
27
|
+
以下是可用的工具:
|
28
28
|
"""
|
hdl/utils/llm/chat.py
CHANGED
@@ -158,27 +158,72 @@ class OpenAI_M():
|
|
158
158
|
if not self.cot_desc:
|
159
159
|
self.cot_desc = COT_TEMPLATE
|
160
160
|
|
161
|
-
def
|
161
|
+
def cot(
|
162
162
|
self,
|
163
163
|
prompt,
|
164
|
+
max_step: int = 30,
|
164
165
|
**kwargs
|
165
166
|
):
|
167
|
+
"""_summary_
|
168
|
+
|
169
|
+
Args:
|
170
|
+
prompt (_type_): _description_
|
171
|
+
max_step (int, optional): _description_. Defaults to 30.
|
172
|
+
|
173
|
+
Returns:
|
174
|
+
_type_: _description_
|
175
|
+
"""
|
176
|
+
# 初始化当前信息为空字符串,用于累积后续的思考步骤和用户问题
|
177
|
+
current_info = ""
|
178
|
+
# 初始化步数为0,用于控制最大思考次数
|
179
|
+
n_steps = 0
|
180
|
+
|
181
|
+
# 初始化步骤列表,用于记录每一步的思考过程
|
166
182
|
steps = []
|
167
|
-
|
168
|
-
|
183
|
+
|
184
|
+
# 进入思考循环,直到找到答案或达到最大步数
|
169
185
|
while True:
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
186
|
+
# 增加步数计数
|
187
|
+
n_steps += 1
|
188
|
+
# 检查是否达到最大步数,如果是,则退出循环并返回默认答案
|
189
|
+
if n_steps >= max_step:
|
190
|
+
print("Max step reached!")
|
191
|
+
return "Sorry, I can't think of a better answer."
|
192
|
+
|
193
|
+
# 调用思考函数,传入当前信息和用户问题,获取下一步思考的结果
|
194
|
+
resp = self.invoke(
|
195
|
+
current_info + "用户问题:" + prompt,
|
196
|
+
sys_info=COT_TEMPLATE + self.tool_info,
|
197
|
+
assis_info = "好的,我将根据用户的问题和信息给出当前需要进行的操作或最终答案"
|
198
|
+
)
|
199
|
+
|
200
|
+
try:
|
201
|
+
# 将思考结果解析为JSON格式,以便后续处理
|
202
|
+
step_json = json.loads(resp)
|
203
|
+
# 将当前思考步骤添加到步骤列表中
|
204
|
+
steps.append(step_json)
|
205
|
+
# 如果思考步骤中标记为停止思考,则打印所有步骤并返回最终答案
|
206
|
+
if step_json["stop_thinking"]:
|
207
|
+
print(steps)
|
208
|
+
return step_json["content"]
|
209
|
+
else:
|
210
|
+
# 如果思考步骤中包含使用工具的指示,则构造工具提示并调用agent_response方法
|
211
|
+
if 'tool' in step_json:
|
212
|
+
tool_prompt = step_json["tool"] + step_json["title"] + step_json["content"]
|
213
|
+
tool_resp = self.agent_response(
|
214
|
+
tool_prompt,
|
215
|
+
stream=False,
|
216
|
+
**kwargs
|
217
|
+
)
|
218
|
+
# 将工具返回的信息累积到当前信息中
|
219
|
+
current_info += tool_resp
|
220
|
+
else:
|
221
|
+
# 如果不使用工具,将当前思考步骤的标题累积到当前信息中
|
222
|
+
current_info += step_json["title"]
|
223
|
+
except Exception as e:
|
224
|
+
# 捕获异常并打印,然后继续下一轮思考
|
225
|
+
print(e)
|
226
|
+
continue
|
182
227
|
|
183
228
|
def get_resp(
|
184
229
|
self,
|
@@ -192,30 +237,28 @@ class OpenAI_M():
|
|
192
237
|
stream: bool = True,
|
193
238
|
**kwargs: t.Any,
|
194
239
|
):
|
195
|
-
"""
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
返回:
|
210
|
-
- response: 模型的响应。
|
240
|
+
"""Prepare and send a request to the chat model, and return the model's response.
|
241
|
+
|
242
|
+
Args:
|
243
|
+
prompt (str): The user's input text.
|
244
|
+
sys_info (str, optional): System information, if any. Defaults to None.
|
245
|
+
assis_info (str, optional): Assistant information, if any. Defaults to None.
|
246
|
+
images (list, optional): List of images to send with the request, if any. Defaults to None.
|
247
|
+
image_keys (tuple, optional): Tuple containing the keys for image information. Defaults to ("image_url", "url").
|
248
|
+
stop (_type_, optional): List of stop sequences for the model. Defaults to ["USER:", "ASSISTANT:"].
|
249
|
+
model (str, optional): The name of the model to use. Defaults to "default_model".
|
250
|
+
stream (bool, optional): Whether to use streaming mode for the response. Defaults to True.
|
251
|
+
|
252
|
+
Returns:
|
253
|
+
_type_: The response object from the model.
|
211
254
|
"""
|
212
255
|
|
213
|
-
#
|
256
|
+
# Initialize the content list with at least the user's text input
|
214
257
|
content = [
|
215
258
|
{"type": "text", "text": prompt},
|
216
259
|
]
|
217
260
|
|
218
|
-
#
|
261
|
+
# Adjust the image_keys to be a tuple of length 3 based on its current length
|
219
262
|
if isinstance(image_keys, str):
|
220
263
|
image_keys = (image_keys,) * 3
|
221
264
|
elif len(image_keys) == 2:
|
@@ -223,7 +266,7 @@ class OpenAI_M():
|
|
223
266
|
elif len(image_keys) == 1:
|
224
267
|
image_keys = (image_keys[0],) * 3
|
225
268
|
|
226
|
-
#
|
269
|
+
# If images are provided, append them to the content list
|
227
270
|
if images:
|
228
271
|
if isinstance(images, str):
|
229
272
|
images = [images]
|
@@ -235,10 +278,10 @@ class OpenAI_M():
|
|
235
278
|
}
|
236
279
|
})
|
237
280
|
else:
|
238
|
-
#
|
281
|
+
# If no images are provided, content is simply the prompt text
|
239
282
|
content = prompt
|
240
283
|
|
241
|
-
#
|
284
|
+
# Initialize the messages list and add system information if provided
|
242
285
|
messages = []
|
243
286
|
if sys_info:
|
244
287
|
messages.append({
|
@@ -246,20 +289,20 @@ class OpenAI_M():
|
|
246
289
|
"content": sys_info
|
247
290
|
})
|
248
291
|
|
249
|
-
#
|
292
|
+
# Add the user's input as a message
|
250
293
|
messages.append({
|
251
294
|
"role": "user",
|
252
295
|
"content": content
|
253
296
|
})
|
254
297
|
|
255
|
-
#
|
298
|
+
# Add assistant information to the messages list if provided
|
256
299
|
if assis_info:
|
257
300
|
messages.append({
|
258
301
|
"role": "assistant",
|
259
302
|
"content": assis_info
|
260
303
|
})
|
261
304
|
|
262
|
-
#
|
305
|
+
# Call the model to generate a response
|
263
306
|
response = self.client.chat.completions.create(
|
264
307
|
messages=messages,
|
265
308
|
stream=stream,
|
@@ -267,7 +310,7 @@ class OpenAI_M():
|
|
267
310
|
**kwargs
|
268
311
|
)
|
269
312
|
|
270
|
-
#
|
313
|
+
# Return the model's response
|
271
314
|
return response
|
272
315
|
|
273
316
|
def invoke(
|
@@ -1,5 +1,5 @@
|
|
1
1
|
hdl/__init__.py,sha256=GffnD0jLJdhkd-vo989v40N90sQbofkayRBwxc6TVhQ,72
|
2
|
-
hdl/_version.py,sha256=
|
2
|
+
hdl/_version.py,sha256=tBkG62-I0GpJvDzYax3ziOOH-j0V7T_D21A6ka_5MNA,413
|
3
3
|
hdl/args/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
hdl/args/loss_args.py,sha256=s7YzSdd7IjD24rZvvOrxLLFqMZQb9YylxKeyelSdrTk,70
|
5
5
|
hdl/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -122,13 +122,13 @@ hdl/utils/database_tools/connect.py,sha256=xCacGucKxlQUXs6AsNddpeECvdqT1180V1ZWq
|
|
122
122
|
hdl/utils/database_tools/datetime.py,sha256=xqE2xNiOpADzX-R8_bM0bioJRF3Ay9Jp1CAG6dy6uVI,1202
|
123
123
|
hdl/utils/database_tools/web.py,sha256=PJ7R1chUD-vz-Up0orfFqdrZq3CFOlwiO9gIjFSb-R8,5224
|
124
124
|
hdl/utils/desc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
125
|
-
hdl/utils/desc/func_desc.py,sha256=
|
126
|
-
hdl/utils/desc/template.py,sha256=
|
125
|
+
hdl/utils/desc/func_desc.py,sha256=89GQEuJjkNaksBkgky2u6Yu2wDXAk1i7UpWozpIqwnA,3258
|
126
|
+
hdl/utils/desc/template.py,sha256=LHH6PxJvNBNr_2wHqz2jbxrH-OznbLegjWuj8RsRgdQ,2110
|
127
127
|
hdl/utils/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
128
128
|
hdl/utils/general/glob.py,sha256=8-RCnt6L297wMIfn34ZAMCsGCZUjHG3MGglGZI1cX0g,491
|
129
129
|
hdl/utils/general/runners.py,sha256=aWvEXYeuIF_F0AwucHIrrOOeeTM89goEFwW1rM35x1U,2231
|
130
130
|
hdl/utils/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
|
-
hdl/utils/llm/chat.py,sha256=
|
131
|
+
hdl/utils/llm/chat.py,sha256=jUFXMnYF2Q0CYWsMZDiCNx2pHRPASdL3nXuEUpDJGjw,19294
|
132
132
|
hdl/utils/llm/chatgr.py,sha256=A9SCWAvQulgO2x0ArIqcmgd_iVWVbSi1Oj15Diwb3Ok,3743
|
133
133
|
hdl/utils/llm/embs.py,sha256=Tf0FOYrOFZp7qQpEPiSCXzlgyHH0X9HVTUtsup74a9E,7174
|
134
134
|
hdl/utils/llm/extract.py,sha256=2sK_WJzmYIc8iuWaM9DA6Nw3_6q1O4lJ5pKpcZo-bBA,6512
|
@@ -139,7 +139,7 @@ hdl/utils/schedulers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
139
139
|
hdl/utils/schedulers/norm_lr.py,sha256=bDwCmdEK-WkgxQMFBiMuchv8Mm7C0-GZJ6usm-PQk14,4461
|
140
140
|
hdl/utils/weather/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
141
141
|
hdl/utils/weather/weather.py,sha256=k11o6wM15kF8b9NMlEfrg68ak-SfSYLN3nOOflFUv-I,4381
|
142
|
-
hjxdl-0.2.
|
143
|
-
hjxdl-0.2.
|
144
|
-
hjxdl-0.2.
|
145
|
-
hjxdl-0.2.
|
142
|
+
hjxdl-0.2.47.dist-info/METADATA,sha256=gEYH-JaU-n5NLVlI7EDkBejBIfnKnqc1sfCeLNfoHg4,836
|
143
|
+
hjxdl-0.2.47.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
144
|
+
hjxdl-0.2.47.dist-info/top_level.txt,sha256=-kxwTM5JPhylp06z3zAVO3w6_h7wtBfBo2zgM6YZoTk,4
|
145
|
+
hjxdl-0.2.47.dist-info/RECORD,,
|
File without changes
|
File without changes
|