praisonaiagents 0.0.34__tar.gz → 0.0.36__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/PKG-INFO +1 -1
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/agent/agent.py +5 -1
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/process/process.py +26 -3
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/pandas_tools.py +3 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/yfinance_tools.py +9 -1
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents.egg-info/PKG-INFO +1 -1
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/pyproject.toml +1 -1
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/__init__.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/agent/__init__.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/agents/__init__.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/agents/agents.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/agents/autoagents.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/main.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/memory/memory.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/process/__init__.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/task/__init__.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/task/task.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/__init__.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/arxiv_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/calculator_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/csv_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/duckdb_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/excel_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/file_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/json_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/newspaper_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/python_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/shell_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/spider_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/test.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/wikipedia_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/xml_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents/tools/yaml_tools.py +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents.egg-info/SOURCES.txt +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents.egg-info/dependency_links.txt +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents.egg-info/requires.txt +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents.egg-info/top_level.txt +0 -0
- {praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/setup.cfg +0 -0
@@ -762,4 +762,8 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
|
|
762
762
|
|
763
763
|
def run(self):
|
764
764
|
"""Alias for start() method"""
|
765
|
-
return self.start()
|
765
|
+
return self.start()
|
766
|
+
|
767
|
+
def start(self, prompt: str, **kwargs):
|
768
|
+
"""Start the agent with a prompt. This is a convenience method that wraps chat()."""
|
769
|
+
return self.chat(prompt, **kwargs)
|
@@ -10,14 +10,16 @@ class LoopItems(BaseModel):
|
|
10
10
|
items: List[Any]
|
11
11
|
|
12
12
|
class Process:
|
13
|
-
def __init__(self, tasks: Dict[str, Task], agents: List[Agent], manager_llm: Optional[str] = None, verbose: bool = False):
|
13
|
+
def __init__(self, tasks: Dict[str, Task], agents: List[Agent], manager_llm: Optional[str] = None, verbose: bool = False, max_iter: int = 10):
|
14
14
|
self.tasks = tasks
|
15
15
|
self.agents = agents
|
16
16
|
self.manager_llm = manager_llm
|
17
17
|
self.verbose = verbose
|
18
|
+
self.max_iter = max_iter
|
18
19
|
|
19
20
|
async def aworkflow(self) -> AsyncGenerator[str, None]:
|
20
21
|
"""Async version of workflow method"""
|
22
|
+
current_iter = 0 # Track how many times we've looped
|
21
23
|
# Build workflow relationships first
|
22
24
|
for task in self.tasks.values():
|
23
25
|
if task.next_tasks:
|
@@ -41,7 +43,12 @@ class Process:
|
|
41
43
|
visited_tasks = set()
|
42
44
|
loop_data = {} # Store loop-specific data
|
43
45
|
|
44
|
-
while current_task
|
46
|
+
while current_task:
|
47
|
+
current_iter += 1
|
48
|
+
if current_iter > self.max_iter:
|
49
|
+
logging.info(f"Max iteration limit {self.max_iter} reached, ending workflow.")
|
50
|
+
break
|
51
|
+
|
45
52
|
task_id = current_task.id
|
46
53
|
logging.info(f"Executing workflow task: {current_task.name if current_task.name else task_id}")
|
47
54
|
|
@@ -111,6 +118,11 @@ Return a JSON object with an 'items' array containing the items to process.
|
|
111
118
|
yield task_id
|
112
119
|
visited_tasks.add(task_id)
|
113
120
|
|
121
|
+
# Reset completed task to "not started" so it can run again
|
122
|
+
if self.tasks[task_id].status == "completed":
|
123
|
+
logging.debug(f"Task {task_id} was completed, resetting to 'not started' for next iteration.")
|
124
|
+
self.tasks[task_id].status = "not started"
|
125
|
+
|
114
126
|
# Handle loop progression
|
115
127
|
if current_task.task_type == "loop":
|
116
128
|
loop_key = f"loop_{current_task.name}"
|
@@ -291,6 +303,7 @@ Provide a JSON with the structure:
|
|
291
303
|
|
292
304
|
def workflow(self):
|
293
305
|
"""Synchronous version of workflow method"""
|
306
|
+
current_iter = 0 # Track how many times we've looped
|
294
307
|
# Build workflow relationships first
|
295
308
|
for task in self.tasks.values():
|
296
309
|
if task.next_tasks:
|
@@ -314,7 +327,12 @@ Provide a JSON with the structure:
|
|
314
327
|
visited_tasks = set()
|
315
328
|
loop_data = {} # Store loop-specific data
|
316
329
|
|
317
|
-
while current_task
|
330
|
+
while current_task:
|
331
|
+
current_iter += 1
|
332
|
+
if current_iter > self.max_iter:
|
333
|
+
logging.info(f"Max iteration limit {self.max_iter} reached, ending workflow.")
|
334
|
+
break
|
335
|
+
|
318
336
|
task_id = current_task.id
|
319
337
|
logging.info(f"Executing workflow task: {current_task.name if current_task.name else task_id}")
|
320
338
|
|
@@ -378,6 +396,11 @@ Return a JSON object with an 'items' array containing the items to process.
|
|
378
396
|
yield task_id
|
379
397
|
visited_tasks.add(task_id)
|
380
398
|
|
399
|
+
# Reset completed task to "not started" so it can run again
|
400
|
+
if self.tasks[task_id].status == "completed":
|
401
|
+
logging.debug(f"Task {task_id} was completed, resetting to 'not started' for next iteration.")
|
402
|
+
self.tasks[task_id].status = "not started"
|
403
|
+
|
381
404
|
# Handle loop progression
|
382
405
|
if current_task.task_type == "loop":
|
383
406
|
loop_key = f"loop_{current_task.name}"
|
@@ -160,6 +160,9 @@ class PandasTools:
|
|
160
160
|
Dict: Summary statistics and information
|
161
161
|
"""
|
162
162
|
try:
|
163
|
+
if not isinstance(df, pd.DataFrame):
|
164
|
+
raise TypeError(f"Expected pandas DataFrame, got {type(df).__name__}")
|
165
|
+
|
163
166
|
numeric_summary = df.describe().to_dict()
|
164
167
|
# Convert numpy types to native Python types
|
165
168
|
for col in numeric_summary:
|
@@ -145,7 +145,15 @@ class YFinanceTools:
|
|
145
145
|
return [{"error": "yfinance package not available"}]
|
146
146
|
|
147
147
|
hist = ticker.history(period=period, interval=interval, start=start, end=end)
|
148
|
-
|
148
|
+
data = hist.reset_index().to_dict('records')
|
149
|
+
|
150
|
+
# Convert timestamps to ISO format strings
|
151
|
+
for record in data:
|
152
|
+
if 'Date' in record and hasattr(record['Date'], 'isoformat'):
|
153
|
+
record['Date'] = record['Date'].isoformat()
|
154
|
+
if 'Datetime' in record and hasattr(record['Datetime'], 'isoformat'):
|
155
|
+
record['Datetime'] = record['Datetime'].isoformat()
|
156
|
+
return data
|
149
157
|
except Exception as e:
|
150
158
|
error_msg = f"Error fetching historical data: {str(e)}"
|
151
159
|
logging.error(error_msg)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.34 → praisonaiagents-0.0.36}/praisonaiagents.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|