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.
- praisonai-2.2.95/PKG-INFO +121 -0
- praisonai-2.2.95/PraisonAI.egg-info/PKG-INFO +121 -0
- praisonai-2.2.95/PraisonAI.egg-info/SOURCES.txt +53 -0
- praisonai-2.2.95/PraisonAI.egg-info/dependency_links.txt +1 -0
- praisonai-2.2.95/PraisonAI.egg-info/entry_points.txt +4 -0
- praisonai-2.2.95/PraisonAI.egg-info/requires.txt +102 -0
- praisonai-2.2.95/PraisonAI.egg-info/top_level.txt +1 -0
- praisonai-2.2.95/README.md +24 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/cli.py +142 -6
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/deploy.py +1 -1
- praisonai-2.2.95/praisonai/version.py +1 -0
- praisonai-2.2.95/pyproject.toml +116 -0
- praisonai-2.2.95/setup.cfg +4 -0
- praisonai-2.2.95/tests/test.py +105 -0
- praisonai-2.2.95/tests/test_agents_playbook.py +36 -0
- praisonai-2.2.95/tests/test_basic.py +32 -0
- praisonai-2.2.95/tests/test_custom_tools_fix.py +83 -0
- praisonai-2.2.95/tests/test_double_api_fix.py +187 -0
- praisonai-2.2.95/tests/test_phase2_refactor.py +152 -0
- praisonai-2.2.95/tests/test_runner.py +355 -0
- praisonai-2.2.91/PKG-INFO +0 -110
- praisonai-2.2.91/README.md +0 -9
- praisonai-2.2.91/praisonai/README.md +0 -5
- praisonai-2.2.91/praisonai/public/android-chrome-192x192.png +0 -0
- praisonai-2.2.91/praisonai/public/android-chrome-512x512.png +0 -0
- praisonai-2.2.91/praisonai/public/apple-touch-icon.png +0 -0
- praisonai-2.2.91/praisonai/public/fantasy.svg +0 -3
- praisonai-2.2.91/praisonai/public/favicon-16x16.png +0 -0
- praisonai-2.2.91/praisonai/public/favicon-32x32.png +0 -0
- praisonai-2.2.91/praisonai/public/favicon.ico +0 -0
- praisonai-2.2.91/praisonai/public/game.svg +0 -3
- praisonai-2.2.91/praisonai/public/logo_dark.png +0 -0
- praisonai-2.2.91/praisonai/public/logo_light.png +0 -0
- praisonai-2.2.91/praisonai/public/movie.svg +0 -3
- praisonai-2.2.91/praisonai/public/praison-ai-agents-architecture-dark.png +0 -0
- praisonai-2.2.91/praisonai/public/praison-ai-agents-architecture.png +0 -0
- praisonai-2.2.91/praisonai/public/thriller.svg +0 -3
- praisonai-2.2.91/praisonai/setup/config.yaml +0 -60
- praisonai-2.2.91/praisonai/setup/setup_conda_env.sh +0 -105
- praisonai-2.2.91/praisonai/ui/README.md +0 -21
- praisonai-2.2.91/praisonai/ui/config/chainlit.md +0 -1
- praisonai-2.2.91/praisonai/ui/config/translations/bn.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/en-US.json +0 -229
- praisonai-2.2.91/praisonai/ui/config/translations/gu.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/he-IL.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/hi.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/kn.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/ml.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/mr.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/ta.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/te.json +0 -231
- praisonai-2.2.91/praisonai/ui/config/translations/zh-CN.json +0 -229
- praisonai-2.2.91/praisonai/ui/public/fantasy.svg +0 -3
- praisonai-2.2.91/praisonai/ui/public/game.svg +0 -3
- praisonai-2.2.91/praisonai/ui/public/logo_dark.png +0 -0
- praisonai-2.2.91/praisonai/ui/public/logo_light.png +0 -0
- praisonai-2.2.91/praisonai/ui/public/movie.svg +0 -3
- praisonai-2.2.91/praisonai/ui/public/praison.css +0 -3
- praisonai-2.2.91/praisonai/ui/public/thriller.svg +0 -3
- praisonai-2.2.91/praisonai/ui/tools.md +0 -133
- praisonai-2.2.91/praisonai/version.py +0 -1
- praisonai-2.2.91/pyproject.toml +0 -299
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/__init__.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/__main__.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/agents_generator.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/api/call.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/auto.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/chainlit_ui.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inc/__init__.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inc/config.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/inc/models.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/scheduler.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/__init__.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/build.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/post_install.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/setup.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/test.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/train.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/train_vision.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/agents.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/callbacks.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/chat.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/code.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/colab.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/colab_chainlit.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/context.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/database_config.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/db.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/realtime.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/realtimeclient/__init__.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/realtimeclient/tools.py +0 -0
- {praisonai-2.2.91 → praisonai-2.2.95}/praisonai/ui/sql_alchemy.py +0 -0
- {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 @@
|
|
|
1
|
+
|
|
@@ -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
|
-
|
|
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
|
-
#
|
|
994
|
-
|
|
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
|
-
#
|
|
997
|
-
|
|
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.
|
|
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"
|