PraisonAI 2.2.89__tar.gz → 2.2.91__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 (79) hide show
  1. {praisonai-2.2.89 → praisonai-2.2.91}/PKG-INFO +2 -2
  2. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/cli.py +96 -8
  3. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/deploy.py +1 -1
  4. {praisonai-2.2.89 → praisonai-2.2.91}/pyproject.toml +4 -4
  5. {praisonai-2.2.89 → praisonai-2.2.91}/README.md +0 -0
  6. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/README.md +0 -0
  7. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/__init__.py +0 -0
  8. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/__main__.py +0 -0
  9. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/agents_generator.py +0 -0
  10. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/api/call.py +0 -0
  11. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/auto.py +0 -0
  12. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/chainlit_ui.py +0 -0
  13. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/inbuilt_tools/__init__.py +0 -0
  14. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  15. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/inc/__init__.py +0 -0
  16. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/inc/config.py +0 -0
  17. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/inc/models.py +0 -0
  18. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/android-chrome-192x192.png +0 -0
  19. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/android-chrome-512x512.png +0 -0
  20. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/apple-touch-icon.png +0 -0
  21. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/fantasy.svg +0 -0
  22. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/favicon-16x16.png +0 -0
  23. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/favicon-32x32.png +0 -0
  24. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/favicon.ico +0 -0
  25. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/game.svg +0 -0
  26. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/logo_dark.png +0 -0
  27. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/logo_light.png +0 -0
  28. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/movie.svg +0 -0
  29. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/praison-ai-agents-architecture-dark.png +0 -0
  30. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/praison-ai-agents-architecture.png +0 -0
  31. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/public/thriller.svg +0 -0
  32. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/scheduler.py +0 -0
  33. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup/__init__.py +0 -0
  34. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup/build.py +0 -0
  35. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup/config.yaml +0 -0
  36. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup/post_install.py +0 -0
  37. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup/setup_conda_env.py +0 -0
  38. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup/setup_conda_env.sh +0 -0
  39. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/setup.py +0 -0
  40. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/test.py +0 -0
  41. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/train.py +0 -0
  42. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/train_vision.py +0 -0
  43. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/README.md +0 -0
  44. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/agents.py +0 -0
  45. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/callbacks.py +0 -0
  46. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/chat.py +0 -0
  47. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/code.py +0 -0
  48. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/colab.py +0 -0
  49. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/colab_chainlit.py +0 -0
  50. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/components/aicoder.py +0 -0
  51. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/chainlit.md +0 -0
  52. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/bn.json +0 -0
  53. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/en-US.json +0 -0
  54. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/gu.json +0 -0
  55. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/he-IL.json +0 -0
  56. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/hi.json +0 -0
  57. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/kn.json +0 -0
  58. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/ml.json +0 -0
  59. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/mr.json +0 -0
  60. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/ta.json +0 -0
  61. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/te.json +0 -0
  62. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/config/translations/zh-CN.json +0 -0
  63. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/context.py +0 -0
  64. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/database_config.py +0 -0
  65. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/db.py +0 -0
  66. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/fantasy.svg +0 -0
  67. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/game.svg +0 -0
  68. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/logo_dark.png +0 -0
  69. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/logo_light.png +0 -0
  70. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/movie.svg +0 -0
  71. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/praison.css +0 -0
  72. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/public/thriller.svg +0 -0
  73. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/realtime.py +0 -0
  74. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/realtimeclient/__init__.py +0 -0
  75. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/realtimeclient/tools.py +0 -0
  76. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/sql_alchemy.py +0 -0
  77. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/ui/tools.md +0 -0
  78. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/upload_vision.py +0 -0
  79. {praisonai-2.2.89 → praisonai-2.2.91}/praisonai/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 2.2.89
3
+ Version: 2.2.91
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  Requires-Python: >=3.10
@@ -70,7 +70,7 @@ Requires-Dist: plotly (>=5.24.0) ; extra == "realtime"
70
70
  Requires-Dist: praisonai-tools (>=0.0.22) ; extra == "autogen"
71
71
  Requires-Dist: praisonai-tools (>=0.0.22) ; extra == "autogen-v4"
72
72
  Requires-Dist: praisonai-tools (>=0.0.22) ; extra == "crewai"
73
- Requires-Dist: praisonaiagents (>=0.0.163)
73
+ Requires-Dist: praisonaiagents (>=0.0.164)
74
74
  Requires-Dist: pyautogen (==0.2.29) ; extra == "autogen"
75
75
  Requires-Dist: pydantic (<=2.10.1) ; extra == "chat"
76
76
  Requires-Dist: pydantic (<=2.10.1) ; extra == "code"
@@ -28,6 +28,13 @@ AUTOGEN_AVAILABLE = False
28
28
  PRAISONAI_AVAILABLE = False
29
29
  TRAIN_AVAILABLE = False
30
30
  try:
31
+ import importlib.util
32
+ CHAINLIT_AVAILABLE = importlib.util.find_spec("chainlit") is not None
33
+ except ImportError:
34
+ pass
35
+
36
+ def _get_chainlit_run():
37
+ """Lazy import chainlit to avoid loading .env at startup"""
31
38
  # Create necessary directories and set CHAINLIT_APP_ROOT
32
39
  if "CHAINLIT_APP_ROOT" not in os.environ:
33
40
  chainlit_root = os.path.join(os.path.expanduser("~"), ".praison")
@@ -39,9 +46,7 @@ try:
39
46
  os.makedirs(os.path.join(chainlit_root, ".files"), exist_ok=True)
40
47
 
41
48
  from chainlit.cli import chainlit_run
42
- CHAINLIT_AVAILABLE = True
43
- except ImportError:
44
- pass
49
+ return chainlit_run
45
50
 
46
51
  try:
47
52
  import gradio as gr
@@ -545,7 +550,7 @@ class PraisonAI:
545
550
  return default_args
546
551
 
547
552
  # Define special commands
548
- special_commands = ['chat', 'code', 'call', 'realtime', 'train', 'ui', 'context']
553
+ special_commands = ['chat', 'code', 'call', 'realtime', 'train', 'ui', 'context', 'research']
549
554
 
550
555
  parser = argparse.ArgumentParser(prog="praisonai", description="praisonAI command-line interface")
551
556
  parser.add_argument("--framework", choices=["crewai", "autogen", "praisonai"], help="Specify the framework")
@@ -572,6 +577,8 @@ class PraisonAI:
572
577
  parser.add_argument("--url", type=str, help="Repository URL for context analysis")
573
578
  parser.add_argument("--goal", type=str, help="Goal for context engineering")
574
579
  parser.add_argument("--auto-analyze", action="store_true", help="Enable automatic analysis in context engineering")
580
+ parser.add_argument("--research", action="store_true", help="Run deep research on a topic")
581
+ parser.add_argument("--verbose", "-v", action="store_true", help="Enable verbose output for research")
575
582
 
576
583
  # If we're in a test environment, parse with empty args to avoid pytest interference
577
584
  if in_test_env:
@@ -696,6 +703,25 @@ class PraisonAI:
696
703
  self.handle_context_command(args.url, args.goal, getattr(args, 'auto_analyze', False))
697
704
  sys.exit(0)
698
705
 
706
+ elif args.command == 'research':
707
+ if not PRAISONAI_AVAILABLE:
708
+ print("[red]ERROR: PraisonAI Agents is not installed. Install with:[/red]")
709
+ print("\npip install praisonaiagents\n")
710
+ sys.exit(1)
711
+
712
+ # Get the research query from remaining args
713
+ research_query = ' '.join(unknown_args) if unknown_args else None
714
+ if not research_query:
715
+ print("[red]ERROR: Research query is required[/red]")
716
+ print("Usage: praisonai research \"Your research query\"")
717
+ print(" praisonai research --model deep-research-pro \"Your query\"")
718
+ sys.exit(1)
719
+
720
+ research_model = getattr(args, 'model', None)
721
+ verbose = getattr(args, 'verbose', False)
722
+ self.handle_research_command(research_query, research_model, verbose)
723
+ sys.exit(0)
724
+
699
725
  # Only check framework availability for agent-related operations
700
726
  if not args.command and (args.init or args.auto or args.framework):
701
727
  if not CREWAI_AVAILABLE and not AUTOGEN_AVAILABLE and not PRAISONAI_AVAILABLE:
@@ -791,7 +817,7 @@ class PraisonAI:
791
817
  if "CHAINLIT_APP_ROOT" not in os.environ:
792
818
  os.environ["CHAINLIT_APP_ROOT"] = root_path
793
819
  chat_ui_path = os.path.join(os.path.dirname(praisonai.__file__), 'ui', 'chat.py')
794
- chainlit_run([chat_ui_path])
820
+ _get_chainlit_run()([chat_ui_path])
795
821
  else:
796
822
  print("ERROR: Chat UI is not installed. Please install it with 'pip install \"praisonai[chat]\"' to use the chat UI.")
797
823
 
@@ -815,7 +841,7 @@ class PraisonAI:
815
841
  else:
816
842
  logging.info("Public folder already exists.")
817
843
  code_ui_path = os.path.join(os.path.dirname(praisonai.__file__), 'ui', 'code.py')
818
- chainlit_run([code_ui_path])
844
+ _get_chainlit_run()([code_ui_path])
819
845
  else:
820
846
  print("ERROR: Code UI is not installed. Please install it with 'pip install \"praisonai[code]\"' to use the code UI.")
821
847
 
@@ -861,7 +887,7 @@ class PraisonAI:
861
887
  else:
862
888
  logging.info("Public folder already exists.")
863
889
  chainlit_ui_path = os.path.join(os.path.dirname(praisonai.__file__), 'ui', 'agents.py')
864
- chainlit_run([chainlit_ui_path])
890
+ _get_chainlit_run()([chainlit_ui_path])
865
891
  else:
866
892
  print("ERROR: Chainlit is not installed. Please install it with 'pip install \"praisonai[ui]\"' to use the UI.")
867
893
 
@@ -885,7 +911,7 @@ class PraisonAI:
885
911
  else:
886
912
  logging.info("Public folder already exists.")
887
913
  realtime_ui_path = os.path.join(os.path.dirname(praisonai.__file__), 'ui', 'realtime.py')
888
- chainlit_run([realtime_ui_path])
914
+ _get_chainlit_run()([realtime_ui_path])
889
915
  else:
890
916
  print("ERROR: Realtime UI is not installed. Please install it with 'pip install \"praisonai[realtime]\"' to use the realtime UI.")
891
917
 
@@ -933,6 +959,68 @@ class PraisonAI:
933
959
  print(f"[red]ERROR: Context engineering failed: {e}[/red]")
934
960
  sys.exit(1)
935
961
 
962
+ def handle_research_command(self, query: str, model: str = None, verbose: bool = False) -> str:
963
+ """
964
+ Handle the research command by creating a DeepResearchAgent and running it.
965
+
966
+ Args:
967
+ query: Research query/topic
968
+ model: Model for deep research (optional, defaults to o4-mini-deep-research)
969
+ verbose: Enable verbose output (default: False)
970
+
971
+ Returns:
972
+ str: Research report
973
+ """
974
+ try:
975
+ from praisonaiagents import DeepResearchAgent
976
+
977
+ # Suppress logging unless verbose
978
+ if not verbose:
979
+ logging.getLogger('google').setLevel(logging.WARNING)
980
+ logging.getLogger('google.genai').setLevel(logging.WARNING)
981
+ logging.getLogger('httpx').setLevel(logging.WARNING)
982
+ logging.getLogger('httpcore').setLevel(logging.WARNING)
983
+
984
+ print("[bold green]Starting Deep Research...[/bold green]")
985
+ print(f"Query: {query}")
986
+
987
+ # Default model if not specified
988
+ if not model:
989
+ model = "o4-mini-deep-research"
990
+
991
+ print(f"Model: {model}")
992
+
993
+ # Create DeepResearchAgent (verbose=True is default for streaming output)
994
+ agent = DeepResearchAgent(model=model)
995
+
996
+ # Execute the research
997
+ result = agent.research(query)
998
+
999
+ print("\n[bold green]Research Complete![/bold green]")
1000
+ print("\n" + "="*60)
1001
+ print(result.report)
1002
+ print("="*60)
1003
+
1004
+ # Show citations if available
1005
+ if result.citations:
1006
+ print(f"\n[bold]Citations ({len(result.citations)}):[/bold]")
1007
+ for i, citation in enumerate(result.citations, 1):
1008
+ title = getattr(citation, 'title', 'Untitled')
1009
+ url = getattr(citation, 'url', '')
1010
+ print(f" {i}. {title}")
1011
+ if url:
1012
+ print(f" {url}")
1013
+
1014
+ return result.report
1015
+
1016
+ except ImportError as e:
1017
+ print(f"[red]ERROR: Failed to import DeepResearchAgent: {e}[/red]")
1018
+ print("Make sure praisonaiagents is installed: pip install praisonaiagents")
1019
+ sys.exit(1)
1020
+ except Exception as e:
1021
+ print(f"[red]ERROR: Research failed: {e}[/red]")
1022
+ sys.exit(1)
1023
+
936
1024
  if __name__ == "__main__":
937
1025
  praison_ai = PraisonAI()
938
1026
  praison_ai.main()
@@ -57,7 +57,7 @@ class CloudDeployer:
57
57
  file.write("FROM python:3.11-slim\n")
58
58
  file.write("WORKDIR /app\n")
59
59
  file.write("COPY . .\n")
60
- file.write("RUN pip install flask praisonai==2.2.89 gunicorn markdown\n")
60
+ file.write("RUN pip install flask praisonai==2.2.91 gunicorn markdown\n")
61
61
  file.write("EXPOSE 8080\n")
62
62
  file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
63
63
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "PraisonAI"
3
- version = "2.2.89"
3
+ version = "2.2.91"
4
4
  description = "PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration."
5
5
  readme = "README.md"
6
6
  license = ""
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "rich>=13.7",
13
13
  "markdown>=3.5",
14
14
  "pyparsing>=3.0.0",
15
- "praisonaiagents>=0.0.163",
15
+ "praisonaiagents>=0.0.164",
16
16
  "python-dotenv>=0.19.0",
17
17
  "instructor>=1.3.3",
18
18
  "PyYAML>=6.0",
@@ -102,7 +102,7 @@ autogen-v4 = [
102
102
 
103
103
  [tool.poetry]
104
104
  name = "PraisonAI"
105
- version = "2.2.89"
105
+ version = "2.2.91"
106
106
  description = "PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration."
107
107
  authors = ["Mervin Praison"]
108
108
  license = ""
@@ -120,7 +120,7 @@ python = ">=3.10,<3.13"
120
120
  rich = ">=13.7"
121
121
  markdown = ">=3.5"
122
122
  pyparsing = ">=3.0.0"
123
- praisonaiagents = ">=0.0.163"
123
+ praisonaiagents = ">=0.0.164"
124
124
  python-dotenv = ">=0.19.0"
125
125
  instructor = ">=1.3.3"
126
126
  PyYAML = ">=6.0"
File without changes
File without changes
File without changes