lionagi 0.0.106__py3-none-any.whl → 0.0.107__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,20 +19,25 @@ class OpenAIRateLimiter(RateLimiter):
19
19
  and replenishing these limits at regular intervals.
20
20
 
21
21
  Attributes:
22
- max_requests_per_minute (int): Maximum number of requests allowed per minute.
23
- max_tokens_per_minute (int): Maximum number of tokens allowed per minute.
22
+ max_requests_per_minute (int):
23
+ Maximum number of requests allowed per minute.
24
+ max_tokens_per_minute (int):
25
+ Maximum number of tokens allowed per minute.
24
26
 
25
27
  Methods:
26
- rate_limit_replenisher: Coroutine to replenish rate limits over time.
27
- calculate_num_token: Calculates the required tokens for a request.
28
+ rate_limit_replenisher:
29
+ Coroutine to replenish rate limits over time.
30
+ calculate_num_token:
31
+ Calculates the required tokens for a request.
28
32
  """
29
33
 
30
34
  def __init__(self, max_requests_per_minute: int, max_tokens_per_minute: int) -> None:
31
35
  """
32
36
  Initializes the rate limiter with specific limits for OpenAI API.
33
37
 
34
- Args:
38
+ Parameters:
35
39
  max_requests_per_minute (int): The maximum number of requests allowed per minute.
40
+
36
41
  max_tokens_per_minute (int): The maximum number of tokens that can accumulate per minute.
37
42
  """
38
43
  super().__init__(max_requests_per_minute, max_tokens_per_minute)
@@ -66,8 +71,9 @@ class OpenAIRateLimiter(RateLimiter):
66
71
  This method should be implemented in a subclass to provide the specific calculation logic
67
72
  for the OpenAI API.
68
73
 
69
- Args:
74
+ Parameters:
70
75
  payload (Dict[str, Any]): The payload of the request.
76
+
71
77
  api_endpoint (str): The specific API endpoint for the request.
72
78
 
73
79
  Returns:
@@ -160,12 +166,17 @@ class OpenAIService(BaseAPIService):
160
166
  """
161
167
  Initializes the OpenAI service with configuration for API interaction.
162
168
 
163
- Args:
169
+ Parameters:
164
170
  api_key (str): The API key for authenticating with OpenAI.
171
+
165
172
  token_encoding_name (str): The name of the text encoding used by OpenAI.
173
+
166
174
  max_attempts (int): The maximum number of attempts for calling an API endpoint.
175
+
167
176
  status_tracker (Optional[StatusTracker]): Tracker for API call outcomes.
168
- rate_limiter (Optional[OpenAIRateLimiter]): Rate limiter for OpenAI's limits.
177
+
178
+ ratelimiter (Optional[OpenAIRateLimiter]): Rate limiter for OpenAI's limits.
179
+
169
180
  queue (Optional[AsyncQueue]): Queue for managing asynchronous API calls.
170
181
 
171
182
  Example:
@@ -183,15 +194,16 @@ class OpenAIService(BaseAPIService):
183
194
  super().__init__(api_key, token_encoding_name, max_attempts,
184
195
  max_requests_per_minute, max_tokens_per_minute,
185
196
  ratelimiter, status_tracker, queue)
186
-
187
197
 
188
- async def call_api(self, http_session, endpoint, payload: Dict[str, any] =None) -> Optional[Dict[str, any]]:
198
+ async def call_api(self, http_session, endpoint, payload: Dict[str, any] = None) -> Optional[Dict[str, any]]:
189
199
  """
190
200
  Call an OpenAI API endpoint with a specific payload and handle the response.
191
201
 
192
- Args:
193
- session: The session object for making HTTP requests.
194
- request_url (str): The full URL of the OpenAI API endpoint to be called.
202
+ Parameters:
203
+ http_session: The session object for making HTTP requests.
204
+
205
+ endpoint (str): The full URL of the OpenAI API endpoint to be called.
206
+
195
207
  payload (Dict[str, any]): The payload to send with the API request.
196
208
 
197
209
  Returns:
@@ -1,5 +1,6 @@
1
1
  from .message import Message
2
2
 
3
+
3
4
  class Conversation:
4
5
  """
5
6
  A class representing a conversation between users and the assistant.
@@ -8,21 +9,22 @@ class Conversation:
8
9
  user instructions, and assistant responses.
9
10
 
10
11
  Attributes:
11
- response_counts (int): The count of assistant responses in the conversation.
12
- messages (list): A list to store messages in the conversation.
13
- msg (Message): An instance of the Message class for creating messages.
14
- responses (list): A list to store assistant responses in the conversation.
12
+ response_counts (int):
13
+ The count of assistant responses in the conversation.
14
+ messages (list):
15
+ A list to store messages in the conversation.
16
+ msg (Message):
17
+ An instance of the Message class for creating messages.
18
+ responses (list):
19
+ A list to store assistant responses in the conversation.
15
20
 
16
21
  Methods:
17
22
  initiate_conversation(system, instruction, context=None, name=None):
18
23
  Initiate a conversation with a system setting and user instruction.
19
-
20
24
  add_messages(system, instruction, context=None, response=None, tool=None, name=None):
21
25
  Add messages to the conversation, including system setting, user instruction, and assistant response.
22
-
23
26
  change_system(system):
24
27
  Change the system setting in the conversation.
25
-
26
28
  keep_last_n_exchanges(n: int):
27
29
  Keep the last n exchanges in the conversation.
28
30
  """
@@ -46,8 +48,11 @@ class Conversation:
46
48
 
47
49
  Parameters:
48
50
  system (str): The system setting for the conversation.
51
+
49
52
  instruction (str): The user instruction to initiate the conversation.
53
+
50
54
  context (dict): Additional context for the conversation. Default is None.
55
+
51
56
  name (str): The name associated with the user. Default is None.
52
57
  """
53
58
  self.messages, self.responses = [], []
@@ -61,10 +66,13 @@ class Conversation:
61
66
 
62
67
  Parameters:
63
68
  system (str): The system setting for the message. Default is None.
69
+
64
70
  instruction (str): The instruction content for the message. Default is None.
71
+
65
72
  context (dict): Additional context for the message. Default is None.
73
+
66
74
  response (dict): The response content for the message. Default is None.
67
- tool (dict): The tool information for the message. Default is None.
75
+
68
76
  name (str): The name associated with the message. Default is None.
69
77
  """
70
78
  msg = self.msg(system=system, instruction=instruction, context=context,
@@ -93,4 +101,5 @@ class Conversation:
93
101
  ]
94
102
  if len(response_indices) >= n:
95
103
  first_index_to_keep = response_indices[-n] + 1
96
- self.messages = [self.system] + self.messages[first_index_to_keep:]
104
+ self.messages = self.messages[0] + self.messages[first_index_to_keep:]
105
+
@@ -11,11 +11,16 @@ class Message:
11
11
  This class encapsulates messages from users, the assistant, systems, and external tools.
12
12
 
13
13
  Attributes:
14
- role (str): The role of the message, indicating if it's from the user, assistant, system, or tool.
15
- content: The content of the message, which can be an instruction, response, system setting, or tool information.
16
- name (str): The name associated with the message, specifying the source (user, assistant, system, or tool).
17
- metadata (dict): Additional metadata including id, timestamp, and name.
18
- _logger (DataLogger): An instance of the DataLogger class for logging message details.
14
+ role (str):
15
+ The role of the message, indicating if it's from the user, assistant, system, or tool.
16
+ content:
17
+ The content of the message, which can be an instruction, response, system setting, or tool information.
18
+ name (str):
19
+ The name associated with the message, specifying the source (user, assistant, system, or tool).
20
+ metadata (dict):
21
+ Additional metadata including id, timestamp, and name.
22
+ _logger (DataLogger):
23
+ An instance of the DataLogger class for logging message details.
19
24
 
20
25
  Methods:
21
26
  create_message(system, instruction, context, response, tool, name):
@@ -47,10 +52,13 @@ class Message:
47
52
 
48
53
  Parameters:
49
54
  system (str): The system setting for the message. Default is None.
55
+
50
56
  instruction (str): The instruction content for the message. Default is None.
57
+
51
58
  context (dict): Additional context for the message. Default is None.
59
+
52
60
  response (dict): The response content for the message. Default is None.
53
- tool (dict): The tool information for the message. Default is None.
61
+
54
62
  name (str): The name associated with the message. Default is None.
55
63
  """
56
64
  if sum(l_call([system, instruction, response], bool)) > 1:
@@ -63,10 +71,17 @@ class Message:
63
71
  response = response["message"]
64
72
  if str(response['content']) == "None":
65
73
  try:
66
- if response['tool_calls'][0]['type'] == 'function':
67
- self.name = name or ("func_" + response['tool_calls'][0]['function']['name'])
68
- content = response['tool_calls'][0]['function']['arguments']
69
- self.content = {"function":self.name, "arguments": content}
74
+ tool_count = 0
75
+ func_list = []
76
+ while tool_count < len(response['tool_calls']):
77
+ if response['tool_calls'][tool_count]['type'] == 'function':
78
+ func_content = {"function": ("func_" + response['tool_calls'][tool_count]['function']['name']),
79
+ "arguments": response['tool_calls'][tool_count]['function']['arguments']}
80
+ func_list.append(func_content)
81
+ tool_count += 1
82
+
83
+ self.name = name or "func_request"
84
+ self.content = {'function_list': func_list}
70
85
  except:
71
86
  raise ValueError("Response message must be one of regular response or function calling")
72
87
  else:
@@ -74,7 +89,7 @@ class Message:
74
89
  self.name = name or "assistant"
75
90
  except:
76
91
  self.name = name or "func_call"
77
- self.content = {"function call result": response}
92
+ self.content = response
78
93
 
79
94
  elif instruction:
80
95
  self.role = "user"
@@ -92,7 +107,7 @@ class Message:
92
107
  Convert the message to a JSON format.
93
108
 
94
109
  Returns:
95
- - dict: The message in JSON format.
110
+ dict: The message in JSON format.
96
111
  """
97
112
  out = {
98
113
  "role": self.role,
@@ -114,11 +129,14 @@ class Message:
114
129
 
115
130
  Parameters:
116
131
  system (str): The system setting for the message. Default is None.
132
+
117
133
  instruction (str): The instruction content for the message. Default is None.
134
+
118
135
  context (dict): Additional context for the message. Default is None.
136
+
119
137
  response (dict): The response content for the message. Default is None.
138
+
120
139
  name (str): The name associated with the message. Default is None.
121
- tool (dict): The tool information for the message. Default is None.
122
140
 
123
141
  Returns:
124
142
  dict: The message in JSON format.
@@ -133,10 +151,16 @@ class Message:
133
151
 
134
152
  Parameters:
135
153
  dir (str): The directory path for saving the CSV file. Default is None.
154
+
136
155
  filename (str): The filename for the CSV file. Default is None.
156
+
137
157
  verbose (bool): Whether to include verbose information in the CSV. Default is True.
158
+
138
159
  timestamp (bool): Whether to include timestamps in the CSV. Default is True.
160
+
139
161
  dir_exist_ok (bool): Whether to allow the directory to exist. Default is True.
162
+
140
163
  file_exist_ok (bool): Whether to allow the file to exist. Default is False.
141
164
  """
142
- self._logger.to_csv(dir, filename, verbose, timestamp, dir_exist_ok, file_exist_ok)
165
+ self._logger.to_csv(dir, filename, verbose, timestamp, dir_exist_ok, file_exist_ok)
166
+
@@ -3,19 +3,19 @@ import asyncio
3
3
  import json
4
4
  from typing import Any
5
5
 
6
+ import lionagi
6
7
  from .conversation import Conversation
7
- from ..utils.sys_util import to_list
8
+ from ..utils.sys_util import to_list, l_call, al_call
8
9
  from ..utils.log_util import DataLogger
9
10
  from ..utils.api_util import StatusTracker
10
11
  from ..utils.tool_util import ToolManager
11
12
  from ..api.oai_service import OpenAIService
12
-
13
13
  from ..api.oai_config import oai_llmconfig
14
14
 
15
-
16
15
  status_tracker = StatusTracker()
17
16
  OAIService = OpenAIService()
18
17
 
18
+
19
19
  class Session():
20
20
  """
21
21
  A class representing a conversation session with a conversational AI system.
@@ -23,12 +23,18 @@ class Session():
23
23
  This class manages the flow of conversation, system settings, and interactions with external tools.
24
24
 
25
25
  Attributes:
26
- conversation (Conversation): An instance of the Conversation class to manage messages.
27
- system (str): The current system setting for the conversation.
28
- llmconfig (dict): Configuration settings for the language model.
29
- _logger (DataLogger): An instance of the DataLogger class for logging conversation details.
30
- api_service: An instance of the API service for making calls to the conversational AI model.
31
- toolmanager (ToolManager): An instance of the ToolManager class for managing external tools.
26
+ conversation (Conversation):
27
+ An instance of the Conversation class to manage messages.
28
+ system (str):
29
+ The current system setting for the conversation.
30
+ llmconfig (dict):
31
+ Configuration settings for the language model.
32
+ _logger (DataLogger):
33
+ An instance of the DataLogger class for logging conversation details.
34
+ api_service:
35
+ An instance of the API service for making calls to the conversational AI model.
36
+ _toolmanager (ToolManager):
37
+ An instance of the ToolManager class for managing external tools.
32
38
 
33
39
  Methods:
34
40
  set_dir(dir):
@@ -55,6 +61,9 @@ class Session():
55
61
  followup(instruction, system=None, context=None, out=True, name=None, invoke=True, **kwargs) -> Any:
56
62
  Continue the conversation with the provided instruction.
57
63
 
64
+ auto_followup(self, instruct, num=3, tool_parser=None, **kwags):
65
+ Automates the follow-up process for a specified number of times or until the session concludes.
66
+
58
67
  create_payload_chatcompletion(**kwargs) -> dict:
59
68
  Create a payload for chat completion based on the conversation state and configuration.
60
69
 
@@ -74,8 +83,11 @@ class Session():
74
83
 
75
84
  Parameters:
76
85
  system (str): The initial system setting for the conversation.
86
+
77
87
  dir (Optional[str]): The directory for logging. Default is None.
88
+
78
89
  llmconfig (Optional[dict]): Configuration settings for the language model. Default is oai_llmconfig.
90
+
79
91
  api_service: An instance of the API service for making calls to the conversational AI model.
80
92
  """
81
93
  self.conversation = Conversation()
@@ -83,7 +95,7 @@ class Session():
83
95
  self.llmconfig = llmconfig
84
96
  self._logger = DataLogger(dir=dir)
85
97
  self.api_service = api_service
86
- self.toolmanager = ToolManager()
98
+ self._toolmanager = ToolManager()
87
99
 
88
100
  def set_dir(self, dir):
89
101
  """
@@ -126,51 +138,89 @@ class Session():
126
138
  Process the output, invoke tools if needed, and optionally return the output.
127
139
 
128
140
  Parameters:
129
- output: The output to process.
130
141
  invoke (bool): Whether to invoke tools based on the output. Default is True.
142
+
131
143
  out (bool): Whether to return the output. Default is True.
132
144
 
133
145
  Returns:
134
146
  Any: The processed output.
135
147
  """
136
148
  if invoke:
137
- try:
138
- func, args = self.toolmanager._get_function_call(self.conversation.responses[-1]['content'])
139
- outs = await self.toolmanager.ainvoke(func, args)
140
- outs = tool_parser(outs) if tool_parser else outs
141
- self.conversation.add_messages(response=outs)
149
+ try:
150
+ tool_uses = json.loads(self.conversation.responses[-1]['content'])
151
+ if 'function_list' in tool_uses.keys():
152
+ func_calls = l_call(tool_uses['function_list'], self._toolmanager._get_function_call)
153
+
154
+ else:
155
+ func_calls = l_call(tool_uses['tool_uses'], self._toolmanager._get_function_call)
156
+
157
+ outs = await al_call(func_calls, self._toolmanager.ainvoke)
158
+ if tool_parser:
159
+ outs = l_call(outs, tool_parser)
160
+ for out, f in zip(outs, func_calls):
161
+ response = {"function": f[0], "arguments": f[1], "output": out}
162
+ self.conversation.add_messages(response=response)
163
+
142
164
  except:
143
165
  pass
166
+
144
167
  if out:
145
168
  return self.conversation.responses[-1]['content']
146
-
169
+
170
+ def _is_invoked(self):
171
+ """
172
+ Checks if the current message indicates the invocation of a function call.
173
+
174
+ Returns:
175
+ bool: True if a function call is detected in the content of the last message, False otherwise.
176
+ """
177
+ msg = self.conversation.messages[-1]
178
+ try:
179
+ if json.loads(msg['content']).keys() >= {'function', 'arguments', 'output'}:
180
+ return True
181
+ except:
182
+ return False
183
+
147
184
  def register_tools(self, tools, funcs, update=False, new=False, prefix=None, postfix=None):
148
185
  """
149
186
  Register tools and their corresponding functions.
150
187
 
151
188
  Parameters:
152
189
  tools (list): The list of tool information dictionaries.
190
+
153
191
  funcs (list): The list of corresponding functions.
192
+
154
193
  update (bool): Whether to update existing functions.
194
+
155
195
  new (bool): Whether to create new registries for existing functions.
196
+
156
197
  prefix (Optional[str]): A prefix to add to the function names.
198
+
157
199
  postfix (Optional[str]): A postfix to add to the function names.
158
200
  """
159
201
  funcs = to_list(funcs)
160
- self.toolmanager.register_tools(tools, funcs, update, new, prefix, postfix)
202
+ self._toolmanager.register_tools(tools, funcs, update, new, prefix, postfix)
161
203
 
162
204
  async def initiate(self, instruction, system=None, context=None, name=None, invoke=True, out=True, tool_parser=None, **kwargs) -> Any:
163
205
  """
164
206
  Start a new conversation session with the provided instruction.
165
207
 
166
208
  Parameters:
167
- instruction (str): The instruction to initiate the conversation.
209
+ instruction (Union[str, dict]): The instruction to initiate the conversation.
210
+
168
211
  system (Optional[str]): The system setting for the conversation. Default is None.
212
+
169
213
  context (Optional[dict]): Additional context for the instruction. Default is None.
214
+
170
215
  out (bool): Whether to return the output. Default is True.
216
+
171
217
  name (Optional[str]): The name associated with the instruction. Default is None.
218
+
172
219
  invoke (bool): Whether to invoke tools based on the output. Default is True.
173
- kwargs: Additional keyword arguments for configuration.
220
+
221
+ tool_parser (Optional[callable]): A custom tool parser function. Default is None.
222
+
223
+ **kwargs: Additional keyword arguments for configuration.
174
224
 
175
225
  Returns:
176
226
  Any: The processed output.
@@ -178,7 +228,7 @@ class Session():
178
228
  config = {**self.llmconfig, **kwargs}
179
229
  system = system or self.system
180
230
  self.conversation.initiate_conversation(system=system, instruction=instruction, context=context, name=name)
181
- await self.call_chatcompletion(**config)
231
+ await self._call_chatcompletion(**config)
182
232
 
183
233
  return await self._output(invoke, out, tool_parser)
184
234
 
@@ -187,13 +237,21 @@ class Session():
187
237
  Continue the conversation with the provided instruction.
188
238
 
189
239
  Parameters:
190
- instruction (str): The instruction to continue the conversation.
240
+ instruction (Union[str, dict]): The instruction to continue the conversation.
241
+
191
242
  system (Optional[str]): The system setting for the conversation. Default is None.
243
+
192
244
  context (Optional[dict]): Additional context for the instruction. Default is None.
245
+
193
246
  out (bool): Whether to return the output. Default is True.
247
+
194
248
  name (Optional[str]): The name associated with the instruction. Default is None.
249
+
195
250
  invoke (bool): Whether to invoke tools based on the output. Default is True.
196
- kwargs: Additional keyword arguments for configuration.
251
+
252
+ tool_parser (Optional[callable]): A custom tool parser function. Default is None.
253
+
254
+ **kwargs: Additional keyword arguments for configuration.
197
255
 
198
256
  Returns:
199
257
  Any: The processed output.
@@ -202,17 +260,38 @@ class Session():
202
260
  self.conversation.change_system(system)
203
261
  self.conversation.add_messages(instruction=instruction, context=context, name=name)
204
262
  config = {**self.llmconfig, **kwargs}
205
- await self.call_chatcompletion(**config)
263
+ await self._call_chatcompletion(**config)
206
264
 
207
-
208
265
  return await self._output(invoke, out, tool_parser)
209
-
210
- def create_payload_chatcompletion(self, **kwargs):
266
+
267
+ async def auto_followup(self, instruct, num=3, tool_parser=None, **kwargs):
268
+ """
269
+ Automates the follow-up process for a specified number of times or until the session concludes.
270
+
271
+ Parameters:
272
+ instruct (Union[str, dict]): The instruction for the follow-up.
273
+
274
+ num (int, optional): The number of times to automatically follow up. Defaults to 3.
275
+
276
+ tool_parser (callable, optional): A custom tool parser function. Defaults to None.
277
+
278
+ **kwargs: Additional keyword arguments passed to the underlying `followup` method.
279
+
280
+ """
281
+ cont_ = True
282
+ while num > 0 and cont_ is True:
283
+ await self.followup(instruct, tool_parser=tool_parser, tool_choice="auto", **kwargs)
284
+ num -= 1
285
+ cont_ = True if self._is_invoked() else False
286
+ if num == 0:
287
+ await self.followup(instruct, **kwargs)
288
+
289
+ def _create_payload_chatcompletion(self, **kwargs):
211
290
  """
212
291
  Create a payload for chat completion based on the conversation state and configuration.
213
292
 
214
293
  Parameters:
215
- kwargs: Additional keyword arguments for configuration.
294
+ **kwargs: Additional keyword arguments for configuration.
216
295
 
217
296
  Returns:
218
297
  dict: The payload for chat completion.
@@ -236,22 +315,23 @@ class Session():
236
315
  payload.update({key: config[key]})
237
316
  return payload
238
317
 
239
- async def call_chatcompletion(self, sleep=0.1, **kwargs):
318
+ async def _call_chatcompletion(self, sleep=0.1, **kwargs):
240
319
  """
241
320
  Make a call to the chat completion API and process the response.
242
321
 
243
322
  Parameters:
244
323
  sleep (float): The sleep duration after making the API call. Default is 0.1.
245
- kwargs: Additional keyword arguments for configuration.
324
+
325
+ **kwargs: Additional keyword arguments for configuration.
246
326
  """
247
327
  endpoint = f"chat/completions"
248
328
  try:
249
329
  async with aiohttp.ClientSession() as session:
250
- payload = self.create_payload_chatcompletion(**kwargs)
330
+ payload = self._create_payload_chatcompletion(**kwargs)
251
331
  completion = await self.api_service.call_api(
252
332
  session, endpoint, payload)
253
333
  if "choices" in completion:
254
- self._logger({"input":payload, "output": completion})
334
+ self._logger({"input": payload, "output": completion})
255
335
  self.conversation.add_messages(response=completion['choices'][0])
256
336
  self.conversation.responses.append(self.conversation.messages[-1])
257
337
  self.conversation.response_counts += 1
@@ -263,47 +343,34 @@ class Session():
263
343
  status_tracker.num_tasks_failed += 1
264
344
  raise e
265
345
 
266
- def messages_to_csv(self, dir=None, filename="_messages.csv", **kwags):
346
+ def messages_to_csv(self, dir=None, filename="_messages.csv", **kwargs):
267
347
  """
268
348
  Save conversation messages to a CSV file.
269
349
 
270
350
  Parameters:
271
351
  dir (Optional[str]): The directory path for saving the CSV file. Default is None.
352
+
272
353
  filename (Optional[str]): The filename for the CSV file. Default is "_messages.csv".
273
- kwargs: Additional keyword arguments for CSV file settings.
354
+
355
+ **kwargs: Additional keyword arguments for CSV file settings.
274
356
  """
275
357
  dir = dir or self._logger.dir
276
358
  if dir is None:
277
359
  raise ValueError("No directory specified.")
278
- self.conversation.msg.to_csv(dir=dir, filename=filename, **kwags)
360
+ self.conversation.msg.to_csv(dir=dir, filename=filename, **kwargs)
279
361
 
280
- def log_to_csv(self, dir=None, filename="_llmlog.csv", **kwags):
362
+ def log_to_csv(self, dir=None, filename="_llmlog.csv", **kwargs):
281
363
  """
282
364
  Save conversation logs to a CSV file.
283
365
 
284
366
  Parameters:
285
367
  dir (Optional[str]): The directory path for saving the CSV file. Default is None.
368
+
286
369
  filename (Optional[str]): The filename for the CSV file. Default is "_llmlog.csv".
287
- kwargs: Additional keyword arguments for CSV file settings.
370
+
371
+ **kwargs: Additional keyword arguments for CSV file settings.
288
372
  """
289
373
  dir = dir or self._logger.dir
290
374
  if dir is None:
291
375
  raise ValueError("No directory specified.")
292
- self._logger.to_csv(dir=dir, filename=filename, **kwags)
293
-
294
- def is_invoked(self):
295
- msg = self.conversation.messages[-1]
296
- try:
297
- if "function call result" in json.loads(msg['content']).keys():
298
- return True
299
- except:
300
- return False
301
-
302
- async def auto_followup(self, instruct, num=3, tool_parser=None, **kwags):
303
- cont_ = True
304
- while num > 0 and cont_ is True:
305
- await self.followup(instruct,tool_parser=tool_parser, tool_choice="auto", **kwags)
306
- num -= 1
307
- cont_ = True if self.is_invoked() else False
308
- if num == 0:
309
- await self.followup(instruct, **kwags)
376
+ self._logger.to_csv(dir=dir, filename=filename, **kwargs)
lionagi/utils/__init__.py CHANGED
@@ -1,10 +1,7 @@
1
- from .sys_util import to_flat_dict, append_to_jsonl, to_list, str_to_num, make_copy, to_temp, to_csv, hold_call, ahold_call, l_call, al_call, m_call, am_call, e_call, ae_call, get_timestamp, create_path
2
- from .doc_util import dir_to_path, read_text, dir_to_files, chunk_text, file_to_chunks, file_to_chunks, get_bins
3
- from .log_util import DataLogger
4
- from .tool_util import ToolManager
1
+ from .sys_util import to_flat_dict, to_list, str_to_num, make_copy, to_temp, to_csv, hold_call, ahold_call, l_call, al_call, m_call, am_call, e_call, ae_call, get_timestamp, create_path
2
+ from .doc_util import dir_to_path, read_text, dir_to_files, file_to_chunks, get_bins
5
3
 
6
4
  __all__ = [
7
- "to_list", "str_to_num", "make_copy", "to_temp", "to_csv", "hold_call", "ahold_call", "l_call", "al_call", "m_call", "am_call", "e_call", "ae_call", "get_timestamp", "create_path", "to_flat_dict", "append_to_jsonl",
8
- "dir_to_path", "read_text", "dir_to_files", "chunk_text", "file_to_chunks", "file_to_chunks", "get_bins",
9
- "DataLogger", "ToolManager"
5
+ "to_list", "str_to_num", "make_copy", "to_temp", "to_csv", "hold_call", "ahold_call", "l_call", "al_call", "m_call", "am_call", "e_call", "ae_call", "get_timestamp", "create_path", "to_flat_dict",
6
+ "dir_to_path", "read_text", "dir_to_files", "file_to_chunks", "get_bins"
10
7
  ]