praisonaiagents 0.0.40__tar.gz → 0.0.42__tar.gz

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.
Files changed (43) hide show
  1. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/PKG-INFO +1 -1
  2. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/agent/agent.py +16 -12
  3. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/agents/agents.py +66 -19
  4. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/task/task.py +31 -2
  5. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents.egg-info/PKG-INFO +1 -1
  6. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/pyproject.toml +1 -1
  7. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/__init__.py +0 -0
  8. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/agent/__init__.py +0 -0
  9. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/agents/__init__.py +0 -0
  10. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/agents/autoagents.py +0 -0
  11. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/knowledge/__init__.py +0 -0
  12. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/knowledge/chunking.py +0 -0
  13. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/knowledge/knowledge.py +0 -0
  14. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/main.py +0 -0
  15. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/memory/memory.py +0 -0
  16. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/process/__init__.py +0 -0
  17. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/process/process.py +0 -0
  18. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/task/__init__.py +0 -0
  19. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/__init__.py +0 -0
  20. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/arxiv_tools.py +0 -0
  21. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/calculator_tools.py +0 -0
  22. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/csv_tools.py +0 -0
  23. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/duckdb_tools.py +0 -0
  24. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
  25. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/excel_tools.py +0 -0
  26. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/file_tools.py +0 -0
  27. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/json_tools.py +0 -0
  28. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/newspaper_tools.py +0 -0
  29. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/pandas_tools.py +0 -0
  30. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/python_tools.py +0 -0
  31. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/shell_tools.py +0 -0
  32. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/spider_tools.py +0 -0
  33. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/test.py +0 -0
  34. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/tools.py +0 -0
  35. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/wikipedia_tools.py +0 -0
  36. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/xml_tools.py +0 -0
  37. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/yaml_tools.py +0 -0
  38. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents/tools/yfinance_tools.py +0 -0
  39. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents.egg-info/SOURCES.txt +0 -0
  40. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents.egg-info/dependency_links.txt +0 -0
  41. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents.egg-info/requires.txt +0 -0
  42. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/praisonaiagents.egg-info/top_level.txt +0 -0
  43. {praisonaiagents-0.0.40 → praisonaiagents-0.0.42}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: praisonaiagents
3
- Version: 0.0.40
3
+ Version: 0.0.42
4
4
  Summary: Praison AI agents for completing complex tasks with Self Reflection Agents
5
5
  Author: Mervin Praison
6
6
  Requires-Dist: pydantic
@@ -256,14 +256,18 @@ Your Goal: {self.goal}
256
256
  # Store user_id
257
257
  self.user_id = user_id
258
258
 
259
- # Initialize Knowledge with provided or default config
260
- from praisonaiagents.knowledge import Knowledge
261
- self.knowledge = Knowledge(knowledge_config or None)
262
-
263
- # Handle knowledge
264
- if knowledge:
265
- for source in knowledge:
266
- self._process_knowledge(source)
259
+ # Check if knowledge parameter has any values
260
+ if not knowledge:
261
+ self.knowledge = None
262
+ else:
263
+ # Initialize Knowledge with provided or default config
264
+ from praisonaiagents.knowledge import Knowledge
265
+ self.knowledge = Knowledge(knowledge_config or None)
266
+
267
+ # Handle knowledge
268
+ if knowledge:
269
+ for source in knowledge:
270
+ self._process_knowledge(source)
267
271
 
268
272
  def _process_knowledge(self, knowledge_item):
269
273
  """Process and store knowledge from a file path, URL, or string."""
@@ -485,9 +489,9 @@ Your Role: {self.role}\n
485
489
  Your Goal: {self.goal}
486
490
  """
487
491
  if output_json:
488
- system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {output_json.schema_json()}"
492
+ system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {json.dumps(output_json.model_json_schema())}"
489
493
  elif output_pydantic:
490
- system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {output_pydantic.schema_json()}"
494
+ system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {json.dumps(output_pydantic.model_json_schema())}"
491
495
  else:
492
496
  system_prompt = None
493
497
 
@@ -677,9 +681,9 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
677
681
  # Build system prompt
678
682
  system_prompt = self.system_prompt
679
683
  if output_json:
680
- system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {output_json.schema_json()}"
684
+ system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {json.dumps(output_json.model_json_schema())}"
681
685
  elif output_pydantic:
682
- system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {output_pydantic.schema_json()}"
686
+ system_prompt += f"\nReturn ONLY a JSON object that matches this Pydantic model: {json.dumps(output_pydantic.model_json_schema())}"
683
687
 
684
688
  # Build messages
685
689
  if isinstance(prompt, str):
@@ -229,15 +229,28 @@ You need to do the following task: {task.description}.
229
229
  Expected Output: {task.expected_output}.
230
230
  """
231
231
  if task.context:
232
- context_results = ""
233
- for context_task in task.context:
234
- if context_task.result:
235
- context_results += f"Result of previous task {context_task.name if context_task.name else context_task.description}: {context_task.result.raw}\n"
236
- else:
237
- context_results += f"Previous task {context_task.name if context_task.name else context_task.description} had no result.\n"
232
+ context_results = [] # Use list to avoid duplicates
233
+ for context_item in task.context:
234
+ if isinstance(context_item, str):
235
+ context_results.append(f"Input Content:\n{context_item}")
236
+ elif isinstance(context_item, list):
237
+ context_results.append(f"Input Content: {' '.join(str(x) for x in context_item)}")
238
+ elif hasattr(context_item, 'result'): # Task object
239
+ if context_item.result:
240
+ context_results.append(
241
+ f"Result of previous task {context_item.name if context_item.name else context_item.description}:\n{context_item.result.raw}"
242
+ )
243
+ else:
244
+ context_results.append(
245
+ f"Previous task {context_item.name if context_item.name else context_item.description} has no result yet."
246
+ )
247
+
248
+ # Join unique context results
249
+ unique_contexts = list(dict.fromkeys(context_results)) # Remove duplicates
238
250
  task_prompt += f"""
239
- Here are the results of previous tasks that might be useful:\n
240
- {context_results}
251
+ Context:
252
+
253
+ {' '.join(unique_contexts)}
241
254
  """
242
255
  task_prompt += "Please provide only the final result of your work. Do not add any conversation or extra explanation."
243
256
 
@@ -427,8 +440,16 @@ Here are the results of previous tasks that might be useful:\n
427
440
  else:
428
441
  self.run_task(task_id)
429
442
 
430
- async def astart(self):
443
+ async def astart(self, content=None, **kwargs):
431
444
  """Async version of start method"""
445
+ if content:
446
+ # Add content to context of all tasks
447
+ for task in self.tasks.values():
448
+ if isinstance(content, (str, list)):
449
+ if not task.context:
450
+ task.context = []
451
+ task.context.append(content)
452
+
432
453
  await self.arun_all_tasks()
433
454
  return {
434
455
  "task_status": self.get_all_tasks_status(),
@@ -485,16 +506,30 @@ You need to do the following task: {task.description}.
485
506
  Expected Output: {task.expected_output}.
486
507
  """
487
508
  if task.context:
488
- context_results = ""
489
- for context_task in task.context:
490
- if context_task.result:
491
- context_results += f"Result of previous task {context_task.name if context_task.name else context_task.description}: {context_task.result.raw}\n"
492
- else:
493
- context_results += f"Previous task {context_task.name if context_task.name else context_task.description} had no result.\n"
509
+ context_results = [] # Use list to avoid duplicates
510
+ for context_item in task.context:
511
+ if isinstance(context_item, str):
512
+ context_results.append(f"Input Content:\n{context_item}")
513
+ elif isinstance(context_item, list):
514
+ context_results.append(f"Input Content: {' '.join(str(x) for x in context_item)}")
515
+ elif hasattr(context_item, 'result'): # Task object
516
+ if context_item.result:
517
+ context_results.append(
518
+ f"Result of previous task {context_item.name if context_item.name else context_item.description}:\n{context_item.result.raw}"
519
+ )
520
+ else:
521
+ context_results.append(
522
+ f"Previous task {context_item.name if context_item.name else context_item.description} has no result yet."
523
+ )
524
+
525
+ # Join unique context results
526
+ unique_contexts = list(dict.fromkeys(context_results)) # Remove duplicates
494
527
  task_prompt += f"""
495
- Here are the results of previous tasks that might be useful:\n
496
- {context_results}
528
+ Context:
529
+
530
+ {' '.join(unique_contexts)}
497
531
  """
532
+
498
533
  # Add memory context if available
499
534
  if task.memory:
500
535
  try:
@@ -714,12 +749,24 @@ Here are the results of previous tasks that might be useful:\n
714
749
  return str(agent[0])
715
750
  return None
716
751
 
717
- def start(self):
752
+ def start(self, content=None, **kwargs):
753
+ """Start agent execution with optional content and config"""
754
+ if content:
755
+ # Add content to context of all tasks
756
+ for task in self.tasks.values():
757
+ if isinstance(content, (str, list)):
758
+ # If context is empty, initialize it
759
+ if not task.context:
760
+ task.context = []
761
+ # Add content to context
762
+ task.context.append(content)
763
+
764
+ # Run tasks as before
718
765
  self.run_all_tasks()
719
766
  return {
720
767
  "task_status": self.get_all_tasks_status(),
721
768
  "task_results": {task_id: self.get_task_result(task_id) for task_id in self.tasks}
722
- }
769
+ }
723
770
 
724
771
  def set_state(self, key: str, value: Any) -> None:
725
772
  """Set a state value"""
@@ -19,7 +19,7 @@ class Task:
19
19
  agent: Optional[Agent] = None,
20
20
  name: Optional[str] = None,
21
21
  tools: Optional[List[Any]] = None,
22
- context: Optional[List["Task"]] = None,
22
+ context: Optional[List[Union[str, List, 'Task']]] = None,
23
23
  async_execution: Optional[bool] = False,
24
24
  config: Optional[Dict[str, Any]] = None,
25
25
  output_file: Optional[str] = None,
@@ -219,4 +219,33 @@ class Task:
219
219
  self.callback(task_output)
220
220
  except Exception as e:
221
221
  logger.error(f"Task {self.id}: Failed to execute callback: {e}")
222
- logger.exception(e)
222
+ logger.exception(e)
223
+
224
+ task_prompt = f"""
225
+ You need to do the following task: {self.description}.
226
+ Expected Output: {self.expected_output}.
227
+ """
228
+ if self.context:
229
+ context_results = [] # Use list to avoid duplicates
230
+ for context_item in self.context:
231
+ if isinstance(context_item, str):
232
+ context_results.append(f"Input Content:\n{context_item}")
233
+ elif isinstance(context_item, list):
234
+ context_results.append(f"Input Content: {' '.join(str(x) for x in context_item)}")
235
+ elif hasattr(context_item, 'result'): # Task object
236
+ if context_item.result:
237
+ context_results.append(
238
+ f"Result of previous task {context_item.name if context_item.name else context_item.description}:\n{context_item.result.raw}"
239
+ )
240
+ else:
241
+ context_results.append(
242
+ f"Previous task {context_item.name if context_item.name else context_item.description} has no result yet."
243
+ )
244
+
245
+ # Join unique context results
246
+ unique_contexts = list(dict.fromkeys(context_results)) # Remove duplicates
247
+ task_prompt += f"""
248
+ Context:
249
+
250
+ {' '.join(unique_contexts)}
251
+ """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: praisonaiagents
3
- Version: 0.0.40
3
+ Version: 0.0.42
4
4
  Summary: Praison AI agents for completing complex tasks with Self Reflection Agents
5
5
  Author: Mervin Praison
6
6
  Requires-Dist: pydantic
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "praisonaiagents"
7
- version = "0.0.40"
7
+ version = "0.0.42"
8
8
  description = "Praison AI agents for completing complex tasks with Self Reflection Agents"
9
9
  authors = [
10
10
  { name="Mervin Praison" }