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.
Files changed (167) hide show
  1. {praisonai-2.3.87 → praisonai-2.4.2}/PKG-INFO +350 -10
  2. {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/PKG-INFO +350 -10
  3. {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/SOURCES.txt +42 -0
  4. {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-2.3.87 → praisonai-2.4.2}/README.md +348 -8
  6. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/__init__.py +18 -0
  7. praisonai-2.4.2/praisonai/cli/features/background.py +296 -0
  8. praisonai-2.4.2/praisonai/cli/features/checkpoints.py +338 -0
  9. praisonai-2.4.2/praisonai/cli/features/hooks.py +583 -0
  10. praisonai-2.4.2/praisonai/cli/features/persistence.py +637 -0
  11. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/main.py +6 -0
  12. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/deploy.py +1 -1
  13. praisonai-2.4.2/praisonai/persistence/__init__.py +84 -0
  14. praisonai-2.4.2/praisonai/persistence/config.py +238 -0
  15. praisonai-2.4.2/praisonai/persistence/conversation/__init__.py +25 -0
  16. praisonai-2.4.2/praisonai/persistence/conversation/base.py +151 -0
  17. praisonai-2.4.2/praisonai/persistence/conversation/mysql.py +387 -0
  18. praisonai-2.4.2/praisonai/persistence/conversation/postgres.py +401 -0
  19. praisonai-2.4.2/praisonai/persistence/conversation/singlestore.py +240 -0
  20. praisonai-2.4.2/praisonai/persistence/conversation/sqlite.py +341 -0
  21. praisonai-2.4.2/praisonai/persistence/conversation/supabase.py +203 -0
  22. praisonai-2.4.2/praisonai/persistence/conversation/surrealdb.py +287 -0
  23. praisonai-2.4.2/praisonai/persistence/factory.py +234 -0
  24. praisonai-2.4.2/praisonai/persistence/hooks/__init__.py +18 -0
  25. praisonai-2.4.2/praisonai/persistence/hooks/agent_hooks.py +297 -0
  26. praisonai-2.4.2/praisonai/persistence/knowledge/__init__.py +26 -0
  27. praisonai-2.4.2/praisonai/persistence/knowledge/base.py +144 -0
  28. praisonai-2.4.2/praisonai/persistence/knowledge/cassandra.py +232 -0
  29. praisonai-2.4.2/praisonai/persistence/knowledge/chroma.py +295 -0
  30. praisonai-2.4.2/praisonai/persistence/knowledge/clickhouse.py +242 -0
  31. praisonai-2.4.2/praisonai/persistence/knowledge/lancedb.py +216 -0
  32. praisonai-2.4.2/praisonai/persistence/knowledge/milvus.py +277 -0
  33. praisonai-2.4.2/praisonai/persistence/knowledge/pgvector.py +335 -0
  34. praisonai-2.4.2/praisonai/persistence/knowledge/pinecone.py +253 -0
  35. praisonai-2.4.2/praisonai/persistence/knowledge/qdrant.py +301 -0
  36. praisonai-2.4.2/praisonai/persistence/knowledge/redis_vector.py +291 -0
  37. praisonai-2.4.2/praisonai/persistence/knowledge/weaviate.py +223 -0
  38. praisonai-2.4.2/praisonai/persistence/migrations/__init__.py +10 -0
  39. praisonai-2.4.2/praisonai/persistence/migrations/manager.py +251 -0
  40. praisonai-2.4.2/praisonai/persistence/orchestrator.py +406 -0
  41. praisonai-2.4.2/praisonai/persistence/state/__init__.py +21 -0
  42. praisonai-2.4.2/praisonai/persistence/state/base.py +107 -0
  43. praisonai-2.4.2/praisonai/persistence/state/dynamodb.py +226 -0
  44. praisonai-2.4.2/praisonai/persistence/state/firestore.py +175 -0
  45. praisonai-2.4.2/praisonai/persistence/state/memory.py +245 -0
  46. praisonai-2.4.2/praisonai/persistence/state/mongodb.py +158 -0
  47. praisonai-2.4.2/praisonai/persistence/state/redis.py +190 -0
  48. praisonai-2.4.2/praisonai/persistence/state/upstash.py +144 -0
  49. praisonai-2.4.2/praisonai/persistence/tests/__init__.py +3 -0
  50. praisonai-2.4.2/praisonai/persistence/tests/test_all_backends.py +633 -0
  51. praisonai-2.4.2/praisonai/version.py +1 -0
  52. {praisonai-2.3.87 → praisonai-2.4.2}/pyproject.toml +1 -1
  53. praisonai-2.3.87/praisonai/version.py +0 -1
  54. {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/dependency_links.txt +0 -0
  55. {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/entry_points.txt +0 -0
  56. {praisonai-2.3.87 → praisonai-2.4.2}/PraisonAI.egg-info/top_level.txt +0 -0
  57. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/__init__.py +0 -0
  58. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/__main__.py +0 -0
  59. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/agent_scheduler.py +0 -0
  60. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/agents_generator.py +0 -0
  61. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/api/call.py +0 -0
  62. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/auto.py +0 -0
  63. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/chainlit_ui.py +0 -0
  64. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/__init__.py +0 -0
  65. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/agent_scheduler.py +0 -0
  66. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/agents.py +0 -0
  67. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/at_mentions.py +0 -0
  68. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/auto_memory.py +0 -0
  69. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/autonomy_mode.py +0 -0
  70. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/base.py +0 -0
  71. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/compare.py +0 -0
  72. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/cost_tracker.py +0 -0
  73. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/eval.py +0 -0
  74. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/external_agents.py +0 -0
  75. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/fast_context.py +0 -0
  76. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/flow_display.py +0 -0
  77. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/git_integration.py +0 -0
  78. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/guardrail.py +0 -0
  79. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/handoff.py +0 -0
  80. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/image.py +0 -0
  81. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/interactive_tui.py +0 -0
  82. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/knowledge.py +0 -0
  83. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/mcp.py +0 -0
  84. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/message_queue.py +0 -0
  85. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/metrics.py +0 -0
  86. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/n8n.py +0 -0
  87. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/profile.py +0 -0
  88. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/profiling.py +0 -0
  89. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/repo_map.py +0 -0
  90. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/router.py +0 -0
  91. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/sandbox_executor.py +0 -0
  92. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/session.py +0 -0
  93. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/skills.py +0 -0
  94. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/slash_commands.py +0 -0
  95. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/telemetry.py +0 -0
  96. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/todo.py +0 -0
  97. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/tools.py +0 -0
  98. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/features/workflow.py +0 -0
  99. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/cli/schedule_cli.py +0 -0
  100. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/__init__.py +0 -0
  101. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/agent_tools.py +0 -0
  102. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/diff/__init__.py +0 -0
  103. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/diff/diff_strategy.py +0 -0
  104. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/__init__.py +0 -0
  105. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/apply_diff.py +0 -0
  106. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/execute_command.py +0 -0
  107. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/list_files.py +0 -0
  108. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/read_file.py +0 -0
  109. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/search_replace.py +0 -0
  110. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/tools/write_file.py +0 -0
  111. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/__init__.py +0 -0
  112. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/file_utils.py +0 -0
  113. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/ignore_utils.py +0 -0
  114. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/code/utils/text_utils.py +0 -0
  115. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inbuilt_tools/__init__.py +0 -0
  116. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  117. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inc/__init__.py +0 -0
  118. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inc/config.py +0 -0
  119. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/inc/models.py +0 -0
  120. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/__init__.py +0 -0
  121. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/base.py +0 -0
  122. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/claude_code.py +0 -0
  123. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/codex_cli.py +0 -0
  124. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/cursor_cli.py +0 -0
  125. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/integrations/gemini_cli.py +0 -0
  126. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/profiler.py +0 -0
  127. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/__init__.py +0 -0
  128. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/agent_scheduler.py +0 -0
  129. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/base.py +0 -0
  130. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/daemon_manager.py +0 -0
  131. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/state_manager.py +0 -0
  132. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler/yaml_loader.py +0 -0
  133. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/scheduler.py +0 -0
  134. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/__init__.py +0 -0
  135. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/build.py +0 -0
  136. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/post_install.py +0 -0
  137. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup/setup_conda_env.py +0 -0
  138. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/setup.py +0 -0
  139. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/test.py +0 -0
  140. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/train.py +0 -0
  141. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/train_vision.py +0 -0
  142. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/agents.py +0 -0
  143. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/callbacks.py +0 -0
  144. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/chat.py +0 -0
  145. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/code.py +0 -0
  146. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/colab.py +0 -0
  147. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/colab_chainlit.py +0 -0
  148. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/components/aicoder.py +0 -0
  149. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/context.py +0 -0
  150. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/database_config.py +0 -0
  151. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/db.py +0 -0
  152. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/realtime.py +0 -0
  153. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/realtimeclient/__init__.py +0 -0
  154. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/realtimeclient/tools.py +0 -0
  155. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/ui/sql_alchemy.py +0 -0
  156. {praisonai-2.3.87 → praisonai-2.4.2}/praisonai/upload_vision.py +0 -0
  157. {praisonai-2.3.87 → praisonai-2.4.2}/setup.cfg +0 -0
  158. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test.py +0 -0
  159. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_agents_playbook.py +0 -0
  160. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_approval_system.py +0 -0
  161. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_basic.py +0 -0
  162. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_cli_features.py +0 -0
  163. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_custom_tools_fix.py +0 -0
  164. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_double_api_fix.py +0 -0
  165. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_n8n_integration.py +0 -0
  166. {praisonai-2.3.87 → praisonai-2.4.2}/tests/test_phase2_refactor.py +0 -0
  167. {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.87
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.27
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
- Configure in `.praison/hooks.json`:
969
+ Intercept and modify agent behavior at various lifecycle points:
964
970
 
965
971
  ```python
966
- from praisonaiagents.memory import HooksManager
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
- hooks = HooksManager()
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
- # Register Python hooks
971
- hooks.register("pre_write_code", lambda ctx: print(f"Writing {ctx['file']}"))
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
- result = hooks.execute("pre_write_code", {"file": "main.py"})
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
- ### 10. Field Names Reference (A-I-G-S)
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
- ### 11. Extended agents.yaml with Workflow Patterns
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: