PraisonAI 2.3.87__tar.gz → 2.4.2__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.3.87 → praisonai-2.4.2}/PKG-INFO +350 -10
- {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/PKG-INFO +350 -10
- {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/SOURCES.txt +42 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-2.3.87 → praisonai-2.4.2}/README.md +348 -8
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/__init__.py +18 -0
- praisonai-2.4.2/praisonai/cli/features/background.py +296 -0
- praisonai-2.4.2/praisonai/cli/features/checkpoints.py +338 -0
- praisonai-2.4.2/praisonai/cli/features/hooks.py +583 -0
- praisonai-2.4.2/praisonai/cli/features/persistence.py +637 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/main.py +6 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/deploy.py +1 -1
- praisonai-2.4.2/praisonai/persistence/__init__.py +84 -0
- praisonai-2.4.2/praisonai/persistence/config.py +238 -0
- praisonai-2.4.2/praisonai/persistence/conversation/__init__.py +25 -0
- praisonai-2.4.2/praisonai/persistence/conversation/base.py +151 -0
- praisonai-2.4.2/praisonai/persistence/conversation/mysql.py +387 -0
- praisonai-2.4.2/praisonai/persistence/conversation/postgres.py +401 -0
- praisonai-2.4.2/praisonai/persistence/conversation/singlestore.py +240 -0
- praisonai-2.4.2/praisonai/persistence/conversation/sqlite.py +341 -0
- praisonai-2.4.2/praisonai/persistence/conversation/supabase.py +203 -0
- praisonai-2.4.2/praisonai/persistence/conversation/surrealdb.py +287 -0
- praisonai-2.4.2/praisonai/persistence/factory.py +234 -0
- praisonai-2.4.2/praisonai/persistence/hooks/__init__.py +18 -0
- praisonai-2.4.2/praisonai/persistence/hooks/agent_hooks.py +297 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/__init__.py +26 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/base.py +144 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/cassandra.py +232 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/chroma.py +295 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/clickhouse.py +242 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/lancedb.py +216 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/milvus.py +277 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/pgvector.py +335 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/pinecone.py +253 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/qdrant.py +301 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/redis_vector.py +291 -0
- praisonai-2.4.2/praisonai/persistence/knowledge/weaviate.py +223 -0
- praisonai-2.4.2/praisonai/persistence/migrations/__init__.py +10 -0
- praisonai-2.4.2/praisonai/persistence/migrations/manager.py +251 -0
- praisonai-2.4.2/praisonai/persistence/orchestrator.py +406 -0
- praisonai-2.4.2/praisonai/persistence/state/__init__.py +21 -0
- praisonai-2.4.2/praisonai/persistence/state/base.py +107 -0
- praisonai-2.4.2/praisonai/persistence/state/dynamodb.py +226 -0
- praisonai-2.4.2/praisonai/persistence/state/firestore.py +175 -0
- praisonai-2.4.2/praisonai/persistence/state/memory.py +245 -0
- praisonai-2.4.2/praisonai/persistence/state/mongodb.py +158 -0
- praisonai-2.4.2/praisonai/persistence/state/redis.py +190 -0
- praisonai-2.4.2/praisonai/persistence/state/upstash.py +144 -0
- praisonai-2.4.2/praisonai/persistence/tests/__init__.py +3 -0
- praisonai-2.4.2/praisonai/persistence/tests/test_all_backends.py +633 -0
- praisonai-2.4.2/praisonai/version.py +1 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/pyproject.toml +1 -1
- praisonai-2.3.87/praisonai/version.py +0 -1
- {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/__main__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/agent_scheduler.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/agents_generator.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/api/call.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/auto.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/chainlit_ui.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/agents.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/base.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/compare.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/eval.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/image.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/profile.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/router.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/session.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/skills.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/todo.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/tools.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/agent_tools.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inc/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inc/config.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inc/models.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/base.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/profiler.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/base.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/build.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/post_install.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/test.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/train.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/train_vision.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/agents.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/callbacks.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/chat.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/code.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/colab.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/colab_chainlit.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/context.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/database_config.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/db.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/realtime.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/realtimeclient/__init__.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/realtimeclient/tools.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/sql_alchemy.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/upload_vision.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/setup.cfg +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_agents_playbook.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_approval_system.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_basic.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_cli_features.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_double_api_fix.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_n8n_integration.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_phase2_refactor.py +0 -0
- {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_runner.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.2
|
|
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
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=0.1
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.2.1
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -358,6 +358,12 @@ npm install praisonai
|
|
|
358
358
|
| ↳ 100+ LLM Support | [Example](examples/python/providers/openai/openai_gpt4_example.py) | [📖](https://docs.praison.ai/models) |
|
|
359
359
|
| ↳ Callback Agents | [Example](examples/python/general/advanced-callback-systems.py) | [📖](https://docs.praison.ai/features/callbacks) |
|
|
360
360
|
| ↳ Hooks | [Example](#9-hooks) | [📖](https://docs.praison.ai/features/hooks) |
|
|
361
|
+
| ↳ Shadow Git Checkpoints | [Example](#10-shadow-git-checkpoints) | [📖](https://docs.praison.ai/features/checkpoints) |
|
|
362
|
+
| ↳ Background Tasks | [Example](examples/background/basic_background.py) | [📖](https://docs.praison.ai/features/background-tasks) |
|
|
363
|
+
| ↳ Policy Engine | [Example](examples/policy/basic_policy.py) | [📖](https://docs.praison.ai/features/policy-engine) |
|
|
364
|
+
| ↳ Thinking Budgets | [Example](examples/thinking/basic_thinking.py) | [📖](https://docs.praison.ai/features/thinking-budgets) |
|
|
365
|
+
| ↳ Output Styles | [Example](examples/output/basic_output.py) | [📖](https://docs.praison.ai/features/output-styles) |
|
|
366
|
+
| ↳ Context Compaction | [Example](examples/compaction/basic_compaction.py) | [📖](https://docs.praison.ai/features/context-compaction) |
|
|
361
367
|
| **📊 Monitoring & Management** | | |
|
|
362
368
|
| ↳ Sessions Management | [Example](examples/python/sessions/comprehensive-session-management.py) | [📖](https://docs.praison.ai/features/sessions) |
|
|
363
369
|
| ↳ Auto-Save Sessions | [Example](#session-management-python) | [📖](https://docs.praison.ai/docs/cli/session) |
|
|
@@ -960,21 +966,258 @@ callbacks:
|
|
|
960
966
|
|
|
961
967
|
### 9. Hooks
|
|
962
968
|
|
|
963
|
-
|
|
969
|
+
Intercept and modify agent behavior at various lifecycle points:
|
|
964
970
|
|
|
965
971
|
```python
|
|
966
|
-
from praisonaiagents.
|
|
972
|
+
from praisonaiagents.hooks import (
|
|
973
|
+
HookRegistry, HookRunner, HookEvent, HookResult,
|
|
974
|
+
BeforeToolInput
|
|
975
|
+
)
|
|
976
|
+
|
|
977
|
+
# Create a hook registry
|
|
978
|
+
registry = HookRegistry()
|
|
967
979
|
|
|
968
|
-
|
|
980
|
+
# Log all tool calls
|
|
981
|
+
@registry.on(HookEvent.BEFORE_TOOL)
|
|
982
|
+
def log_tools(event_data: BeforeToolInput) -> HookResult:
|
|
983
|
+
print(f"Tool: {event_data.tool_name}")
|
|
984
|
+
return HookResult.allow()
|
|
969
985
|
|
|
970
|
-
#
|
|
971
|
-
|
|
986
|
+
# Block dangerous operations
|
|
987
|
+
@registry.on(HookEvent.BEFORE_TOOL)
|
|
988
|
+
def security_check(event_data: BeforeToolInput) -> HookResult:
|
|
989
|
+
if "delete" in event_data.tool_name.lower():
|
|
990
|
+
return HookResult.deny("Delete operations blocked")
|
|
991
|
+
return HookResult.allow()
|
|
972
992
|
|
|
973
993
|
# Execute hooks
|
|
974
|
-
|
|
994
|
+
runner = HookRunner(registry)
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
**CLI Commands:**
|
|
998
|
+
```bash
|
|
999
|
+
praisonai hooks list # List registered hooks
|
|
1000
|
+
praisonai hooks test before_tool # Test hooks for an event
|
|
1001
|
+
praisonai hooks run "echo test" # Run a command hook
|
|
1002
|
+
praisonai hooks validate hooks.json # Validate configuration
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
|
|
1006
|
+
### 10. Shadow Git Checkpoints
|
|
1007
|
+
|
|
1008
|
+
File-level undo/restore using shadow git:
|
|
1009
|
+
|
|
1010
|
+
```python
|
|
1011
|
+
from praisonaiagents.checkpoints import CheckpointService
|
|
1012
|
+
|
|
1013
|
+
service = CheckpointService(workspace_dir="./my_project")
|
|
1014
|
+
await service.initialize()
|
|
1015
|
+
|
|
1016
|
+
# Save checkpoint before changes
|
|
1017
|
+
result = await service.save("Before refactoring")
|
|
1018
|
+
|
|
1019
|
+
# Make changes...
|
|
1020
|
+
|
|
1021
|
+
# Restore if needed
|
|
1022
|
+
await service.restore(result.checkpoint.id)
|
|
1023
|
+
|
|
1024
|
+
# View diff
|
|
1025
|
+
diff = await service.diff()
|
|
1026
|
+
```
|
|
1027
|
+
|
|
1028
|
+
**CLI Commands:**
|
|
1029
|
+
```bash
|
|
1030
|
+
praisonai checkpoint save "Before changes" # Save checkpoint
|
|
1031
|
+
praisonai checkpoint list # List checkpoints
|
|
1032
|
+
praisonai checkpoint diff # Show changes
|
|
1033
|
+
praisonai checkpoint restore abc123 # Restore to checkpoint
|
|
1034
|
+
```
|
|
1035
|
+
|
|
1036
|
+
**Links:**
|
|
1037
|
+
- [📖 Coding Docs](https://docs.praison.ai/features/checkpoints)
|
|
1038
|
+
- [📖 CLI Docs](https://docs.praison.ai/docs/cli/checkpoint)
|
|
1039
|
+
- [💻 Example](examples/checkpoints/basic_checkpoints.py)
|
|
1040
|
+
|
|
1041
|
+
---
|
|
1042
|
+
|
|
1043
|
+
### 11. Background Tasks
|
|
1044
|
+
|
|
1045
|
+
Run agent tasks asynchronously without blocking:
|
|
1046
|
+
|
|
1047
|
+
```python
|
|
1048
|
+
import asyncio
|
|
1049
|
+
from praisonaiagents.background import BackgroundRunner, BackgroundConfig
|
|
1050
|
+
|
|
1051
|
+
async def main():
|
|
1052
|
+
config = BackgroundConfig(max_concurrent_tasks=3)
|
|
1053
|
+
runner = BackgroundRunner(config=config)
|
|
1054
|
+
|
|
1055
|
+
async def my_task(name: str) -> str:
|
|
1056
|
+
await asyncio.sleep(2)
|
|
1057
|
+
return f"Task {name} completed"
|
|
1058
|
+
|
|
1059
|
+
task = await runner.submit(my_task, args=("example",), name="my_task")
|
|
1060
|
+
await task.wait(timeout=10.0)
|
|
1061
|
+
print(task.result)
|
|
1062
|
+
|
|
1063
|
+
asyncio.run(main())
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
**CLI Commands:**
|
|
1067
|
+
```bash
|
|
1068
|
+
praisonai background list # List running tasks
|
|
1069
|
+
praisonai background status <id> # Check task status
|
|
1070
|
+
praisonai background cancel <id> # Cancel a task
|
|
1071
|
+
praisonai background clear # Clear completed tasks
|
|
1072
|
+
```
|
|
1073
|
+
|
|
1074
|
+
**Links:**
|
|
1075
|
+
- [📖 Coding Docs](https://docs.praison.ai/features/background-tasks)
|
|
1076
|
+
- [📖 CLI Docs](https://docs.praison.ai/docs/cli/background)
|
|
1077
|
+
- [💻 Example](examples/background/basic_background.py)
|
|
1078
|
+
|
|
1079
|
+
---
|
|
1080
|
+
|
|
1081
|
+
### 12. Policy Engine
|
|
1082
|
+
|
|
1083
|
+
Control what agents can and cannot do with policy-based execution:
|
|
1084
|
+
|
|
1085
|
+
```python
|
|
1086
|
+
from praisonaiagents.policy import (
|
|
1087
|
+
PolicyEngine, Policy, PolicyRule, PolicyAction
|
|
1088
|
+
)
|
|
1089
|
+
|
|
1090
|
+
engine = PolicyEngine()
|
|
1091
|
+
|
|
1092
|
+
policy = Policy(
|
|
1093
|
+
name="no_delete",
|
|
1094
|
+
rules=[
|
|
1095
|
+
PolicyRule(
|
|
1096
|
+
action=PolicyAction.DENY,
|
|
1097
|
+
resource="tool:delete_*",
|
|
1098
|
+
reason="Delete operations blocked"
|
|
1099
|
+
)
|
|
1100
|
+
]
|
|
1101
|
+
)
|
|
1102
|
+
engine.add_policy(policy)
|
|
1103
|
+
|
|
1104
|
+
result = engine.check("tool:delete_file", {})
|
|
1105
|
+
print(f"Allowed: {result.allowed}")
|
|
1106
|
+
```
|
|
1107
|
+
|
|
1108
|
+
**CLI Commands:**
|
|
1109
|
+
```bash
|
|
1110
|
+
praisonai policy list # List policies
|
|
1111
|
+
praisonai policy check "tool:name" # Check if allowed
|
|
1112
|
+
praisonai policy init # Create template
|
|
1113
|
+
```
|
|
1114
|
+
|
|
1115
|
+
**Links:**
|
|
1116
|
+
- [📖 Coding Docs](https://docs.praison.ai/features/policy-engine)
|
|
1117
|
+
- [📖 CLI Docs](https://docs.praison.ai/docs/cli/policy)
|
|
1118
|
+
- [💻 Example](examples/policy/basic_policy.py)
|
|
1119
|
+
|
|
1120
|
+
---
|
|
1121
|
+
|
|
1122
|
+
### 13. Thinking Budgets
|
|
1123
|
+
|
|
1124
|
+
Configure token budgets for extended thinking:
|
|
1125
|
+
|
|
1126
|
+
```python
|
|
1127
|
+
from praisonaiagents.thinking import ThinkingBudget, ThinkingTracker
|
|
1128
|
+
|
|
1129
|
+
# Use predefined levels
|
|
1130
|
+
budget = ThinkingBudget.high() # 16,000 tokens
|
|
1131
|
+
|
|
1132
|
+
# Track usage
|
|
1133
|
+
tracker = ThinkingTracker()
|
|
1134
|
+
session = tracker.start_session(budget_tokens=16000)
|
|
1135
|
+
tracker.end_session(session, tokens_used=12000)
|
|
1136
|
+
|
|
1137
|
+
summary = tracker.get_summary()
|
|
1138
|
+
print(f"Utilization: {summary['average_utilization']:.1%}")
|
|
1139
|
+
```
|
|
1140
|
+
|
|
1141
|
+
**CLI Commands:**
|
|
1142
|
+
```bash
|
|
1143
|
+
praisonai thinking status # Show current budget
|
|
1144
|
+
praisonai thinking set high # Set budget level
|
|
1145
|
+
praisonai thinking stats # Show usage statistics
|
|
975
1146
|
```
|
|
976
1147
|
|
|
977
|
-
|
|
1148
|
+
**Links:**
|
|
1149
|
+
- [📖 Coding Docs](https://docs.praison.ai/features/thinking-budgets)
|
|
1150
|
+
- [📖 CLI Docs](https://docs.praison.ai/docs/cli/thinking)
|
|
1151
|
+
- [💻 Example](examples/thinking/basic_thinking.py)
|
|
1152
|
+
|
|
1153
|
+
---
|
|
1154
|
+
|
|
1155
|
+
### 14. Output Styles
|
|
1156
|
+
|
|
1157
|
+
Configure how agents format their responses:
|
|
1158
|
+
|
|
1159
|
+
```python
|
|
1160
|
+
from praisonaiagents.output import OutputStyle, OutputFormatter
|
|
1161
|
+
|
|
1162
|
+
# Use preset styles
|
|
1163
|
+
style = OutputStyle.concise()
|
|
1164
|
+
formatter = OutputFormatter(style)
|
|
1165
|
+
|
|
1166
|
+
# Format output
|
|
1167
|
+
text = "# Hello\n\nThis is **bold** text."
|
|
1168
|
+
plain = formatter.format(text)
|
|
1169
|
+
print(plain)
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
**CLI Commands:**
|
|
1173
|
+
```bash
|
|
1174
|
+
praisonai output status # Show current style
|
|
1175
|
+
praisonai output set concise # Set output style
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
**Links:**
|
|
1179
|
+
- [📖 Coding Docs](https://docs.praison.ai/features/output-styles)
|
|
1180
|
+
- [📖 CLI Docs](https://docs.praison.ai/docs/cli/output-style)
|
|
1181
|
+
- [💻 Example](examples/output/basic_output.py)
|
|
1182
|
+
|
|
1183
|
+
---
|
|
1184
|
+
|
|
1185
|
+
### 15. Context Compaction
|
|
1186
|
+
|
|
1187
|
+
Automatically manage context window size:
|
|
1188
|
+
|
|
1189
|
+
```python
|
|
1190
|
+
from praisonaiagents.compaction import (
|
|
1191
|
+
ContextCompactor, CompactionStrategy
|
|
1192
|
+
)
|
|
1193
|
+
|
|
1194
|
+
compactor = ContextCompactor(
|
|
1195
|
+
max_tokens=4000,
|
|
1196
|
+
strategy=CompactionStrategy.SLIDING,
|
|
1197
|
+
preserve_recent=3
|
|
1198
|
+
)
|
|
1199
|
+
|
|
1200
|
+
messages = [...] # Your conversation history
|
|
1201
|
+
compacted, result = compactor.compact(messages)
|
|
1202
|
+
|
|
1203
|
+
print(f"Compression: {result.compression_ratio:.1%}")
|
|
1204
|
+
```
|
|
1205
|
+
|
|
1206
|
+
**CLI Commands:**
|
|
1207
|
+
```bash
|
|
1208
|
+
praisonai compaction status # Show settings
|
|
1209
|
+
praisonai compaction set sliding # Set strategy
|
|
1210
|
+
praisonai compaction stats # Show statistics
|
|
1211
|
+
```
|
|
1212
|
+
|
|
1213
|
+
**Links:**
|
|
1214
|
+
- [📖 Coding Docs](https://docs.praison.ai/features/context-compaction)
|
|
1215
|
+
- [📖 CLI Docs](https://docs.praison.ai/docs/cli/compaction)
|
|
1216
|
+
- [💻 Example](examples/compaction/basic_compaction.py)
|
|
1217
|
+
|
|
1218
|
+
---
|
|
1219
|
+
|
|
1220
|
+
### 16. Field Names Reference (A-I-G-S)
|
|
978
1221
|
|
|
979
1222
|
PraisonAI accepts both old (agents.yaml) and new (workflow.yaml) field names. Use the **canonical names** for new projects:
|
|
980
1223
|
|
|
@@ -1008,7 +1251,7 @@ steps: # Define steps (not 'tasks')
|
|
|
1008
1251
|
|
|
1009
1252
|
> **Note:** The parser accepts both old and new names. Run `praisonai workflow validate <file.yaml>` to see suggestions for canonical names.
|
|
1010
1253
|
|
|
1011
|
-
###
|
|
1254
|
+
### 12. Extended agents.yaml with Workflow Patterns
|
|
1012
1255
|
|
|
1013
1256
|
**Feature Parity:** Both `agents.yaml` and `workflow.yaml` now support the same features:
|
|
1014
1257
|
- All workflow patterns (route, parallel, loop, repeat)
|
|
@@ -2578,6 +2821,103 @@ PraisonAI provides zero-dependency persistent memory for agents. For detailed ex
|
|
|
2578
2821
|
|
|
2579
2822
|
---
|
|
2580
2823
|
|
|
2824
|
+
## 💾 Persistence (Databases)
|
|
2825
|
+
|
|
2826
|
+
Enable automatic conversation persistence with 2 lines of code:
|
|
2827
|
+
|
|
2828
|
+
```python
|
|
2829
|
+
from praisonaiagents import Agent, db
|
|
2830
|
+
|
|
2831
|
+
agent = Agent(
|
|
2832
|
+
name="Assistant",
|
|
2833
|
+
db=db(database_url="postgresql://localhost/mydb"), # db(...) shortcut
|
|
2834
|
+
session_id="my-session" # Optional: defaults to per-hour ID (YYYYMMDDHH)
|
|
2835
|
+
)
|
|
2836
|
+
agent.chat("Hello!") # Auto-persists messages, runs, traces
|
|
2837
|
+
```
|
|
2838
|
+
|
|
2839
|
+
### Persistence CLI Commands
|
|
2840
|
+
|
|
2841
|
+
| Command | Description |
|
|
2842
|
+
|---------|-------------|
|
|
2843
|
+
| `praisonai persistence doctor` | Validate DB connectivity |
|
|
2844
|
+
| `praisonai persistence run` | Run agent with persistence |
|
|
2845
|
+
| `praisonai persistence resume` | Resume existing session |
|
|
2846
|
+
| `praisonai persistence export` | Export session to JSONL |
|
|
2847
|
+
| `praisonai persistence import` | Import session from JSONL |
|
|
2848
|
+
| `praisonai persistence migrate` | Apply schema migrations |
|
|
2849
|
+
| `praisonai persistence status` | Show schema status |
|
|
2850
|
+
|
|
2851
|
+
### Databases Table
|
|
2852
|
+
|
|
2853
|
+
| Database | Store Type | Install | Example | Docs |
|
|
2854
|
+
|----------|------------|---------|---------|------|
|
|
2855
|
+
| PostgreSQL | Conversation | `pip install "praisonai[tools]"` | [simple_db_agent.py](examples/persistence/simple_db_agent.py) | [docs](https://docs.praison.ai/docs/databases/postgres) |
|
|
2856
|
+
| MySQL | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2857
|
+
| SQLite | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2858
|
+
| SingleStore | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2859
|
+
| Supabase | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2860
|
+
| SurrealDB | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2861
|
+
| Qdrant | Knowledge | `pip install "praisonai[tools]"` | [knowledge_qdrant.py](examples/persistence/knowledge_qdrant.py) | [docs](https://docs.praison.ai/docs/databases/qdrant) |
|
|
2862
|
+
| ChromaDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2863
|
+
| Pinecone | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2864
|
+
| Weaviate | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2865
|
+
| LanceDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2866
|
+
| Milvus | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2867
|
+
| PGVector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2868
|
+
| Redis Vector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2869
|
+
| Cassandra | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2870
|
+
| ClickHouse | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2871
|
+
| Redis | State | `pip install "praisonai[tools]"` | [state_redis.py](examples/persistence/state_redis.py) | [docs](https://docs.praison.ai/docs/databases/redis) |
|
|
2872
|
+
| MongoDB | State | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2873
|
+
| DynamoDB | State | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2874
|
+
| Firestore | State | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2875
|
+
| Upstash | State | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2876
|
+
| Memory | State | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2877
|
+
|
|
2878
|
+
---
|
|
2879
|
+
|
|
2880
|
+
## 🔧 Tools Table
|
|
2881
|
+
|
|
2882
|
+
Install all tools with: `pip install "praisonai[tools]"`
|
|
2883
|
+
|
|
2884
|
+
| Tool | Category | Import | Docs |
|
|
2885
|
+
|------|----------|--------|------|
|
|
2886
|
+
| Tavily | Web Search | `from praisonai_tools import TavilyTool` | [docs](https://docs.praison.ai/docs/tools/external/tavily) |
|
|
2887
|
+
| DuckDuckGo | Web Search | `from praisonai_tools import DuckDuckGoTool` | [docs](https://docs.praison.ai/docs/tools/external/duckduckgo) |
|
|
2888
|
+
| Exa | Web Search | `from praisonai_tools import ExaTool` | [docs](https://docs.praison.ai/docs/tools/external/exa) |
|
|
2889
|
+
| Serper | Web Search | `from praisonai_tools import SerperTool` | [docs](https://docs.praison.ai/docs/tools/external/serper) |
|
|
2890
|
+
| Jina | Web Reader | `from praisonai_tools import JinaTool` | [docs](https://docs.praison.ai/docs/tools/external/jina) |
|
|
2891
|
+
| Firecrawl | Web Scraping | `from praisonai_tools import FirecrawlTool` | [docs](https://docs.praison.ai/docs/tools/external/firecrawl) |
|
|
2892
|
+
| Crawl4AI | Web Scraping | `from praisonai_tools import Crawl4AITool` | [docs](https://docs.praison.ai/docs/tools/external/crawl4ai) |
|
|
2893
|
+
| Wikipedia | Knowledge | `from praisonai_tools import WikipediaTool` | [docs](https://docs.praison.ai/docs/tools/external/wikipedia) |
|
|
2894
|
+
| ArXiv | Research | `from praisonai_tools import ArxivTool` | [docs](https://docs.praison.ai/docs/tools/external/arxiv) |
|
|
2895
|
+
| HackerNews | News | `from praisonai_tools import HackerNewsTool` | [docs](https://docs.praison.ai/docs/tools/external/hackernews) |
|
|
2896
|
+
| YouTube | Media | `from praisonai_tools import YouTubeTool` | [docs](https://docs.praison.ai/docs/tools/external/youtube) |
|
|
2897
|
+
| Weather | Data | `from praisonai_tools import WeatherTool` | [docs](https://docs.praison.ai/docs/tools/external/weather) |
|
|
2898
|
+
| PostgreSQL | Database | `from praisonai_tools import PostgresTool` | [docs](https://docs.praison.ai/docs/tools/external/postgres) |
|
|
2899
|
+
| MySQL | Database | `from praisonai_tools import MySQLTool` | [docs](https://docs.praison.ai/docs/tools/external/mysql) |
|
|
2900
|
+
| SQLite | Database | `from praisonai_tools import SQLiteTool` | [docs](https://docs.praison.ai/docs/tools/external/sqlite) |
|
|
2901
|
+
| MongoDB | Database | `from praisonai_tools import MongoDBTool` | [docs](https://docs.praison.ai/docs/tools/external/mongodb) |
|
|
2902
|
+
| Redis | Database | `from praisonai_tools import RedisTool` | [docs](https://docs.praison.ai/docs/tools/external/redis) |
|
|
2903
|
+
| Qdrant | Vector DB | `from praisonai_tools import QdrantTool` | [docs](https://docs.praison.ai/docs/tools/external/qdrant) |
|
|
2904
|
+
| GitHub | DevOps | `from praisonai_tools import GitHubTool` | [docs](https://docs.praison.ai/docs/tools/external/github) |
|
|
2905
|
+
| Slack | Communication | `from praisonai_tools import SlackTool` | [docs](https://docs.praison.ai/docs/tools/external/slack) |
|
|
2906
|
+
| Discord | Communication | `from praisonai_tools import DiscordTool` | [docs](https://docs.praison.ai/docs/tools/external/discord) |
|
|
2907
|
+
| Telegram | Communication | `from praisonai_tools import TelegramTool` | [docs](https://docs.praison.ai/docs/tools/external/telegram) |
|
|
2908
|
+
| Email | Communication | `from praisonai_tools import EmailTool` | [docs](https://docs.praison.ai/docs/tools/external/email) |
|
|
2909
|
+
| Notion | Productivity | `from praisonai_tools import NotionTool` | [docs](https://docs.praison.ai/docs/tools/external/notion) |
|
|
2910
|
+
| File | File System | `from praisonai_tools import FileTool` | [docs](https://docs.praison.ai/docs/tools/external/file) |
|
|
2911
|
+
| Shell | System | `from praisonai_tools import ShellTool` | [docs](https://docs.praison.ai/docs/tools/external/shell) |
|
|
2912
|
+
| Python | Code | `from praisonai_tools import PythonTool` | [docs](https://docs.praison.ai/docs/tools/external/python) |
|
|
2913
|
+
| JSON | Data | `from praisonai_tools import JSONTool` | [docs](https://docs.praison.ai/docs/tools/external/json) |
|
|
2914
|
+
| CSV | Data | `from praisonai_tools import CSVTool` | [docs](https://docs.praison.ai/docs/tools/external/csv) |
|
|
2915
|
+
| Calculator | Math | `from praisonai_tools import CalculatorTool` | [docs](https://docs.praison.ai/docs/tools/external/calculator) |
|
|
2916
|
+
|
|
2917
|
+
> See [full tools documentation](https://docs.praison.ai/docs/tools/tools) for all 100+ available tools.
|
|
2918
|
+
|
|
2919
|
+
---
|
|
2920
|
+
|
|
2581
2921
|
## 🎓 Video Tutorials
|
|
2582
2922
|
|
|
2583
2923
|
Learn PraisonAI through our comprehensive video series:
|