hjxdl 0.2.46__py3-none-any.whl → 0.2.48__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 CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.2.46'
16
- __version_tuple__ = version_tuple = (0, 2, 46)
15
+ __version__ = version = '0.2.48'
16
+ __version_tuple__ = version_tuple = (0, 2, 48)
@@ -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。
@@ -18,11 +18,11 @@ FN_TEMPLATE = """
18
18
  """
19
19
 
20
20
  COT_TEMPLATE = """
21
- 你是一个专家级AI助手,有能针对一个问题分解成合适的步骤并逐步解释推理过程的能力。
22
- 对于每一步,提供标题来描述您在该步骤中要做什么,以及内容。决定是否需要另一个步骤或是否准备好给出最终答案。
23
- 以JSON格式回复,包括'title''tool','tool_param','content'和'next_action',
24
- 其中'title'键的值为此步骤的任务,'content'键的值为此步骤的具体操作,而'next_station'键的值只能是'continue'或'final_answer'两种),
25
- 若此步骤需要调用下文所述的工具,则'tool'键的值为工具名称,而'tool_param'键的值为工具参数,即把下文中工具描述中的返回 json 作为'tool_param'的值;
26
- 若此步骤不需要调用下文所述的工具,则'tool'键的值为null,而'tool_param'键的值为null。
27
- 你的回答中应只包含一段 json,且不包含其他多余文字。
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,73 @@ class OpenAI_M():
158
158
  if not self.cot_desc:
159
159
  self.cot_desc = COT_TEMPLATE
160
160
 
161
- def get_thought_chain(
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
- total_thinking_time = 0
168
- is_final: bool = False
183
+
184
+ # 进入思考循环,直到找到答案或达到最大步数
169
185
  while True:
170
- yield {
171
- "type": "step",
172
- "data": steps,
173
- "extra": None
174
- }
175
- if is_final:
176
- break
177
- yield {
178
- "type": "final",
179
- "data": steps,
180
- "total_time": total_thinking_time
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
+ print(step_json)
204
+ # 将当前思考步骤添加到步骤列表中
205
+ steps.append(step_json)
206
+ # 如果思考步骤中标记为停止思考,则打印所有步骤并返回最终答案
207
+ if step_json["stop_thinking"]:
208
+ # print(steps)
209
+ return step_json["content"]
210
+ else:
211
+ # 如果思考步骤中包含使用工具的指示,则构造工具提示并调用agent_response方法
212
+ if 'tool' in step_json:
213
+ tool_prompt = step_json["tool"] + step_json["title"] + step_json["content"]
214
+ tool_resp = self.agent_response(
215
+ tool_prompt,
216
+ stream=False,
217
+ **kwargs
218
+ )
219
+ # 将工具返回的信息累积到当前信息中
220
+ current_info += tool_resp
221
+ else:
222
+ # 如果不使用工具,将当前思考步骤的标题累积到当前信息中
223
+ current_info += step_json["title"]
224
+ except Exception as e:
225
+ # 捕获异常并打印,然后继续下一轮思考
226
+ print(e)
227
+ continue
182
228
 
183
229
  def get_resp(
184
230
  self,
@@ -192,30 +238,28 @@ class OpenAI_M():
192
238
  stream: bool = True,
193
239
  **kwargs: t.Any,
194
240
  ):
195
- """
196
- 获取响应函数。构造并发送一个聊天请求,以获取模型的响应。
197
-
198
- 参数:
199
- - prompt: 用户的输入文本。
200
- - sys_info: 系统信息,用于提供给模型作为上下文。
201
- - assis_info: 助手信息,用于在用户输入后提供给模型。
202
- - images: 图像列表,用于提供给模型作为输入的一部分。
203
- - image_keys: 图像键的元组,用于指定图像的类型和位置。
204
- - stop: 停止序列,用于指示模型在生成文本时应停止的序列。
205
- - model: 使用的模型名称。
206
- - stream: 是否以流式传输方式接收响应。
207
- - **kwargs: 其他传递给模型的参数。
208
-
209
- 返回:
210
- - response: 模型的响应。
241
+ """Prepare and send a request to the chat model, and return the model's response.
242
+
243
+ Args:
244
+ prompt (str): The user's input text.
245
+ sys_info (str, optional): System information, if any. Defaults to None.
246
+ assis_info (str, optional): Assistant information, if any. Defaults to None.
247
+ images (list, optional): List of images to send with the request, if any. Defaults to None.
248
+ image_keys (tuple, optional): Tuple containing the keys for image information. Defaults to ("image_url", "url").
249
+ stop (_type_, optional): List of stop sequences for the model. Defaults to ["USER:", "ASSISTANT:"].
250
+ model (str, optional): The name of the model to use. Defaults to "default_model".
251
+ stream (bool, optional): Whether to use streaming mode for the response. Defaults to True.
252
+
253
+ Returns:
254
+ _type_: The response object from the model.
211
255
  """
212
256
 
213
- # 初始化内容列表,至少包含用户的文本输入
257
+ # Initialize the content list with at least the user's text input
214
258
  content = [
215
259
  {"type": "text", "text": prompt},
216
260
  ]
217
261
 
218
- # 根据image_keys的长度,调整其为三元组形式
262
+ # Adjust the image_keys to be a tuple of length 3 based on its current length
219
263
  if isinstance(image_keys, str):
220
264
  image_keys = (image_keys,) * 3
221
265
  elif len(image_keys) == 2:
@@ -223,7 +267,7 @@ class OpenAI_M():
223
267
  elif len(image_keys) == 1:
224
268
  image_keys = (image_keys[0],) * 3
225
269
 
226
- # 如果提供了图像,将其添加到内容列表中
270
+ # If images are provided, append them to the content list
227
271
  if images:
228
272
  if isinstance(images, str):
229
273
  images = [images]
@@ -235,10 +279,10 @@ class OpenAI_M():
235
279
  }
236
280
  })
237
281
  else:
238
- # 如果没有提供图像,内容仅包含提示文本
282
+ # If no images are provided, content is simply the prompt text
239
283
  content = prompt
240
284
 
241
- # 初始化消息列表,首先添加系统信息(如果提供)
285
+ # Initialize the messages list and add system information if provided
242
286
  messages = []
243
287
  if sys_info:
244
288
  messages.append({
@@ -246,20 +290,20 @@ class OpenAI_M():
246
290
  "content": sys_info
247
291
  })
248
292
 
249
- # 添加用户输入作为消息
293
+ # Add the user's input as a message
250
294
  messages.append({
251
295
  "role": "user",
252
296
  "content": content
253
297
  })
254
298
 
255
- # 如果提供了助手信息,将其添加到消息列表中
299
+ # Add assistant information to the messages list if provided
256
300
  if assis_info:
257
301
  messages.append({
258
302
  "role": "assistant",
259
303
  "content": assis_info
260
304
  })
261
305
 
262
- # 调用模型生成响应
306
+ # Call the model to generate a response
263
307
  response = self.client.chat.completions.create(
264
308
  messages=messages,
265
309
  stream=stream,
@@ -267,7 +311,7 @@ class OpenAI_M():
267
311
  **kwargs
268
312
  )
269
313
 
270
- # 返回模型的响应
314
+ # Return the model's response
271
315
  return response
272
316
 
273
317
  def invoke(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hjxdl
3
- Version: 0.2.46
3
+ Version: 0.2.48
4
4
  Summary: A collection of functions for Jupyter notebooks
5
5
  Home-page: https://github.com/huluxiaohuowa/hdl
6
6
  Author: Jianxing Hu
@@ -1,5 +1,5 @@
1
1
  hdl/__init__.py,sha256=GffnD0jLJdhkd-vo989v40N90sQbofkayRBwxc6TVhQ,72
2
- hdl/_version.py,sha256=FJ1FAK3elIMCAdZny85iRWTGI-xB736Y-r-Yr7pOWg4,413
2
+ hdl/_version.py,sha256=wR5W_GoLYJj5Ko_OzDFXLOZvCrxuOlk00nAPekKOTz8,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=Y8Aj3vR2aU-SXVS-UC4w7yDTAw8AbkkPWwNA8vpHMJ8,6423
126
- hdl/utils/desc/template.py,sha256=09wnkMgg4Kxtl7zbsvQe61DilRDRUb-In5Qbi3809DY,2216
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=KaXWFB1FddtpMwhSdPrdNJLsmHC9xc6wQU8NOR07DmM,16750
131
+ hdl/utils/llm/chat.py,sha256=uByk4wxBJWNorZ4Xct8yUBhv0nsgYc4I9UitMxdfOXI,19329
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.46.dist-info/METADATA,sha256=uvPbmQ4GOw2FqSbRtguOClwJgwKB8Akfu10-kORtKr0,836
143
- hjxdl-0.2.46.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
144
- hjxdl-0.2.46.dist-info/top_level.txt,sha256=-kxwTM5JPhylp06z3zAVO3w6_h7wtBfBo2zgM6YZoTk,4
145
- hjxdl-0.2.46.dist-info/RECORD,,
142
+ hjxdl-0.2.48.dist-info/METADATA,sha256=wTP9nANv2SMbdmGAKMazjhx3x118rj0WpzdURZqfx34,836
143
+ hjxdl-0.2.48.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
144
+ hjxdl-0.2.48.dist-info/top_level.txt,sha256=-kxwTM5JPhylp06z3zAVO3w6_h7wtBfBo2zgM6YZoTk,4
145
+ hjxdl-0.2.48.dist-info/RECORD,,
File without changes