hjxdl 0.3.16__py3-none-any.whl → 0.3.18__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.3.16'
16
- __version_tuple__ = version_tuple = (0, 3, 16)
15
+ __version__ = version = '0.3.18'
16
+ __version_tuple__ = version_tuple = (0, 3, 18)
@@ -0,0 +1,21 @@
1
+ TOOL_DICT = {
2
+ "get_weather": {
3
+ "type": "function",
4
+ "function": {
5
+ "name": "get_weather",
6
+ "description": "Get current temperature for a given location.",
7
+ "parameters": {
8
+ "type": "object",
9
+ "properties": {
10
+ "location": {
11
+ "type": "string",
12
+ "description": "City name e.g. Bogotá"
13
+ }
14
+ },
15
+ "required": ["location"],
16
+ "additionalProperties": False
17
+ },
18
+ "strict": True
19
+ }
20
+ },
21
+ }
@@ -2,6 +2,7 @@ import yaml
2
2
  import typing as t
3
3
 
4
4
  from openai import OpenAI
5
+ import instructor
5
6
 
6
7
 
7
8
  class OpenAIWrapper(object):
@@ -63,7 +64,6 @@ class OpenAIWrapper(object):
63
64
  value['host'] = f"http://{host}:{port}/v1"
64
65
  self.client_conf = data
65
66
 
66
-
67
67
  def get_resp(
68
68
  self,
69
69
  prompt,
@@ -76,13 +76,17 @@ class OpenAIWrapper(object):
76
76
  model: str=None,
77
77
  tools: list = None,
78
78
  stream: bool = True,
79
+ response_model = None,
79
80
  **kwargs: t.Any,
80
81
  ):
82
+ if not model:
83
+ model = self.client_conf[client_id]['model']
81
84
 
82
85
  client = self.client_conf[client_id]['client']
86
+ if response_model:
87
+ client = instructor.from_openai(client)
88
+
83
89
  messages = []
84
- if history:
85
- messages = history
86
90
 
87
91
  if sys_info:
88
92
  messages.append({
@@ -90,6 +94,17 @@ class OpenAIWrapper(object):
90
94
  "content": sys_info
91
95
  })
92
96
 
97
+ if history:
98
+ messages.extend(history)
99
+ # history 需要符合以下格式,其中system不是必须
100
+ # history = [
101
+ # {"role": "system", "content": "You are a helpful assistant."},
102
+ # {"role": "user", "content": "message 1 content."},
103
+ # {"role": "assistant", "content": "message 2 content"},
104
+ # {"role": "user", "content": "message 3 content"},
105
+ # {"role": "assistant", "content": "message 4 content."},
106
+ # {"role": "user", "content": "message 5 content."}
107
+ # ]
93
108
 
94
109
  if not model:
95
110
  model = self.client_conf[client_id]["model"]
@@ -122,3 +137,64 @@ class OpenAIWrapper(object):
122
137
  "content": content
123
138
  })
124
139
 
140
+ if assis_info:
141
+ messages.append({
142
+ "role": "assistant",
143
+ "content": assis_info
144
+ })
145
+
146
+ resp = client.chat.completions.create(
147
+ model=model,
148
+ messages=messages,
149
+ tools=tools,
150
+ stream=stream,
151
+ **kwargs
152
+ )
153
+ return resp
154
+
155
+ def invoke(
156
+ self,
157
+ prompt,
158
+ **kwargs
159
+ ):
160
+ answer_dict = {}
161
+
162
+ resp = self.get_resp(
163
+ prompt,
164
+ stream=False,
165
+ **kwargs
166
+ )
167
+ if resp.choices[0].finish_reason == "stop":
168
+ answer_dict["type"] = "text"
169
+ answer_dict["contents"] = resp.choices[0].message.content
170
+ elif resp.choices[0].finish_reason == "tool_calls":
171
+ answer_dict["type"] = "tool_calls"
172
+ answer_dict["tool_parmas"] = resp.choices[0].message.tool_calls[0].function
173
+
174
+ return answer_dict
175
+
176
+ def stream(
177
+ self,
178
+ prompt,
179
+ **kwargs
180
+ ):
181
+ resp = self.get_resp(
182
+ prompt=prompt,
183
+ stream=True,
184
+ **kwargs
185
+ )
186
+ for chunk in resp:
187
+ if chunk.choices[0].finish_reason == 'tool_calls':
188
+ answer_dict = {}
189
+ answer_dict["type"] = "tool_calls"
190
+ answer_dict["tool_parmas"] = chunk.choices[0].delta.tool_calls[0].function
191
+ return answer_dict
192
+ else:
193
+ yield {
194
+ "type": "text",
195
+ "content": chunk.choices[0].delta.content
196
+ }
197
+
198
+
199
+
200
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: hjxdl
3
- Version: 0.3.16
3
+ Version: 0.3.18
4
4
  Summary: A collection of functions for Jupyter notebooks
5
5
  Home-page: https://github.com/huluxiaohuowa/hdl
6
6
  Author: Jianxing Hu
@@ -24,6 +24,7 @@ Requires-Dist: Pillow
24
24
  Requires-Dist: open_clip_torch
25
25
  Requires-Dist: natsort
26
26
  Requires-Dist: matplotlib
27
+ Requires-Dist: instructor
27
28
  Dynamic: author
28
29
  Dynamic: author-email
29
30
  Dynamic: classifier
@@ -1,5 +1,5 @@
1
1
  hdl/__init__.py,sha256=GffnD0jLJdhkd-vo989v40N90sQbofkayRBwxc6TVhQ,72
2
- hdl/_version.py,sha256=D8u-23f8Le_E16tPMMyTPeU4VTKL4yR8GkJhKkxDaXE,413
2
+ hdl/_version.py,sha256=QAzjzlQ8v3ZqOKXdT0jblmkqebjcDj2MPKGBvc_ei_4,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
@@ -124,6 +124,7 @@ hdl/utils/database_tools/web.py,sha256=awJ8lafL-2KRjf3V1uuij8JIvX9U5fI8fLZKOkOvq
124
124
  hdl/utils/desc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  hdl/utils/desc/func_desc.py,sha256=sHmVZZmV7Zgii--gnHqMs6fTb7HVkqTOf8Pl_0F6qlI,3808
126
126
  hdl/utils/desc/template.py,sha256=Kf_tbL-XkDCKNQ3UncbCuYEeUgXEa7kRVCf9TD2b8og,2526
127
+ hdl/utils/desc/tools.py,sha256=KNxmmTFFL3BZPh-2NGvNPz2VygHPJ3BWFa4VY2jy58g,619
127
128
  hdl/utils/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
129
  hdl/utils/general/glob.py,sha256=Zuf7WHU0UdUPOs9UrhxmrCiMC8GrHxQU6n3mTThv6yc,1120
129
130
  hdl/utils/general/runners.py,sha256=x7QBolp3MrqNV6L4rB6Ueybr26bqkRFZTuXhY0SwyLk,3061
@@ -133,15 +134,15 @@ hdl/utils/llm/chatgr.py,sha256=5F5PJHe8vz3iCfi4TT54DCLRi1UeJshECdVtgvvvao0,3696
133
134
  hdl/utils/llm/embs.py,sha256=Tf0FOYrOFZp7qQpEPiSCXzlgyHH0X9HVTUtsup74a9E,7174
134
135
  hdl/utils/llm/extract.py,sha256=2sK_WJzmYIc8iuWaM9DA6Nw3_6q1O4lJ5pKpcZo-bBA,6512
135
136
  hdl/utils/llm/llama_chat.py,sha256=watcHGOaz-bv3x-yDucYlGk5f8FiqfFhwWogrl334fk,4387
136
- hdl/utils/llm/llm_wrapper.py,sha256=sE0vays3ndXTa1HozoLOERYcloxyBW63EWdSwMLp2Yo,3511
137
+ hdl/utils/llm/llm_wrapper.py,sha256=Wk-ejwooxB6SRKuHW-UYxoBxgpYr9j-7ttKtFAaWFXw,5859
137
138
  hdl/utils/llm/vis.py,sha256=SSP6tOwKLq0hWcpM3twI9TitqzBmKjlcGrnXEWYlCzM,26055
138
139
  hdl/utils/llm/visrag.py,sha256=0i-VrxqgiV-J7R3VPshu9oc7-rKjFJOldYik3HDXj6M,10176
139
140
  hdl/utils/schedulers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
141
  hdl/utils/schedulers/norm_lr.py,sha256=bDwCmdEK-WkgxQMFBiMuchv8Mm7C0-GZJ6usm-PQk14,4461
141
142
  hdl/utils/weather/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
143
  hdl/utils/weather/weather.py,sha256=k11o6wM15kF8b9NMlEfrg68ak-SfSYLN3nOOflFUv-I,4381
143
- hjxdl-0.3.16.dist-info/LICENSE,sha256=lkMiSbeZHBQLB9LJEkS9-L3Z-LBC4yGnKrzHSG8RkPM,2599
144
- hjxdl-0.3.16.dist-info/METADATA,sha256=cCJsd4iB2Da-q95aYZ6GmY6TT0f9nHOCtjNDg1WQDC0,1310
145
- hjxdl-0.3.16.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
146
- hjxdl-0.3.16.dist-info/top_level.txt,sha256=-kxwTM5JPhylp06z3zAVO3w6_h7wtBfBo2zgM6YZoTk,4
147
- hjxdl-0.3.16.dist-info/RECORD,,
144
+ hjxdl-0.3.18.dist-info/LICENSE,sha256=lkMiSbeZHBQLB9LJEkS9-L3Z-LBC4yGnKrzHSG8RkPM,2599
145
+ hjxdl-0.3.18.dist-info/METADATA,sha256=X1nGN-ixCM4ltZjIrxPGCzkOGUXy-aIpeRhrNmaCWIQ,1336
146
+ hjxdl-0.3.18.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
147
+ hjxdl-0.3.18.dist-info/top_level.txt,sha256=-kxwTM5JPhylp06z3zAVO3w6_h7wtBfBo2zgM6YZoTk,4
148
+ hjxdl-0.3.18.dist-info/RECORD,,
File without changes