praisonAI 2.2.91__tar.gz → 2.2.95__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 (97) hide show
  1. praisonai-2.2.95/PKG-INFO +121 -0
  2. praisonai-2.2.95/PraisonAI.egg-info/PKG-INFO +121 -0
  3. praisonai-2.2.95/PraisonAI.egg-info/SOURCES.txt +53 -0
  4. praisonai-2.2.95/PraisonAI.egg-info/dependency_links.txt +1 -0
  5. praisonai-2.2.95/PraisonAI.egg-info/entry_points.txt +4 -0
  6. praisonai-2.2.95/PraisonAI.egg-info/requires.txt +102 -0
  7. praisonai-2.2.95/PraisonAI.egg-info/top_level.txt +1 -0
  8. praisonai-2.2.95/README.md +24 -0
  9. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/cli.py +142 -6
  10. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/deploy.py +1 -1
  11. praisonai-2.2.95/praisonai/version.py +1 -0
  12. praisonai-2.2.95/pyproject.toml +116 -0
  13. praisonai-2.2.95/setup.cfg +4 -0
  14. praisonai-2.2.95/tests/test.py +105 -0
  15. praisonai-2.2.95/tests/test_agents_playbook.py +36 -0
  16. praisonai-2.2.95/tests/test_basic.py +32 -0
  17. praisonai-2.2.95/tests/test_custom_tools_fix.py +83 -0
  18. praisonai-2.2.95/tests/test_double_api_fix.py +187 -0
  19. praisonai-2.2.95/tests/test_phase2_refactor.py +152 -0
  20. praisonai-2.2.95/tests/test_runner.py +355 -0
  21. praisonai-2.2.91/PKG-INFO +0 -110
  22. praisonai-2.2.91/README.md +0 -9
  23. praisonai-2.2.91/praisonai/README.md +0 -5
  24. praisonai-2.2.91/praisonai/public/android-chrome-192x192.png +0 -0
  25. praisonai-2.2.91/praisonai/public/android-chrome-512x512.png +0 -0
  26. praisonai-2.2.91/praisonai/public/apple-touch-icon.png +0 -0
  27. praisonai-2.2.91/praisonai/public/fantasy.svg +0 -3
  28. praisonai-2.2.91/praisonai/public/favicon-16x16.png +0 -0
  29. praisonai-2.2.91/praisonai/public/favicon-32x32.png +0 -0
  30. praisonai-2.2.91/praisonai/public/favicon.ico +0 -0
  31. praisonai-2.2.91/praisonai/public/game.svg +0 -3
  32. praisonai-2.2.91/praisonai/public/logo_dark.png +0 -0
  33. praisonai-2.2.91/praisonai/public/logo_light.png +0 -0
  34. praisonai-2.2.91/praisonai/public/movie.svg +0 -3
  35. praisonai-2.2.91/praisonai/public/praison-ai-agents-architecture-dark.png +0 -0
  36. praisonai-2.2.91/praisonai/public/praison-ai-agents-architecture.png +0 -0
  37. praisonai-2.2.91/praisonai/public/thriller.svg +0 -3
  38. praisonai-2.2.91/praisonai/setup/config.yaml +0 -60
  39. praisonai-2.2.91/praisonai/setup/setup_conda_env.sh +0 -105
  40. praisonai-2.2.91/praisonai/ui/README.md +0 -21
  41. praisonai-2.2.91/praisonai/ui/config/chainlit.md +0 -1
  42. praisonai-2.2.91/praisonai/ui/config/translations/bn.json +0 -231
  43. praisonai-2.2.91/praisonai/ui/config/translations/en-US.json +0 -229
  44. praisonai-2.2.91/praisonai/ui/config/translations/gu.json +0 -231
  45. praisonai-2.2.91/praisonai/ui/config/translations/he-IL.json +0 -231
  46. praisonai-2.2.91/praisonai/ui/config/translations/hi.json +0 -231
  47. praisonai-2.2.91/praisonai/ui/config/translations/kn.json +0 -231
  48. praisonai-2.2.91/praisonai/ui/config/translations/ml.json +0 -231
  49. praisonai-2.2.91/praisonai/ui/config/translations/mr.json +0 -231
  50. praisonai-2.2.91/praisonai/ui/config/translations/ta.json +0 -231
  51. praisonai-2.2.91/praisonai/ui/config/translations/te.json +0 -231
  52. praisonai-2.2.91/praisonai/ui/config/translations/zh-CN.json +0 -229
  53. praisonai-2.2.91/praisonai/ui/public/fantasy.svg +0 -3
  54. praisonai-2.2.91/praisonai/ui/public/game.svg +0 -3
  55. praisonai-2.2.91/praisonai/ui/public/logo_dark.png +0 -0
  56. praisonai-2.2.91/praisonai/ui/public/logo_light.png +0 -0
  57. praisonai-2.2.91/praisonai/ui/public/movie.svg +0 -3
  58. praisonai-2.2.91/praisonai/ui/public/praison.css +0 -3
  59. praisonai-2.2.91/praisonai/ui/public/thriller.svg +0 -3
  60. praisonai-2.2.91/praisonai/ui/tools.md +0 -133
  61. praisonai-2.2.91/praisonai/version.py +0 -1
  62. praisonai-2.2.91/pyproject.toml +0 -299
  63. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/__init__.py +0 -0
  64. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/__main__.py +0 -0
  65. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/agents_generator.py +0 -0
  66. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/api/call.py +0 -0
  67. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/auto.py +0 -0
  68. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/chainlit_ui.py +0 -0
  69. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inbuilt_tools/__init__.py +0 -0
  70. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  71. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inc/__init__.py +0 -0
  72. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inc/config.py +0 -0
  73. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inc/models.py +0 -0
  74. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/scheduler.py +0 -0
  75. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/__init__.py +0 -0
  76. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/build.py +0 -0
  77. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/post_install.py +0 -0
  78. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/setup_conda_env.py +0 -0
  79. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup.py +0 -0
  80. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/test.py +0 -0
  81. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/train.py +0 -0
  82. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/train_vision.py +0 -0
  83. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/agents.py +0 -0
  84. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/callbacks.py +0 -0
  85. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/chat.py +0 -0
  86. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/code.py +0 -0
  87. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/colab.py +0 -0
  88. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/colab_chainlit.py +0 -0
  89. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/components/aicoder.py +0 -0
  90. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/context.py +0 -0
  91. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/database_config.py +0 -0
  92. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/db.py +0 -0
  93. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/realtime.py +0 -0
  94. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/realtimeclient/__init__.py +0 -0
  95. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/realtimeclient/tools.py +0 -0
  96. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/sql_alchemy.py +0 -0
  97. {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/upload_vision.py +0 -0
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.4
2
+ Name: PraisonAI
3
+ Version: 2.2.95
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
+ Author: Mervin Praison
6
+ License: MIT
7
+ Project-URL: Homepage, https://docs.praison.ai
8
+ Project-URL: Repository, https://github.com/mervinpraison/PraisonAI
9
+ Requires-Python: >=3.10
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: rich>=13.7
12
+ Requires-Dist: markdown>=3.5
13
+ Requires-Dist: pyparsing>=3.0.0
14
+ Requires-Dist: praisonaiagents>=0.0.166
15
+ Requires-Dist: python-dotenv>=0.19.0
16
+ Requires-Dist: instructor>=1.3.3
17
+ Requires-Dist: PyYAML>=6.0
18
+ Requires-Dist: mcp>=1.6.0
19
+ Provides-Extra: ui
20
+ Requires-Dist: chainlit==2.5.5; extra == "ui"
21
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "ui"
22
+ Requires-Dist: aiosqlite>=0.20.0; extra == "ui"
23
+ Requires-Dist: greenlet>=3.0.3; extra == "ui"
24
+ Requires-Dist: pydantic<=2.10.1; extra == "ui"
25
+ Provides-Extra: gradio
26
+ Requires-Dist: gradio>=4.26.0; extra == "gradio"
27
+ Provides-Extra: api
28
+ Requires-Dist: flask>=3.0.0; extra == "api"
29
+ Requires-Dist: fastapi>=0.115.0; extra == "api"
30
+ Requires-Dist: uvicorn>=0.34.0; extra == "api"
31
+ Provides-Extra: agentops
32
+ Requires-Dist: agentops>=0.3.12; extra == "agentops"
33
+ Provides-Extra: google
34
+ Requires-Dist: langchain-google-genai>=2.1.0; extra == "google"
35
+ Provides-Extra: openai
36
+ Requires-Dist: langchain-openai<0.3.0,>=0.2.1; extra == "openai"
37
+ Provides-Extra: anthropic
38
+ Requires-Dist: langchain-anthropic>=0.3.0; extra == "anthropic"
39
+ Provides-Extra: cohere
40
+ Requires-Dist: langchain-cohere<0.4.0,>=0.3.0; extra == "cohere"
41
+ Provides-Extra: chat
42
+ Requires-Dist: chainlit==2.5.5; extra == "chat"
43
+ Requires-Dist: litellm>=1.72.6; extra == "chat"
44
+ Requires-Dist: aiosqlite>=0.20.0; extra == "chat"
45
+ Requires-Dist: greenlet>=3.0.3; extra == "chat"
46
+ Requires-Dist: tavily-python==0.5.0; extra == "chat"
47
+ Requires-Dist: crawl4ai>=0.7.0; extra == "chat"
48
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "chat"
49
+ Requires-Dist: playwright>=1.47.0; extra == "chat"
50
+ Requires-Dist: rich; extra == "chat"
51
+ Requires-Dist: pydantic<=2.10.1; extra == "chat"
52
+ Provides-Extra: code
53
+ Requires-Dist: chainlit==2.5.5; extra == "code"
54
+ Requires-Dist: litellm>=1.72.6; extra == "code"
55
+ Requires-Dist: aiosqlite>=0.20.0; extra == "code"
56
+ Requires-Dist: greenlet>=3.0.3; extra == "code"
57
+ Requires-Dist: tavily-python==0.5.0; extra == "code"
58
+ Requires-Dist: crawl4ai>=0.7.0; extra == "code"
59
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "code"
60
+ Requires-Dist: playwright>=1.47.0; extra == "code"
61
+ Requires-Dist: pydantic<=2.10.1; extra == "code"
62
+ Provides-Extra: realtime
63
+ Requires-Dist: chainlit==2.5.5; extra == "realtime"
64
+ Requires-Dist: litellm>=1.72.6; extra == "realtime"
65
+ Requires-Dist: aiosqlite>=0.20.0; extra == "realtime"
66
+ Requires-Dist: greenlet>=3.0.3; extra == "realtime"
67
+ Requires-Dist: tavily-python==0.5.0; extra == "realtime"
68
+ Requires-Dist: crawl4ai>=0.7.0; extra == "realtime"
69
+ Requires-Dist: websockets>=12.0; extra == "realtime"
70
+ Requires-Dist: plotly>=5.24.0; extra == "realtime"
71
+ Requires-Dist: yfinance>=0.2.44; extra == "realtime"
72
+ Requires-Dist: duckduckgo_search>=6.3.0; extra == "realtime"
73
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "realtime"
74
+ Provides-Extra: call
75
+ Requires-Dist: twilio>=7.0.0; extra == "call"
76
+ Requires-Dist: fastapi>=0.95.0; extra == "call"
77
+ Requires-Dist: uvicorn>=0.20.0; extra == "call"
78
+ Requires-Dist: websockets>=12.0; extra == "call"
79
+ Requires-Dist: flaml[automl]>=2.3.1; extra == "call"
80
+ Requires-Dist: pyngrok>=1.4.0; extra == "call"
81
+ Requires-Dist: rich; extra == "call"
82
+ Requires-Dist: openai>=1.54.0; extra == "call"
83
+ Provides-Extra: train
84
+ Provides-Extra: crewai
85
+ Requires-Dist: crewai>=0.157.0; extra == "crewai"
86
+ Requires-Dist: praisonai-tools>=0.0.22; extra == "crewai"
87
+ Provides-Extra: autogen
88
+ Requires-Dist: pyautogen==0.2.29; extra == "autogen"
89
+ Requires-Dist: praisonai-tools>=0.0.22; extra == "autogen"
90
+ Requires-Dist: crewai; extra == "autogen"
91
+ Provides-Extra: autogen-v4
92
+ Requires-Dist: autogen-agentchat>=0.4.0; extra == "autogen-v4"
93
+ Requires-Dist: autogen-ext[openai]>=0.4.0; extra == "autogen-v4"
94
+ Requires-Dist: autogen-core>=0.4.0; extra == "autogen-v4"
95
+ Requires-Dist: praisonai-tools>=0.0.22; extra == "autogen-v4"
96
+ Requires-Dist: crewai; extra == "autogen-v4"
97
+
98
+ # PraisonAI Package
99
+
100
+ ## Development
101
+
102
+ ```bash
103
+ # Install
104
+ uv sync
105
+
106
+ # Build
107
+ uv build
108
+
109
+ # Publish
110
+ uv publish
111
+ ```
112
+
113
+ ## Version Bump
114
+
115
+ ```bash
116
+ # From project root
117
+ python src/praisonai/scripts/bump_version.py 2.2.96
118
+
119
+ # With praisonaiagents dependency
120
+ python src/praisonai/scripts/bump_version.py 2.2.96 --agents 0.0.167
121
+ ```
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.4
2
+ Name: PraisonAI
3
+ Version: 2.2.95
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
+ Author: Mervin Praison
6
+ License: MIT
7
+ Project-URL: Homepage, https://docs.praison.ai
8
+ Project-URL: Repository, https://github.com/mervinpraison/PraisonAI
9
+ Requires-Python: >=3.10
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: rich>=13.7
12
+ Requires-Dist: markdown>=3.5
13
+ Requires-Dist: pyparsing>=3.0.0
14
+ Requires-Dist: praisonaiagents>=0.0.166
15
+ Requires-Dist: python-dotenv>=0.19.0
16
+ Requires-Dist: instructor>=1.3.3
17
+ Requires-Dist: PyYAML>=6.0
18
+ Requires-Dist: mcp>=1.6.0
19
+ Provides-Extra: ui
20
+ Requires-Dist: chainlit==2.5.5; extra == "ui"
21
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "ui"
22
+ Requires-Dist: aiosqlite>=0.20.0; extra == "ui"
23
+ Requires-Dist: greenlet>=3.0.3; extra == "ui"
24
+ Requires-Dist: pydantic<=2.10.1; extra == "ui"
25
+ Provides-Extra: gradio
26
+ Requires-Dist: gradio>=4.26.0; extra == "gradio"
27
+ Provides-Extra: api
28
+ Requires-Dist: flask>=3.0.0; extra == "api"
29
+ Requires-Dist: fastapi>=0.115.0; extra == "api"
30
+ Requires-Dist: uvicorn>=0.34.0; extra == "api"
31
+ Provides-Extra: agentops
32
+ Requires-Dist: agentops>=0.3.12; extra == "agentops"
33
+ Provides-Extra: google
34
+ Requires-Dist: langchain-google-genai>=2.1.0; extra == "google"
35
+ Provides-Extra: openai
36
+ Requires-Dist: langchain-openai<0.3.0,>=0.2.1; extra == "openai"
37
+ Provides-Extra: anthropic
38
+ Requires-Dist: langchain-anthropic>=0.3.0; extra == "anthropic"
39
+ Provides-Extra: cohere
40
+ Requires-Dist: langchain-cohere<0.4.0,>=0.3.0; extra == "cohere"
41
+ Provides-Extra: chat
42
+ Requires-Dist: chainlit==2.5.5; extra == "chat"
43
+ Requires-Dist: litellm>=1.72.6; extra == "chat"
44
+ Requires-Dist: aiosqlite>=0.20.0; extra == "chat"
45
+ Requires-Dist: greenlet>=3.0.3; extra == "chat"
46
+ Requires-Dist: tavily-python==0.5.0; extra == "chat"
47
+ Requires-Dist: crawl4ai>=0.7.0; extra == "chat"
48
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "chat"
49
+ Requires-Dist: playwright>=1.47.0; extra == "chat"
50
+ Requires-Dist: rich; extra == "chat"
51
+ Requires-Dist: pydantic<=2.10.1; extra == "chat"
52
+ Provides-Extra: code
53
+ Requires-Dist: chainlit==2.5.5; extra == "code"
54
+ Requires-Dist: litellm>=1.72.6; extra == "code"
55
+ Requires-Dist: aiosqlite>=0.20.0; extra == "code"
56
+ Requires-Dist: greenlet>=3.0.3; extra == "code"
57
+ Requires-Dist: tavily-python==0.5.0; extra == "code"
58
+ Requires-Dist: crawl4ai>=0.7.0; extra == "code"
59
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "code"
60
+ Requires-Dist: playwright>=1.47.0; extra == "code"
61
+ Requires-Dist: pydantic<=2.10.1; extra == "code"
62
+ Provides-Extra: realtime
63
+ Requires-Dist: chainlit==2.5.5; extra == "realtime"
64
+ Requires-Dist: litellm>=1.72.6; extra == "realtime"
65
+ Requires-Dist: aiosqlite>=0.20.0; extra == "realtime"
66
+ Requires-Dist: greenlet>=3.0.3; extra == "realtime"
67
+ Requires-Dist: tavily-python==0.5.0; extra == "realtime"
68
+ Requires-Dist: crawl4ai>=0.7.0; extra == "realtime"
69
+ Requires-Dist: websockets>=12.0; extra == "realtime"
70
+ Requires-Dist: plotly>=5.24.0; extra == "realtime"
71
+ Requires-Dist: yfinance>=0.2.44; extra == "realtime"
72
+ Requires-Dist: duckduckgo_search>=6.3.0; extra == "realtime"
73
+ Requires-Dist: sqlalchemy>=2.0.36; extra == "realtime"
74
+ Provides-Extra: call
75
+ Requires-Dist: twilio>=7.0.0; extra == "call"
76
+ Requires-Dist: fastapi>=0.95.0; extra == "call"
77
+ Requires-Dist: uvicorn>=0.20.0; extra == "call"
78
+ Requires-Dist: websockets>=12.0; extra == "call"
79
+ Requires-Dist: flaml[automl]>=2.3.1; extra == "call"
80
+ Requires-Dist: pyngrok>=1.4.0; extra == "call"
81
+ Requires-Dist: rich; extra == "call"
82
+ Requires-Dist: openai>=1.54.0; extra == "call"
83
+ Provides-Extra: train
84
+ Provides-Extra: crewai
85
+ Requires-Dist: crewai>=0.157.0; extra == "crewai"
86
+ Requires-Dist: praisonai-tools>=0.0.22; extra == "crewai"
87
+ Provides-Extra: autogen
88
+ Requires-Dist: pyautogen==0.2.29; extra == "autogen"
89
+ Requires-Dist: praisonai-tools>=0.0.22; extra == "autogen"
90
+ Requires-Dist: crewai; extra == "autogen"
91
+ Provides-Extra: autogen-v4
92
+ Requires-Dist: autogen-agentchat>=0.4.0; extra == "autogen-v4"
93
+ Requires-Dist: autogen-ext[openai]>=0.4.0; extra == "autogen-v4"
94
+ Requires-Dist: autogen-core>=0.4.0; extra == "autogen-v4"
95
+ Requires-Dist: praisonai-tools>=0.0.22; extra == "autogen-v4"
96
+ Requires-Dist: crewai; extra == "autogen-v4"
97
+
98
+ # PraisonAI Package
99
+
100
+ ## Development
101
+
102
+ ```bash
103
+ # Install
104
+ uv sync
105
+
106
+ # Build
107
+ uv build
108
+
109
+ # Publish
110
+ uv publish
111
+ ```
112
+
113
+ ## Version Bump
114
+
115
+ ```bash
116
+ # From project root
117
+ python src/praisonai/scripts/bump_version.py 2.2.96
118
+
119
+ # With praisonaiagents dependency
120
+ python src/praisonai/scripts/bump_version.py 2.2.96 --agents 0.0.167
121
+ ```
@@ -0,0 +1,53 @@
1
+ README.md
2
+ pyproject.toml
3
+ PraisonAI.egg-info/PKG-INFO
4
+ PraisonAI.egg-info/SOURCES.txt
5
+ PraisonAI.egg-info/dependency_links.txt
6
+ PraisonAI.egg-info/entry_points.txt
7
+ PraisonAI.egg-info/requires.txt
8
+ PraisonAI.egg-info/top_level.txt
9
+ praisonai/__init__.py
10
+ praisonai/__main__.py
11
+ praisonai/agents_generator.py
12
+ praisonai/auto.py
13
+ praisonai/chainlit_ui.py
14
+ praisonai/cli.py
15
+ praisonai/deploy.py
16
+ praisonai/scheduler.py
17
+ praisonai/setup.py
18
+ praisonai/test.py
19
+ praisonai/train.py
20
+ praisonai/train_vision.py
21
+ praisonai/upload_vision.py
22
+ praisonai/version.py
23
+ praisonai/api/call.py
24
+ praisonai/inbuilt_tools/__init__.py
25
+ praisonai/inbuilt_tools/autogen_tools.py
26
+ praisonai/inc/__init__.py
27
+ praisonai/inc/config.py
28
+ praisonai/inc/models.py
29
+ praisonai/setup/__init__.py
30
+ praisonai/setup/build.py
31
+ praisonai/setup/post_install.py
32
+ praisonai/setup/setup_conda_env.py
33
+ praisonai/ui/agents.py
34
+ praisonai/ui/callbacks.py
35
+ praisonai/ui/chat.py
36
+ praisonai/ui/code.py
37
+ praisonai/ui/colab.py
38
+ praisonai/ui/colab_chainlit.py
39
+ praisonai/ui/context.py
40
+ praisonai/ui/database_config.py
41
+ praisonai/ui/db.py
42
+ praisonai/ui/realtime.py
43
+ praisonai/ui/sql_alchemy.py
44
+ praisonai/ui/components/aicoder.py
45
+ praisonai/ui/realtimeclient/__init__.py
46
+ praisonai/ui/realtimeclient/tools.py
47
+ tests/test.py
48
+ tests/test_agents_playbook.py
49
+ tests/test_basic.py
50
+ tests/test_custom_tools_fix.py
51
+ tests/test_double_api_fix.py
52
+ tests/test_phase2_refactor.py
53
+ tests/test_runner.py
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ praisonai = praisonai.__main__:main
3
+ praisonai-call = praisonai.api.call:main
4
+ setup-conda-env = praisonai.setup.setup_conda_env:main
@@ -0,0 +1,102 @@
1
+ rich>=13.7
2
+ markdown>=3.5
3
+ pyparsing>=3.0.0
4
+ praisonaiagents>=0.0.166
5
+ python-dotenv>=0.19.0
6
+ instructor>=1.3.3
7
+ PyYAML>=6.0
8
+ mcp>=1.6.0
9
+
10
+ [agentops]
11
+ agentops>=0.3.12
12
+
13
+ [anthropic]
14
+ langchain-anthropic>=0.3.0
15
+
16
+ [api]
17
+ flask>=3.0.0
18
+ fastapi>=0.115.0
19
+ uvicorn>=0.34.0
20
+
21
+ [autogen]
22
+ pyautogen==0.2.29
23
+ praisonai-tools>=0.0.22
24
+ crewai
25
+
26
+ [autogen-v4]
27
+ autogen-agentchat>=0.4.0
28
+ autogen-ext[openai]>=0.4.0
29
+ autogen-core>=0.4.0
30
+ praisonai-tools>=0.0.22
31
+ crewai
32
+
33
+ [call]
34
+ twilio>=7.0.0
35
+ fastapi>=0.95.0
36
+ uvicorn>=0.20.0
37
+ websockets>=12.0
38
+ flaml[automl]>=2.3.1
39
+ pyngrok>=1.4.0
40
+ rich
41
+ openai>=1.54.0
42
+
43
+ [chat]
44
+ chainlit==2.5.5
45
+ litellm>=1.72.6
46
+ aiosqlite>=0.20.0
47
+ greenlet>=3.0.3
48
+ tavily-python==0.5.0
49
+ crawl4ai>=0.7.0
50
+ sqlalchemy>=2.0.36
51
+ playwright>=1.47.0
52
+ rich
53
+ pydantic<=2.10.1
54
+
55
+ [code]
56
+ chainlit==2.5.5
57
+ litellm>=1.72.6
58
+ aiosqlite>=0.20.0
59
+ greenlet>=3.0.3
60
+ tavily-python==0.5.0
61
+ crawl4ai>=0.7.0
62
+ sqlalchemy>=2.0.36
63
+ playwright>=1.47.0
64
+ pydantic<=2.10.1
65
+
66
+ [cohere]
67
+ langchain-cohere<0.4.0,>=0.3.0
68
+
69
+ [crewai]
70
+ crewai>=0.157.0
71
+ praisonai-tools>=0.0.22
72
+
73
+ [google]
74
+ langchain-google-genai>=2.1.0
75
+
76
+ [gradio]
77
+ gradio>=4.26.0
78
+
79
+ [openai]
80
+ langchain-openai<0.3.0,>=0.2.1
81
+
82
+ [realtime]
83
+ chainlit==2.5.5
84
+ litellm>=1.72.6
85
+ aiosqlite>=0.20.0
86
+ greenlet>=3.0.3
87
+ tavily-python==0.5.0
88
+ crawl4ai>=0.7.0
89
+ websockets>=12.0
90
+ plotly>=5.24.0
91
+ yfinance>=0.2.44
92
+ duckduckgo_search>=6.3.0
93
+ sqlalchemy>=2.0.36
94
+
95
+ [train]
96
+
97
+ [ui]
98
+ chainlit==2.5.5
99
+ sqlalchemy>=2.0.36
100
+ aiosqlite>=0.20.0
101
+ greenlet>=3.0.3
102
+ pydantic<=2.10.1
@@ -0,0 +1 @@
1
+ praisonai
@@ -0,0 +1,24 @@
1
+ # PraisonAI Package
2
+
3
+ ## Development
4
+
5
+ ```bash
6
+ # Install
7
+ uv sync
8
+
9
+ # Build
10
+ uv build
11
+
12
+ # Publish
13
+ uv publish
14
+ ```
15
+
16
+ ## Version Bump
17
+
18
+ ```bash
19
+ # From project root
20
+ python src/praisonai/scripts/bump_version.py 2.2.96
21
+
22
+ # With praisonaiagents dependency
23
+ python src/praisonai/scripts/bump_version.py 2.2.96 --agents 0.0.167
24
+ ```
@@ -578,6 +578,9 @@ class PraisonAI:
578
578
  parser.add_argument("--goal", type=str, help="Goal for context engineering")
579
579
  parser.add_argument("--auto-analyze", action="store_true", help="Enable automatic analysis in context engineering")
580
580
  parser.add_argument("--research", action="store_true", help="Run deep research on a topic")
581
+ parser.add_argument("--query-rewrite", action="store_true", help="Rewrite query before research for better results")
582
+ parser.add_argument("--tools", "-t", type=str, help="Path to tools.py file for research agent")
583
+ parser.add_argument("--save", "-s", action="store_true", help="Save research output to file (output/research/)")
581
584
  parser.add_argument("--verbose", "-v", action="store_true", help="Enable verbose output for research")
582
585
 
583
586
  # If we're in a test environment, parse with empty args to avoid pytest interference
@@ -719,7 +722,10 @@ class PraisonAI:
719
722
 
720
723
  research_model = getattr(args, 'model', None)
721
724
  verbose = getattr(args, 'verbose', False)
722
- self.handle_research_command(research_query, research_model, verbose)
725
+ save = getattr(args, 'save', False)
726
+ query_rewrite = getattr(args, 'query_rewrite', False)
727
+ tools_path = getattr(args, 'tools', None)
728
+ self.handle_research_command(research_query, research_model, verbose, save, query_rewrite, tools_path)
723
729
  sys.exit(0)
724
730
 
725
731
  # Only check framework availability for agent-related operations
@@ -959,7 +965,7 @@ class PraisonAI:
959
965
  print(f"[red]ERROR: Context engineering failed: {e}[/red]")
960
966
  sys.exit(1)
961
967
 
962
- def handle_research_command(self, query: str, model: str = None, verbose: bool = False) -> str:
968
+ def handle_research_command(self, query: str, model: str = None, verbose: bool = False, save: bool = False, query_rewrite: bool = False, tools_path: str = None) -> str:
963
969
  """
964
970
  Handle the research command by creating a DeepResearchAgent and running it.
965
971
 
@@ -967,6 +973,9 @@ class PraisonAI:
967
973
  query: Research query/topic
968
974
  model: Model for deep research (optional, defaults to o4-mini-deep-research)
969
975
  verbose: Enable verbose output (default: False)
976
+ save: Save output to file (default: False)
977
+ query_rewrite: Rewrite query before research (default: False)
978
+ tools_path: Path to tools.py file with custom tools (default: None)
970
979
 
971
980
  Returns:
972
981
  str: Research report
@@ -981,6 +990,22 @@ class PraisonAI:
981
990
  logging.getLogger('httpx').setLevel(logging.WARNING)
982
991
  logging.getLogger('httpcore').setLevel(logging.WARNING)
983
992
 
993
+ # Rewrite query if requested
994
+ original_query = query
995
+ if query_rewrite:
996
+ try:
997
+ from praisonaiagents import QueryRewriterAgent, RewriteStrategy
998
+ print("[bold cyan]Rewriting query for better research results...[/bold cyan]")
999
+ rewriter = QueryRewriterAgent(model="gpt-4o-mini", verbose=False)
1000
+ result = rewriter.rewrite(query, strategy=RewriteStrategy.AUTO)
1001
+ query = result.primary_query
1002
+ print(f"[cyan]Original:[/cyan] {original_query}")
1003
+ print(f"[cyan]Rewritten:[/cyan] {query}")
1004
+ except ImportError:
1005
+ print("[yellow]Warning: QueryRewriterAgent not available, using original query[/yellow]")
1006
+ except Exception as e:
1007
+ print(f"[yellow]Warning: Query rewrite failed ({e}), using original query[/yellow]")
1008
+
984
1009
  print("[bold green]Starting Deep Research...[/bold green]")
985
1010
  print(f"Query: {query}")
986
1011
 
@@ -990,11 +1015,86 @@ class PraisonAI:
990
1015
 
991
1016
  print(f"Model: {model}")
992
1017
 
993
- # Create DeepResearchAgent (verbose=True is default for streaming output)
994
- agent = DeepResearchAgent(model=model)
1018
+ # Load tools if specified
1019
+ tools_list = []
1020
+ if tools_path:
1021
+ # Check if it's a file path or comma-separated tool names
1022
+ if os.path.isfile(tools_path):
1023
+ # Load from file
1024
+ try:
1025
+ import inspect
1026
+ spec = importlib.util.spec_from_file_location("tools_module", tools_path)
1027
+ if spec and spec.loader:
1028
+ module = importlib.util.module_from_spec(spec)
1029
+ spec.loader.exec_module(module)
1030
+ # Get all callable functions from the module
1031
+ for name, obj in inspect.getmembers(module):
1032
+ if inspect.isfunction(obj) and not name.startswith('_'):
1033
+ tools_list.append(obj)
1034
+ if tools_list:
1035
+ print(f"[cyan]Loaded {len(tools_list)} tools from {tools_path}[/cyan]")
1036
+ except Exception as e:
1037
+ print(f"[yellow]Warning: Failed to load tools from {tools_path}: {e}[/yellow]")
1038
+ else:
1039
+ # Treat as comma-separated tool names (e.g., "internet_search,wiki_search")
1040
+ try:
1041
+ from praisonaiagents.tools import TOOL_MAPPINGS
1042
+ import praisonaiagents.tools as tools_module
1043
+
1044
+ tool_names = [t.strip() for t in tools_path.split(',')]
1045
+ for tool_name in tool_names:
1046
+ if tool_name in TOOL_MAPPINGS:
1047
+ try:
1048
+ tool = getattr(tools_module, tool_name)
1049
+ tools_list.append(tool)
1050
+ except Exception as e:
1051
+ print(f"[yellow]Warning: Failed to load tool '{tool_name}': {e}[/yellow]")
1052
+ else:
1053
+ print(f"[yellow]Warning: Unknown tool '{tool_name}'[/yellow]")
1054
+ if tools_list:
1055
+ print(f"[cyan]Loaded {len(tools_list)} built-in tools: {', '.join(tool_names)}[/cyan]")
1056
+ except ImportError:
1057
+ print("[yellow]Warning: Could not import tools module[/yellow]")
995
1058
 
996
- # Execute the research
997
- result = agent.research(query)
1059
+ # If tools are provided, use Agent with tools first, then DeepResearchAgent
1060
+ if tools_list:
1061
+ from praisonaiagents import Agent, Task, PraisonAIAgents
1062
+
1063
+ # Create a research assistant agent with tools
1064
+ research_assistant = Agent(
1065
+ name="Research Assistant",
1066
+ role="Information Gatherer",
1067
+ goal="Gather relevant information using available tools",
1068
+ backstory="You are an expert at using tools to gather information for research.",
1069
+ tools=tools_list,
1070
+ llm="gpt-4o-mini",
1071
+ verbose=False
1072
+ )
1073
+
1074
+ # Create task to gather initial information
1075
+ gather_task = Task(
1076
+ description=f"Use your tools to gather relevant information about: {query}",
1077
+ expected_output="A summary of information gathered from the tools",
1078
+ agent=research_assistant
1079
+ )
1080
+
1081
+ print("[cyan]Gathering information with tools...[/cyan]")
1082
+ agents = PraisonAIAgents(agents=[research_assistant], tasks=[gather_task], verbose=0)
1083
+ tool_results = agents.start()
1084
+
1085
+ # Enhance query with tool results
1086
+ enhanced_query = f"{query}\n\nAdditional context from tools:\n{tool_results}"
1087
+ print("[cyan]Tools context gathered, starting deep research...[/cyan]")
1088
+
1089
+ # Create DeepResearchAgent
1090
+ agent = DeepResearchAgent(model=model)
1091
+ result = agent.research(enhanced_query)
1092
+ else:
1093
+ # Create DeepResearchAgent (verbose=True is default for streaming output)
1094
+ agent = DeepResearchAgent(model=model)
1095
+
1096
+ # Execute the research
1097
+ result = agent.research(query)
998
1098
 
999
1099
  print("\n[bold green]Research Complete![/bold green]")
1000
1100
  print("\n" + "="*60)
@@ -1011,6 +1111,42 @@ class PraisonAI:
1011
1111
  if url:
1012
1112
  print(f" {url}")
1013
1113
 
1114
+ # Save output to file if --save flag is set
1115
+ if save:
1116
+ import re
1117
+ # Get first 10 words from query for filename
1118
+ words = query.split()[:10]
1119
+ filename_base = ' '.join(words)
1120
+ # Sanitize filename: remove invalid characters
1121
+ filename_base = re.sub(r'[<>:"/\\|?*\x00-\x1f]', '', filename_base)
1122
+ filename_base = filename_base.strip()[:100] # Limit length
1123
+ if not filename_base:
1124
+ filename_base = "research_output"
1125
+
1126
+ # Create output directory
1127
+ output_dir = os.path.join(os.getcwd(), "output", "research")
1128
+ os.makedirs(output_dir, exist_ok=True)
1129
+
1130
+ # Build markdown content
1131
+ md_content = f"# {query}\n\n"
1132
+ md_content += result.report
1133
+ if result.citations:
1134
+ md_content += "\n\n## Citations\n\n"
1135
+ for i, citation in enumerate(result.citations, 1):
1136
+ title = getattr(citation, 'title', 'Untitled')
1137
+ url = getattr(citation, 'url', '')
1138
+ if url:
1139
+ md_content += f"{i}. [{title}]({url})\n"
1140
+ else:
1141
+ md_content += f"{i}. {title}\n"
1142
+
1143
+ # Save to file
1144
+ output_path = os.path.join(output_dir, f"{filename_base}.md")
1145
+ with open(output_path, 'w', encoding='utf-8') as f:
1146
+ f.write(md_content)
1147
+
1148
+ print(f"\n[bold green]Saved to:[/bold green] {output_path}")
1149
+
1014
1150
  return result.report
1015
1151
 
1016
1152
  except ImportError as e:
@@ -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.91 gunicorn markdown\n")
60
+ file.write("RUN pip install flask praisonai==2.2.95 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
 
@@ -0,0 +1 @@
1
+ __version__ = "2.2.95"