praisonAI 2.5.2__tar.gz → 2.5.4__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 (199) hide show
  1. {praisonai-2.5.2 → praisonai-2.5.4}/PKG-INFO +2 -2
  2. {praisonai-2.5.2 → praisonai-2.5.4}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-2.5.2 → praisonai-2.5.4}/PraisonAI.egg-info/requires.txt +1 -1
  4. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/adapters/rerankers.py +15 -15
  5. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/adapters/vector_stores.py +11 -1
  6. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/chat/__init__.py +4 -12
  7. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/knowledge.py +147 -1
  8. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/deploy.py +1 -1
  9. praisonai-2.5.4/praisonai/version.py +1 -0
  10. {praisonai-2.5.2 → praisonai-2.5.4}/pyproject.toml +1 -1
  11. praisonai-2.5.2/praisonai/version.py +0 -1
  12. {praisonai-2.5.2 → praisonai-2.5.4}/PraisonAI.egg-info/SOURCES.txt +0 -0
  13. {praisonai-2.5.2 → praisonai-2.5.4}/PraisonAI.egg-info/dependency_links.txt +0 -0
  14. {praisonai-2.5.2 → praisonai-2.5.4}/PraisonAI.egg-info/entry_points.txt +0 -0
  15. {praisonai-2.5.2 → praisonai-2.5.4}/PraisonAI.egg-info/top_level.txt +0 -0
  16. {praisonai-2.5.2 → praisonai-2.5.4}/README.md +0 -0
  17. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/__init__.py +0 -0
  18. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/__main__.py +0 -0
  19. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/adapters/__init__.py +0 -0
  20. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/adapters/readers.py +0 -0
  21. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/adapters/retrievers.py +0 -0
  22. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/agent_scheduler.py +0 -0
  23. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/agents_generator.py +0 -0
  24. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/api/call.py +0 -0
  25. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/auto.py +0 -0
  26. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/chainlit_ui.py +0 -0
  27. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/chat/app.py +0 -0
  28. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/__init__.py +0 -0
  29. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/__init__.py +0 -0
  30. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/agent_scheduler.py +0 -0
  31. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/agents.py +0 -0
  32. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/at_mentions.py +0 -0
  33. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/auto_memory.py +0 -0
  34. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/autonomy_mode.py +0 -0
  35. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/background.py +0 -0
  36. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/base.py +0 -0
  37. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/checkpoints.py +0 -0
  38. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/compare.py +0 -0
  39. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/cost_tracker.py +0 -0
  40. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/eval.py +0 -0
  41. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/external_agents.py +0 -0
  42. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/fast_context.py +0 -0
  43. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/flow_display.py +0 -0
  44. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/git_integration.py +0 -0
  45. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/guardrail.py +0 -0
  46. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/handoff.py +0 -0
  47. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/hooks.py +0 -0
  48. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/image.py +0 -0
  49. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/interactive_tui.py +0 -0
  50. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/jobs.py +0 -0
  51. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/mcp.py +0 -0
  52. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/message_queue.py +0 -0
  53. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/metrics.py +0 -0
  54. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/n8n.py +0 -0
  55. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/observability.py +0 -0
  56. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/persistence.py +0 -0
  57. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/profile.py +0 -0
  58. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/profiling.py +0 -0
  59. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/repo_map.py +0 -0
  60. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/router.py +0 -0
  61. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/sandbox_executor.py +0 -0
  62. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/session.py +0 -0
  63. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/skills.py +0 -0
  64. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/slash_commands.py +0 -0
  65. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/telemetry.py +0 -0
  66. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/todo.py +0 -0
  67. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/tools.py +0 -0
  68. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/features/workflow.py +0 -0
  69. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/main.py +0 -0
  70. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/cli/schedule_cli.py +0 -0
  71. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/__init__.py +0 -0
  72. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/agent_tools.py +0 -0
  73. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/diff/__init__.py +0 -0
  74. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/diff/diff_strategy.py +0 -0
  75. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/__init__.py +0 -0
  76. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/apply_diff.py +0 -0
  77. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/execute_command.py +0 -0
  78. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/list_files.py +0 -0
  79. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/read_file.py +0 -0
  80. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/search_replace.py +0 -0
  81. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/tools/write_file.py +0 -0
  82. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/utils/__init__.py +0 -0
  83. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/utils/file_utils.py +0 -0
  84. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/utils/ignore_utils.py +0 -0
  85. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/code/utils/text_utils.py +0 -0
  86. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/db/__init__.py +0 -0
  87. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/db/adapter.py +0 -0
  88. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/inbuilt_tools/__init__.py +0 -0
  89. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  90. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/inc/__init__.py +0 -0
  91. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/inc/config.py +0 -0
  92. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/inc/models.py +0 -0
  93. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/integrations/__init__.py +0 -0
  94. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/integrations/base.py +0 -0
  95. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/integrations/claude_code.py +0 -0
  96. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/integrations/codex_cli.py +0 -0
  97. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/integrations/cursor_cli.py +0 -0
  98. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/integrations/gemini_cli.py +0 -0
  99. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/jobs/__init__.py +0 -0
  100. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/jobs/executor.py +0 -0
  101. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/jobs/models.py +0 -0
  102. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/jobs/router.py +0 -0
  103. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/jobs/server.py +0 -0
  104. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/jobs/store.py +0 -0
  105. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/__init__.py +0 -0
  106. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/config.py +0 -0
  107. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/__init__.py +0 -0
  108. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/async_mysql.py +0 -0
  109. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/async_postgres.py +0 -0
  110. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  111. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/base.py +0 -0
  112. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/json_store.py +0 -0
  113. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/mysql.py +0 -0
  114. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/postgres.py +0 -0
  115. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/singlestore.py +0 -0
  116. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/sqlite.py +0 -0
  117. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/supabase.py +0 -0
  118. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/conversation/surrealdb.py +0 -0
  119. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/factory.py +0 -0
  120. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/hooks/__init__.py +0 -0
  121. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  122. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/__init__.py +0 -0
  123. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/base.py +0 -0
  124. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/cassandra.py +0 -0
  125. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/chroma.py +0 -0
  126. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  127. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  128. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/couchbase.py +0 -0
  129. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/lancedb.py +0 -0
  130. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  131. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  132. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  133. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/milvus.py +0 -0
  134. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  135. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/pgvector.py +0 -0
  136. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/pinecone.py +0 -0
  137. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/qdrant.py +0 -0
  138. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  139. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  140. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  141. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  142. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/knowledge/weaviate.py +0 -0
  143. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/migrations/__init__.py +0 -0
  144. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/migrations/manager.py +0 -0
  145. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/orchestrator.py +0 -0
  146. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/__init__.py +0 -0
  147. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/async_mongodb.py +0 -0
  148. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/base.py +0 -0
  149. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/dynamodb.py +0 -0
  150. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/firestore.py +0 -0
  151. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/gcs.py +0 -0
  152. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/memory.py +0 -0
  153. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/mongodb.py +0 -0
  154. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/redis.py +0 -0
  155. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/state/upstash.py +0 -0
  156. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/tests/__init__.py +0 -0
  157. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/persistence/tests/test_all_backends.py +0 -0
  158. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/profiler.py +0 -0
  159. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler/__init__.py +0 -0
  160. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler/agent_scheduler.py +0 -0
  161. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler/base.py +0 -0
  162. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler/daemon_manager.py +0 -0
  163. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler/state_manager.py +0 -0
  164. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler/yaml_loader.py +0 -0
  165. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/scheduler.py +0 -0
  166. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/setup/__init__.py +0 -0
  167. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/setup/build.py +0 -0
  168. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/setup/post_install.py +0 -0
  169. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/setup/setup_conda_env.py +0 -0
  170. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/setup.py +0 -0
  171. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/test.py +0 -0
  172. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/train.py +0 -0
  173. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/train_vision.py +0 -0
  174. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/agents.py +0 -0
  175. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/callbacks.py +0 -0
  176. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/chat.py +0 -0
  177. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/code.py +0 -0
  178. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/colab.py +0 -0
  179. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/colab_chainlit.py +0 -0
  180. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/components/aicoder.py +0 -0
  181. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/context.py +0 -0
  182. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/database_config.py +0 -0
  183. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/db.py +0 -0
  184. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/realtime.py +0 -0
  185. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/realtimeclient/__init__.py +0 -0
  186. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/realtimeclient/tools.py +0 -0
  187. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/ui/sql_alchemy.py +0 -0
  188. {praisonai-2.5.2 → praisonai-2.5.4}/praisonai/upload_vision.py +0 -0
  189. {praisonai-2.5.2 → praisonai-2.5.4}/setup.cfg +0 -0
  190. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test.py +0 -0
  191. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_agents_playbook.py +0 -0
  192. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_approval_system.py +0 -0
  193. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_basic.py +0 -0
  194. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_cli_features.py +0 -0
  195. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_custom_tools_fix.py +0 -0
  196. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_double_api_fix.py +0 -0
  197. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_n8n_integration.py +0 -0
  198. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_phase2_refactor.py +0 -0
  199. {praisonai-2.5.2 → praisonai-2.5.4}/tests/test_runner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 2.5.2
3
+ Version: 2.5.4
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.3.2
14
+ Requires-Dist: praisonaiagents>=0.3.4
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: instructor>=1.3.3
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 2.5.2
3
+ Version: 2.5.4
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.3.2
14
+ Requires-Dist: praisonaiagents>=0.3.4
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: instructor>=1.3.3
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=0.3.2
4
+ praisonaiagents>=0.3.4
5
5
  python-dotenv>=0.19.0
6
6
  instructor>=1.3.3
7
7
  PyYAML>=6.0
@@ -57,13 +57,10 @@ class LLMReranker:
57
57
  self._client = None
58
58
 
59
59
  def _get_client(self):
60
- """Lazy load OpenAI client."""
61
- if self._client is None:
62
- if self.llm:
63
- return self.llm
64
- import openai
65
- self._client = openai.OpenAI()
66
- return self._client
60
+ """Get LLM client - returns self.llm if provided, otherwise None (use litellm)."""
61
+ if self.llm:
62
+ return self.llm
63
+ return None # Will use litellm directly
67
64
 
68
65
  def rerank(
69
66
  self,
@@ -118,7 +115,7 @@ class LLMReranker:
118
115
  return results
119
116
 
120
117
  def _score_document(self, query: str, document: str) -> float:
121
- """Score a single document's relevance to query."""
118
+ """Score a single document's relevance to query using litellm."""
122
119
  try:
123
120
  client = self._get_client()
124
121
 
@@ -131,18 +128,21 @@ Document: {document[:1000]}
131
128
 
132
129
  Relevance score (0-10):"""
133
130
 
134
- if hasattr(client, 'chat'):
135
- # PraisonAI Agent or similar
131
+ # Check if client has a callable 'chat' method (PraisonAI Agent)
132
+ if client is not None and hasattr(client, 'chat') and callable(getattr(client, 'chat', None)):
133
+ # PraisonAI Agent or similar with callable chat method
136
134
  response = client.chat(prompt)
137
135
  else:
138
- # OpenAI client
139
- response = client.chat.completions.create(
136
+ # Use litellm for unified multi-provider support
137
+ import litellm
138
+
139
+ # litellm handles model-specific quirks automatically
140
+ completion = litellm.completion(
140
141
  model=self.model,
141
142
  messages=[{"role": "user", "content": prompt}],
142
- max_tokens=10,
143
- temperature=0
143
+ max_tokens=10
144
144
  )
145
- response = response.choices[0].message.content
145
+ response = completion.choices[0].message.content
146
146
 
147
147
  # Parse score
148
148
  if response:
@@ -107,7 +107,17 @@ class ChromaVectorStore:
107
107
  ) -> List[str]:
108
108
  """Add vectors to ChromaDB."""
109
109
  ids = ids or [str(uuid_module.uuid4()) for _ in texts]
110
- metadatas = metadatas or [{} for _ in texts]
110
+
111
+ # ChromaDB requires non-empty metadata dicts
112
+ # Ensure each metadata dict has at least one key
113
+ if metadatas is None:
114
+ metadatas = [{"_source": "praisonai"} for _ in texts]
115
+ else:
116
+ # Ensure no empty dicts - add placeholder if empty
117
+ metadatas = [
118
+ m if m else {"_source": "praisonai"}
119
+ for m in metadatas
120
+ ]
111
121
 
112
122
  # Use different collection if namespace specified
113
123
  if namespace and namespace != self.namespace:
@@ -79,24 +79,16 @@ def start_chat_server(
79
79
  _register_agent(a)
80
80
 
81
81
  # Start the chainlit server
82
- import sys
83
82
  from pathlib import Path
84
83
 
85
84
  # Use the built-in app file
86
85
  app_file = Path(__file__).parent / "app.py"
87
86
 
88
- sys.argv = [
89
- "chainlit",
90
- "run",
91
- str(app_file),
92
- "--host", config.host,
93
- "--port", str(config.port),
94
- ]
87
+ # Set environment variables for chainlit
88
+ os.environ["CHAINLIT_HOST"] = config.host
89
+ os.environ["CHAINLIT_PORT"] = str(config.port)
95
90
 
96
- if config.debug:
97
- sys.argv.append("-w")
98
-
99
- run_chainlit()
91
+ run_chainlit(str(app_file))
100
92
 
101
93
 
102
94
  # Global registry for agents
@@ -68,7 +68,7 @@ class KnowledgeHandler(CommandHandler):
68
68
  return "knowledge"
69
69
 
70
70
  def get_actions(self) -> List[str]:
71
- return ["add", "query", "search", "list", "clear", "stats", "info", "help"]
71
+ return ["add", "query", "search", "list", "clear", "stats", "info", "export", "import", "help"]
72
72
 
73
73
  def get_help_text(self) -> str:
74
74
  return """
@@ -78,6 +78,8 @@ Knowledge Commands:
78
78
  praisonai knowledge list - List indexed documents
79
79
  praisonai knowledge clear - Clear knowledge base
80
80
  praisonai knowledge stats - Show knowledge base statistics
81
+ praisonai knowledge export <file.json> - Export knowledge base to JSON file
82
+ praisonai knowledge import <file.json> - Import knowledge base from JSON file
81
83
  praisonai knowledge help - Show this help message
82
84
 
83
85
  Options:
@@ -380,6 +382,150 @@ Examples:
380
382
  """Alias for action_stats."""
381
383
  return self.action_stats(args, **kwargs)
382
384
 
385
+ def action_export(self, args: List[str], **kwargs) -> bool:
386
+ """
387
+ Export knowledge base to JSON file.
388
+
389
+ Exports all documents with their metadata, embeddings, and content
390
+ for backup or migration purposes.
391
+
392
+ Args:
393
+ args: List containing output file path
394
+
395
+ Returns:
396
+ True if successful
397
+ """
398
+ import json
399
+ from datetime import datetime
400
+
401
+ if not args:
402
+ # Default filename with timestamp
403
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
404
+ output_file = os.path.join(self.workspace, f"knowledge_export_{timestamp}.json")
405
+ else:
406
+ output_file = args[0]
407
+ if not os.path.isabs(output_file):
408
+ output_file = os.path.join(self.workspace, output_file)
409
+
410
+ knowledge = self._get_knowledge()
411
+ if not knowledge:
412
+ return False
413
+
414
+ try:
415
+ export_data = {
416
+ "version": "1.0",
417
+ "exported_at": datetime.now().isoformat(),
418
+ "workspace": self.workspace,
419
+ "vector_store": self.vector_store,
420
+ "documents": []
421
+ }
422
+
423
+ # Try to get all documents from knowledge/memory
424
+ if hasattr(knowledge, 'memory') and hasattr(knowledge.memory, 'get_all'):
425
+ all_docs = knowledge.memory.get_all()
426
+ if all_docs:
427
+ for doc in all_docs:
428
+ if isinstance(doc, dict):
429
+ export_data["documents"].append(doc)
430
+ else:
431
+ export_data["documents"].append({
432
+ "content": str(doc),
433
+ "metadata": {}
434
+ })
435
+ elif hasattr(knowledge, 'get_all'):
436
+ all_docs = knowledge.get_all()
437
+ if all_docs:
438
+ for doc in all_docs:
439
+ if isinstance(doc, dict):
440
+ export_data["documents"].append(doc)
441
+ else:
442
+ export_data["documents"].append({
443
+ "content": str(doc),
444
+ "metadata": {}
445
+ })
446
+
447
+ # Ensure output directory exists
448
+ os.makedirs(os.path.dirname(output_file) or ".", exist_ok=True)
449
+
450
+ with open(output_file, 'w', encoding='utf-8') as f:
451
+ json.dump(export_data, f, indent=2, default=str)
452
+
453
+ doc_count = len(export_data["documents"])
454
+ self.print_status(f"✅ Exported {doc_count} documents to {output_file}", "success")
455
+ return True
456
+
457
+ except Exception as e:
458
+ self.print_status(f"Export failed: {e}", "error")
459
+ return False
460
+
461
+ def action_import(self, args: List[str], **kwargs) -> bool:
462
+ """
463
+ Import knowledge base from JSON file.
464
+
465
+ Imports documents from a previously exported JSON file.
466
+
467
+ Args:
468
+ args: List containing input file path
469
+
470
+ Returns:
471
+ True if successful
472
+ """
473
+ import json
474
+
475
+ if not args:
476
+ self.print_status("Usage: praisonai knowledge import <file.json>", "error")
477
+ return False
478
+
479
+ input_file = args[0]
480
+ if not os.path.isabs(input_file):
481
+ input_file = os.path.join(self.workspace, input_file)
482
+
483
+ if not os.path.exists(input_file):
484
+ self.print_status(f"File not found: {input_file}", "error")
485
+ return False
486
+
487
+ knowledge = self._get_knowledge()
488
+ if not knowledge:
489
+ return False
490
+
491
+ try:
492
+ with open(input_file, 'r', encoding='utf-8') as f:
493
+ import_data = json.load(f)
494
+
495
+ # version field reserved for future schema migrations
496
+ _ = import_data.get("version", "unknown")
497
+ documents = import_data.get("documents", [])
498
+
499
+ if not documents:
500
+ self.print_status("No documents found in import file", "warning")
501
+ return True
502
+
503
+ imported_count = 0
504
+ for doc in documents:
505
+ try:
506
+ content = doc.get("content") or doc.get("memory") or doc.get("text", "")
507
+ metadata = doc.get("metadata", {})
508
+
509
+ if content:
510
+ if hasattr(knowledge, 'store'):
511
+ knowledge.store(content, metadata=metadata)
512
+ elif hasattr(knowledge, 'add'):
513
+ knowledge.add(content, metadata=metadata)
514
+ imported_count += 1
515
+ except Exception as e:
516
+ if self.verbose:
517
+ self.print_status(f"Skipped document: {e}", "warning")
518
+
519
+ self.print_status(f"✅ Imported {imported_count} documents from {input_file}", "success")
520
+ return True
521
+
522
+ except json.JSONDecodeError as e:
523
+ self.print_status(f"Invalid JSON file: {e}", "error")
524
+ return False
525
+ except Exception as e:
526
+ self.print_status(f"Import failed: {e}", "error")
527
+ return False
528
+
383
529
  def execute(self, action: str, action_args: List[str], **kwargs) -> Any:
384
530
  """Execute knowledge command action."""
385
531
  return super().execute(action, action_args, **kwargs)
@@ -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.5.2 gunicorn markdown\n")
60
+ file.write("RUN pip install flask praisonai==2.5.4 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.5.4"
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "rich>=13.7",
13
13
  "markdown>=3.5",
14
14
  "pyparsing>=3.0.0",
15
- "praisonaiagents>=0.3.2",
15
+ "praisonaiagents>=0.3.4",
16
16
  "python-dotenv>=0.19.0",
17
17
  "instructor>=1.3.3",
18
18
  "PyYAML>=6.0",
@@ -1 +0,0 @@
1
- __version__ = "2.5.2"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes