PraisonAI 4.7.4__tar.gz → 4.7.5__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 (576) hide show
  1. {praisonai-4.7.4 → praisonai-4.7.5}/PKG-INFO +9 -9
  2. {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/PKG-INFO +9 -9
  3. {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/SOURCES.txt +0 -1
  4. {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/requires.txt +8 -8
  5. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/__init__.py +7 -2
  6. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/agents.schema.json +38 -0
  7. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/schema.py +5 -0
  8. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/validator.py +29 -63
  9. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/db/adapter.py +70 -5
  10. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/autogen_adapter.py +9 -1
  11. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/base.py +22 -28
  12. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/crewai_adapter.py +8 -1
  13. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/praisonai_adapter.py +12 -12
  14. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inc/models.py +73 -0
  15. praisonai-4.7.5/praisonai/integrations/__init__.py +168 -0
  16. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/_cli_loaders.py +3 -13
  17. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/__init__.py +21 -0
  18. praisonai-4.7.5/praisonai/version.py +1 -0
  19. {praisonai-4.7.4 → praisonai-4.7.5}/pyproject.toml +8 -8
  20. praisonai-4.7.4/praisonai/integrations/__init__.py +0 -85
  21. praisonai-4.7.4/praisonai/integrations/_unified_registry.py +0 -211
  22. praisonai-4.7.4/praisonai/version.py +0 -1
  23. {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/dependency_links.txt +0 -0
  24. {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/entry_points.txt +0 -0
  25. {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/top_level.txt +0 -0
  26. {praisonai-4.7.4 → praisonai-4.7.5}/README.md +0 -0
  27. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/__main__.py +0 -0
  28. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_api_auth.py +0 -0
  29. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_approval_spec.py +0 -0
  30. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_async_bridge.py +0 -0
  31. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_bootstrap.py +0 -0
  32. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/__init__.py +0 -0
  33. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/api_md.py +0 -0
  34. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/__init__.py +0 -0
  35. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/docs_extractor.py +0 -0
  36. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/docs_generator.py +0 -0
  37. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/generator.py +0 -0
  38. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  39. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/python_extractor.py +0 -0
  40. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  41. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/rust_extractor.py +0 -0
  42. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  43. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  44. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  45. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_entrypoint.py +0 -0
  46. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_framework_availability.py +0 -0
  47. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_lazy_cache.py +0 -0
  48. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_logging.py +0 -0
  49. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_registry.py +0 -0
  50. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_safe_loader.py +0 -0
  51. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/__init__.py +0 -0
  52. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/config.py +0 -0
  53. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/safe_edit.py +0 -0
  54. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/server.py +0 -0
  55. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/session.py +0 -0
  56. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/__init__.py +0 -0
  57. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/readers.py +0 -0
  58. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/rerankers.py +0 -0
  59. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/retrievers.py +0 -0
  60. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/vector_stores.py +0 -0
  61. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/agent.py +0 -0
  62. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/agent_scheduler.py +0 -0
  63. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/agents_generator.py +0 -0
  64. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/api/agent_invoke.py +0 -0
  65. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/api/call.py +0 -0
  66. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/app/__init__.py +0 -0
  67. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/app/agentos.py +0 -0
  68. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/async_agent_scheduler.py +0 -0
  69. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/audit/__init__.py +0 -0
  70. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/audit/agent_centric.py +0 -0
  71. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/auto.py +0 -0
  72. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/bots/__init__.py +0 -0
  73. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/browser/__init__.py +0 -0
  74. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/__init__.py +0 -0
  75. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/a2a.py +0 -0
  76. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/assistants.py +0 -0
  77. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/audio.py +0 -0
  78. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/batches.py +0 -0
  79. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/completions.py +0 -0
  80. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/container_files.py +0 -0
  81. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/containers.py +0 -0
  82. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/embeddings.py +0 -0
  83. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/files.py +0 -0
  84. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/fine_tuning.py +0 -0
  85. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/guardrails.py +0 -0
  86. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/images.py +0 -0
  87. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/mcp.py +0 -0
  88. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/messages.py +0 -0
  89. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/moderations.py +0 -0
  90. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/ocr.py +0 -0
  91. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/passthrough.py +0 -0
  92. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/rag.py +0 -0
  93. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/realtime.py +0 -0
  94. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/rerank.py +0 -0
  95. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/responses.py +0 -0
  96. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/search.py +0 -0
  97. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/skills.py +0 -0
  98. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/vector_store_files.py +0 -0
  99. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/vector_stores.py +0 -0
  100. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/videos.py +0 -0
  101. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/claw/__init__.py +0 -0
  102. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/__init__.py +0 -0
  103. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/_paths.py +0 -0
  104. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/_shim.py +0 -0
  105. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/_warnings.py +0 -0
  106. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/app.py +0 -0
  107. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/approval_backend.py +0 -0
  108. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/branding.py +0 -0
  109. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/__init__.py +0 -0
  110. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/_profiling.py +0 -0
  111. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/acp.py +0 -0
  112. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/agent.py +0 -0
  113. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/agents.py +0 -0
  114. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/app.py +0 -0
  115. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/attach.py +0 -0
  116. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/audit.py +0 -0
  117. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/auth.py +0 -0
  118. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/batch.py +0 -0
  119. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/benchmark.py +0 -0
  120. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/bot.py +0 -0
  121. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/browser.py +0 -0
  122. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/call.py +0 -0
  123. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/chat.py +0 -0
  124. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/checkpoint.py +0 -0
  125. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/claw.py +0 -0
  126. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/code.py +0 -0
  127. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/command.py +0 -0
  128. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/commit.py +0 -0
  129. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/completion.py +0 -0
  130. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/config.py +0 -0
  131. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/context.py +0 -0
  132. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/daemon.py +0 -0
  133. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/dashboard.py +0 -0
  134. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/debug.py +0 -0
  135. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/deploy.py +0 -0
  136. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/diag.py +0 -0
  137. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/docs.py +0 -0
  138. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/doctor.py +0 -0
  139. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/endpoints.py +0 -0
  140. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/environment.py +0 -0
  141. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/eval.py +0 -0
  142. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/examples.py +0 -0
  143. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/flow.py +0 -0
  144. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/gateway.py +0 -0
  145. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/github.py +0 -0
  146. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/hooks.py +0 -0
  147. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/identity.py +0 -0
  148. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/init.py +0 -0
  149. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/kanban.py +0 -0
  150. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/knowledge.py +0 -0
  151. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/langextract.py +0 -0
  152. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/langfuse.py +0 -0
  153. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/loop.py +0 -0
  154. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/lsp.py +0 -0
  155. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/managed.py +0 -0
  156. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/mcp.py +0 -0
  157. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/memory.py +0 -0
  158. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/mint_link.py +0 -0
  159. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/models.py +0 -0
  160. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/n8n.py +0 -0
  161. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/obs.py +0 -0
  162. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/onboard.py +0 -0
  163. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/package.py +0 -0
  164. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/pairing.py +0 -0
  165. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/paths.py +0 -0
  166. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/permissions.py +0 -0
  167. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/plugins.py +0 -0
  168. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/port.py +0 -0
  169. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/profile.py +0 -0
  170. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/publish.py +0 -0
  171. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/rag.py +0 -0
  172. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/realtime.py +0 -0
  173. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/recipe.py +0 -0
  174. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/registry.py +0 -0
  175. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/replay.py +0 -0
  176. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/research.py +0 -0
  177. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/retrieval.py +0 -0
  178. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/rules.py +0 -0
  179. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/run.py +0 -0
  180. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/sandbox.py +0 -0
  181. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/schedule.py +0 -0
  182. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/serve.py +0 -0
  183. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/session.py +0 -0
  184. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/setup.py +0 -0
  185. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/skills.py +0 -0
  186. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/standardise.py +0 -0
  187. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/templates.py +0 -0
  188. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/test.py +0 -0
  189. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/todo.py +0 -0
  190. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/tools.py +0 -0
  191. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/traces.py +0 -0
  192. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/tracker.py +0 -0
  193. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/train.py +0 -0
  194. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/ui.py +0 -0
  195. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/up.py +0 -0
  196. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/validate.py +0 -0
  197. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/version.py +0 -0
  198. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/workflow.py +0 -0
  199. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/config_loader.py +0 -0
  200. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/configuration/__init__.py +0 -0
  201. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/configuration/config.schema.json +0 -0
  202. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/execution/__init__.py +0 -0
  203. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/fallback_schema.py +0 -0
  204. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/__init__.py +0 -0
  205. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/acp.py +0 -0
  206. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/agent_scheduler.py +0 -0
  207. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/agent_tools.py +0 -0
  208. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/approval.py +0 -0
  209. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/background.py +0 -0
  210. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/bots_cli.py +0 -0
  211. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/deploy.py +0 -0
  212. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/endpoints.py +0 -0
  213. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/eval.py +0 -0
  214. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/gateway.py +0 -0
  215. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/ollama.py +0 -0
  216. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/onboard.py +0 -0
  217. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/persistence.py +0 -0
  218. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/recipe.py +0 -0
  219. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/recipe_optimizer.py +0 -0
  220. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/registry.py +0 -0
  221. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/sandbox_cli.py +0 -0
  222. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/serve.py +0 -0
  223. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/templates.py +0 -0
  224. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/tools.py +0 -0
  225. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/tui/__init__.py +0 -0
  226. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/tui/app.py +0 -0
  227. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/workflow.py +0 -0
  228. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/__init__.py +0 -0
  229. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/async_tui.py +0 -0
  230. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/config.py +0 -0
  231. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/core.py +0 -0
  232. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/events.py +0 -0
  233. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/langfuse_client.py +0 -0
  234. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/__init__.py +0 -0
  235. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/direct_prompt.py +0 -0
  236. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  237. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  238. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  239. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/framework_run.py +0 -0
  240. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  241. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/interactive_legacy.py +0 -0
  242. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
  243. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/workflow_commands.py +0 -0
  244. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/main.py +0 -0
  245. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/output/__init__.py +0 -0
  246. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/schedule_cli.py +0 -0
  247. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/schema_provider.py +0 -0
  248. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/session/__init__.py +0 -0
  249. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/state/__init__.py +0 -0
  250. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/ui/__init__.py +0 -0
  251. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/unified_schema.py +0 -0
  252. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/utils/__init__.py +0 -0
  253. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli_backends/__init__.py +0 -0
  254. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/__init__.py +0 -0
  255. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/agent_tools.py +0 -0
  256. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/diff/__init__.py +0 -0
  257. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/diff/diff_strategy.py +0 -0
  258. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/__init__.py +0 -0
  259. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/apply_diff.py +0 -0
  260. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/execute_command.py +0 -0
  261. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/list_files.py +0 -0
  262. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/read_file.py +0 -0
  263. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/search_replace.py +0 -0
  264. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/write_file.py +0 -0
  265. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/__init__.py +0 -0
  266. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/file_utils.py +0 -0
  267. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/ignore_utils.py +0 -0
  268. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/text_utils.py +0 -0
  269. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/__init__.py +0 -0
  270. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/__init__.py +0 -0
  271. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/_storage_path.py +0 -0
  272. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/artifact_store.py +0 -0
  273. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/config.py +0 -0
  274. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/history_store.py +0 -0
  275. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/queue.py +0 -0
  276. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/setup.py +0 -0
  277. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/terminal_logger.py +0 -0
  278. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/daemon/__init__.py +0 -0
  279. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/db/__init__.py +0 -0
  280. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/deploy/__init__.py +0 -0
  281. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/__init__.py +0 -0
  282. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/a2u_server.py +0 -0
  283. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/discovery.py +0 -0
  284. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/__init__.py +0 -0
  285. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/a2a.py +0 -0
  286. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/a2u.py +0 -0
  287. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/agents_api.py +0 -0
  288. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/base.py +0 -0
  289. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/mcp.py +0 -0
  290. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/openai_compat.py +0 -0
  291. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/recipe.py +0 -0
  292. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  293. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/registry.py +0 -0
  294. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/server.py +0 -0
  295. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/__init__.py +0 -0
  296. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/client.py +0 -0
  297. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  298. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  299. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/components/__init__.py +0 -0
  300. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/converter.py +0 -0
  301. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/helpers.py +0 -0
  302. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/__init__.py +0 -0
  303. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/_config_builder.py +0 -0
  304. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/registry.py +0 -0
  305. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/validators.py +0 -0
  306. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/workflow_framework.py +0 -0
  307. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/gateway/__init__.py +0 -0
  308. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inbuilt_tools/__init__.py +0 -0
  309. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  310. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inc/__init__.py +0 -0
  311. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inc/config.py +0 -0
  312. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/__init__.py +0 -0
  313. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/__init__.py +0 -0
  314. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  315. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/hooks_query.py +0 -0
  316. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  317. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/schedules_runner.py +0 -0
  318. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/usage_bridge.py +0 -0
  319. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/workflows_service.py +0 -0
  320. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/context_files.py +0 -0
  321. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/gateway_host.py +0 -0
  322. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/host_app.py +0 -0
  323. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/pages/__init__.py +0 -0
  324. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/pages/bot_health.py +0 -0
  325. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/pages/workflow_runs.py +0 -0
  326. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/_session_info.py +0 -0
  327. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/_tool_aliases.py +0 -0
  328. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/backend_registry.py +0 -0
  329. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/base.py +0 -0
  330. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/claude_code.py +0 -0
  331. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/codex_cli.py +0 -0
  332. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/__init__.py +0 -0
  333. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/_sync_base.py +0 -0
  334. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/daytona.py +0 -0
  335. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/docker.py +0 -0
  336. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/e2b.py +0 -0
  337. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/flyio.py +0 -0
  338. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/local.py +0 -0
  339. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/modal_compute.py +0 -0
  340. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/tenki.py +0 -0
  341. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute_managed_agent.py +0 -0
  342. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/cursor_cli.py +0 -0
  343. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/db_session_adapter.py +0 -0
  344. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/gemini_cli.py +0 -0
  345. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/hosted_agent.py +0 -0
  346. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/local_agent.py +0 -0
  347. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/managed_agents.py +0 -0
  348. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/managed_local.py +0 -0
  349. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/registry.py +0 -0
  350. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/sandboxed_agent.py +0 -0
  351. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/__init__.py +0 -0
  352. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/executor.py +0 -0
  353. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/models.py +0 -0
  354. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/path_validation.py +0 -0
  355. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/router.py +0 -0
  356. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/server.py +0 -0
  357. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/store.py +0 -0
  358. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/kanban/__init__.py +0 -0
  359. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/__init__.py +0 -0
  360. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/catalogue.py +0 -0
  361. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/config.py +0 -0
  362. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/credentials.py +0 -0
  363. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/env.py +0 -0
  364. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/gateways.py +0 -0
  365. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/registry.py +0 -0
  366. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/mcp_server/__init__.py +0 -0
  367. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/__init__.py +0 -0
  368. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/client.py +0 -0
  369. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/converter.py +0 -0
  370. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/preview.py +0 -0
  371. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/reverse_converter.py +0 -0
  372. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/__init__.py +0 -0
  373. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/hooks.py +0 -0
  374. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/langextract.py +0 -0
  375. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/langfuse.py +0 -0
  376. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/__init__.py +0 -0
  377. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/_valkey_client.py +0 -0
  378. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/config.py +0 -0
  379. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/__init__.py +0 -0
  380. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/_ops.py +0 -0
  381. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/_sql_base.py +0 -0
  382. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  383. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/async_mysql.py +0 -0
  384. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/async_postgres.py +0 -0
  385. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  386. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/base.py +0 -0
  387. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/json_store.py +0 -0
  388. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/mysql.py +0 -0
  389. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/postgres.py +0 -0
  390. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/singlestore.py +0 -0
  391. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/sqlite.py +0 -0
  392. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/supabase.py +0 -0
  393. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/surrealdb.py +0 -0
  394. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  395. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/turso.py +0 -0
  396. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/factory.py +0 -0
  397. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/hooks/__init__.py +0 -0
  398. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  399. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/__init__.py +0 -0
  400. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/base.py +0 -0
  401. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/cassandra.py +0 -0
  402. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/chroma.py +0 -0
  403. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  404. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  405. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/couchbase.py +0 -0
  406. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/lancedb.py +0 -0
  407. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  408. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  409. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  410. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/milvus.py +0 -0
  411. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  412. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/pgvector.py +0 -0
  413. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/pinecone.py +0 -0
  414. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/qdrant.py +0 -0
  415. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  416. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  417. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  418. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  419. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  420. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/weaviate.py +0 -0
  421. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/migrations/__init__.py +0 -0
  422. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/migrations/manager.py +0 -0
  423. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/orchestrator.py +0 -0
  424. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/registry.py +0 -0
  425. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/__init__.py +0 -0
  426. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/async_mongodb.py +0 -0
  427. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/base.py +0 -0
  428. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/dynamodb.py +0 -0
  429. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/firestore.py +0 -0
  430. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/gcs.py +0 -0
  431. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/memory.py +0 -0
  432. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/mongodb.py +0 -0
  433. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/redis.py +0 -0
  434. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/upstash.py +0 -0
  435. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/valkey.py +0 -0
  436. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/profiler.py +0 -0
  437. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/push/__init__.py +0 -0
  438. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/push/client.py +0 -0
  439. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/push/transports.py +0 -0
  440. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/__init__.py +0 -0
  441. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/bridge.py +0 -0
  442. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/core.py +0 -0
  443. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/exceptions.py +0 -0
  444. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/history.py +0 -0
  445. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/models.py +0 -0
  446. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/operations.py +0 -0
  447. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/policy.py +0 -0
  448. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/registry.py +0 -0
  449. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/runtime.py +0 -0
  450. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/security.py +0 -0
  451. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/serve.py +0 -0
  452. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/server.py +0 -0
  453. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/__init__.py +0 -0
  454. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/analyzer.py +0 -0
  455. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/applier.py +0 -0
  456. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/judge.py +0 -0
  457. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/plan.py +0 -0
  458. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/player.py +0 -0
  459. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/reader.py +0 -0
  460. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/storage.py +0 -0
  461. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/writer.py +0 -0
  462. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/runtime/__init__.py +0 -0
  463. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/runtime/__main__.py +0 -0
  464. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/sandbox/__init__.py +0 -0
  465. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/sandbox/_registry.py +0 -0
  466. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/__init__.py +0 -0
  467. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/_base_scheduler.py +0 -0
  468. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/_delivery.py +0 -0
  469. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/_dispatch.py +0 -0
  470. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/agent_scheduler.py +0 -0
  471. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  472. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/base.py +0 -0
  473. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  474. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/condition_gate.py +0 -0
  475. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/daemon_manager.py +0 -0
  476. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/deployment.py +0 -0
  477. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/executor.py +0 -0
  478. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/run_policy.py +0 -0
  479. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/shared.py +0 -0
  480. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/state_manager.py +0 -0
  481. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/suggestion_engine.py +0 -0
  482. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/yaml_loader.py +0 -0
  483. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/audit.py +0 -0
  484. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/injection.py +0 -0
  485. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/protected.py +0 -0
  486. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/__init__.py +0 -0
  487. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/build.py +0 -0
  488. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/post_install.py +0 -0
  489. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/setup_conda_env.py +0 -0
  490. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup.py +0 -0
  491. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/__init__.py +0 -0
  492. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/ai_generator.py +0 -0
  493. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/config.py +0 -0
  494. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/dedupe.py +0 -0
  495. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/discovery.py +0 -0
  496. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/drift.py +0 -0
  497. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/engine.py +0 -0
  498. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/example_verifier.py +0 -0
  499. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/manifest.py +0 -0
  500. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/models.py +0 -0
  501. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/reports.py +0 -0
  502. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/templates.py +0 -0
  503. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/undo_redo.py +0 -0
  504. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/validator.py +0 -0
  505. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/__init__.py +0 -0
  506. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/dynamodb_adapter.py +0 -0
  507. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/mongodb_adapter.py +0 -0
  508. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/postgresql_adapter.py +0 -0
  509. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/redis_adapter.py +0 -0
  510. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/valkey_adapter.py +0 -0
  511. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/__init__.py +0 -0
  512. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/batch_source.py +0 -0
  513. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/cli_docs_source.py +0 -0
  514. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/discovery.py +0 -0
  515. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/docs_source.py +0 -0
  516. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/examples_source.py +0 -0
  517. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/executor.py +0 -0
  518. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/models.py +0 -0
  519. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/report_viewer.py +0 -0
  520. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/reporter.py +0 -0
  521. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/runner.py +0 -0
  522. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/__init__.py +0 -0
  523. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/_tool_sources.py +0 -0
  524. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/cache.py +0 -0
  525. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/dependency_checker.py +0 -0
  526. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/discovery.py +0 -0
  527. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/loader.py +0 -0
  528. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/registry.py +0 -0
  529. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/resolver.py +0 -0
  530. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/security.py +0 -0
  531. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/tool_override.py +0 -0
  532. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/tools_doctor.py +0 -0
  533. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tool_registry.py +0 -0
  534. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tool_resolver.py +0 -0
  535. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/__init__.py +0 -0
  536. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/audio.py +0 -0
  537. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/glob_tool.py +0 -0
  538. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/grep_tool.py +0 -0
  539. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/kanban_tools.py +0 -0
  540. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/multiedit.py +0 -0
  541. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/skill_manage.py +0 -0
  542. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/train/__init__.py +0 -0
  543. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/train.py +0 -0
  544. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/train_vision.py +0 -0
  545. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/_aiui_datastore.py +0 -0
  546. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/_external_agents.py +0 -0
  547. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/context.py +0 -0
  548. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/database_config.py +0 -0
  549. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_agents/__init__.py +0 -0
  550. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_agents/default_app.py +0 -0
  551. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_bot/__init__.py +0 -0
  552. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_bot/default_app.py +0 -0
  553. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_chat/__init__.py +0 -0
  554. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_chat/default_app.py +0 -0
  555. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_dashboard/__init__.py +0 -0
  556. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_dashboard/default_app.py +0 -0
  557. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_realtime/__init__.py +0 -0
  558. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_realtime/default_app.py +0 -0
  559. {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/upload_vision.py +0 -0
  560. {praisonai-4.7.4 → praisonai-4.7.5}/setup.cfg +0 -0
  561. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test.py +0 -0
  562. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_agents_playbook.py +0 -0
  563. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_approval_system.py +0 -0
  564. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_basic.py +0 -0
  565. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_cli_features.py +0 -0
  566. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_custom_tools_fix.py +0 -0
  567. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_double_api_fix.py +0 -0
  568. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_n8n_agent_invoke.py +0 -0
  569. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_n8n_cli_feature.py +0 -0
  570. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_n8n_integration.py +0 -0
  571. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_phase2_refactor.py +0 -0
  572. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_recipe.py +0 -0
  573. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_registry.py +0 -0
  574. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_runner.py +0 -0
  575. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_sandboxed_agent_compatibility.py +0 -0
  576. {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.4
3
+ Version: 4.7.5
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,14 +11,14 @@ 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>=1.7.2
15
- Requires-Dist: praisonai-code>=0.1.1
16
- Requires-Dist: praisonai-bot>=0.1.1
17
- Requires-Dist: praisonai-train>=0.1.1
18
- Requires-Dist: praisonai-browser>=0.1.1
19
- Requires-Dist: praisonai-mcp>=0.1.3
20
- Requires-Dist: praisonai-sandbox>=0.1.1
21
- Requires-Dist: praisonai-deploy>=0.1.1
14
+ Requires-Dist: praisonaiagents>=1.7.3
15
+ Requires-Dist: praisonai-code>=0.1.2
16
+ Requires-Dist: praisonai-bot>=0.1.2
17
+ Requires-Dist: praisonai-train>=0.1.2
18
+ Requires-Dist: praisonai-browser>=0.1.2
19
+ Requires-Dist: praisonai-mcp>=0.1.4
20
+ Requires-Dist: praisonai-sandbox>=0.1.2
21
+ Requires-Dist: praisonai-deploy>=0.1.2
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.4
3
+ Version: 4.7.5
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,14 +11,14 @@ 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>=1.7.2
15
- Requires-Dist: praisonai-code>=0.1.1
16
- Requires-Dist: praisonai-bot>=0.1.1
17
- Requires-Dist: praisonai-train>=0.1.1
18
- Requires-Dist: praisonai-browser>=0.1.1
19
- Requires-Dist: praisonai-mcp>=0.1.3
20
- Requires-Dist: praisonai-sandbox>=0.1.1
21
- Requires-Dist: praisonai-deploy>=0.1.1
14
+ Requires-Dist: praisonaiagents>=1.7.3
15
+ Requires-Dist: praisonai-code>=0.1.2
16
+ Requires-Dist: praisonai-bot>=0.1.2
17
+ Requires-Dist: praisonai-train>=0.1.2
18
+ Requires-Dist: praisonai-browser>=0.1.2
19
+ Requires-Dist: praisonai-mcp>=0.1.4
20
+ Requires-Dist: praisonai-sandbox>=0.1.2
21
+ Requires-Dist: praisonai-deploy>=0.1.2
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -327,7 +327,6 @@ praisonai/integrations/__init__.py
327
327
  praisonai/integrations/_cli_loaders.py
328
328
  praisonai/integrations/_session_info.py
329
329
  praisonai/integrations/_tool_aliases.py
330
- praisonai/integrations/_unified_registry.py
331
330
  praisonai/integrations/backend_registry.py
332
331
  praisonai/integrations/base.py
333
332
  praisonai/integrations/claude_code.py
@@ -1,14 +1,14 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.7.2
5
- praisonai-code>=0.1.1
6
- praisonai-bot>=0.1.1
7
- praisonai-train>=0.1.1
8
- praisonai-browser>=0.1.1
9
- praisonai-mcp>=0.1.3
10
- praisonai-sandbox>=0.1.1
11
- praisonai-deploy>=0.1.1
4
+ praisonaiagents>=1.7.3
5
+ praisonai-code>=0.1.2
6
+ praisonai-bot>=0.1.2
7
+ praisonai-train>=0.1.2
8
+ praisonai-browser>=0.1.2
9
+ praisonai-mcp>=0.1.4
10
+ praisonai-sandbox>=0.1.2
11
+ praisonai-deploy>=0.1.2
12
12
  python-dotenv>=0.19.0
13
13
  litellm<2,>=1.83.14
14
14
  PyYAML>=6.0
@@ -197,8 +197,13 @@ def __getattr__(name):
197
197
  from .integrations.local_agent import LocalAgentConfig
198
198
  return LocalAgentConfig
199
199
  elif name in ('DB', 'PraisonAIDB', 'PraisonDB'):
200
- from .db.adapter import DB
201
- return DB
200
+ # Route through ``praisonai.db`` (not ``db.adapter`` directly) so the
201
+ # deprecation warning defined on the ``praisonai.db`` import path fires
202
+ # consistently. ``db`` classes are deprecated in favour of the ``db(...)``
203
+ # factory; ``from praisonai import DB`` must warn just like
204
+ # ``from praisonai.db import DB``.
205
+ from . import db as _db
206
+ return getattr(_db, name)
202
207
  # Note: n8n is available via direct import: from praisonai.n8n import YAMLToN8nConverter
203
208
  # Lazy loading from main package causes recursion, so use direct import for now
204
209
 
@@ -1199,6 +1199,19 @@
1199
1199
  "default": "sequential",
1200
1200
  "description": "Process type"
1201
1201
  },
1202
+ "type": {
1203
+ "anyOf": [
1204
+ {
1205
+ "type": "string"
1206
+ },
1207
+ {
1208
+ "type": "null"
1209
+ }
1210
+ ],
1211
+ "default": null,
1212
+ "description": "Configuration type discriminator",
1213
+ "title": "Type"
1214
+ },
1202
1215
  "roles": {
1203
1216
  "anyOf": [
1204
1217
  {
@@ -1405,6 +1418,31 @@
1405
1418
  "default": null,
1406
1419
  "description": "Provider configurations",
1407
1420
  "title": "Providers"
1421
+ },
1422
+ "deploy": {
1423
+ "anyOf": [
1424
+ {
1425
+ "additionalProperties": true,
1426
+ "type": "object"
1427
+ },
1428
+ {
1429
+ "type": "null"
1430
+ }
1431
+ ],
1432
+ "default": null,
1433
+ "description": "Deployment configuration",
1434
+ "title": "Deploy"
1435
+ },
1436
+ "dependencies": {
1437
+ "anyOf": [
1438
+ {},
1439
+ {
1440
+ "type": "null"
1441
+ }
1442
+ ],
1443
+ "default": null,
1444
+ "description": "Task dependency declarations",
1445
+ "title": "Dependencies"
1408
1446
  }
1409
1447
  },
1410
1448
  "title": "PraisonAI Agents Configuration",
@@ -374,6 +374,7 @@ class YAMLConfig(BaseModel):
374
374
  description: Optional[str] = Field(default=None, description="Configuration description")
375
375
  framework: Optional[str] = Field(default="praisonai", description="Framework to use")
376
376
  process: Optional[ProcessType] = Field(default=ProcessType.SEQUENTIAL, description="Process type")
377
+ type: Optional[str] = Field(default=None, description="Configuration type discriminator")
377
378
 
378
379
  # Core sections (at least one required)
379
380
  roles: Optional[Dict[str, AgentConfig]] = Field(default=None, description="Agent roles (canonical)")
@@ -397,6 +398,10 @@ class YAMLConfig(BaseModel):
397
398
  llm: Optional[str] = Field(default=None, description="Default LLM")
398
399
  models: Optional[Dict[str, Any]] = Field(default=None, description="Model configurations")
399
400
  providers: Optional[Dict[str, Any]] = Field(default=None, description="Provider configurations")
401
+
402
+ # Deployment / dependency declarations
403
+ deploy: Optional[Dict[str, Any]] = Field(default=None, description="Deployment configuration")
404
+ dependencies: Optional[Any] = Field(default=None, description="Task dependency declarations")
400
405
 
401
406
  @model_validator(mode='after')
402
407
  def validate_config_structure(self):
@@ -7,10 +7,22 @@ from pathlib import Path
7
7
  from typing import Dict, Any, List, Optional
8
8
  from pydantic import ValidationError
9
9
 
10
- from .schema import YAMLConfig, ValidationResult
10
+ from .schema import YAMLConfig, ValidationResult, AgentConfig
11
11
  from ..tool_resolver import ToolResolver
12
12
 
13
13
 
14
+ # Field names are derived from the Pydantic schema so there is a single source
15
+ # of truth. Adding a field to the schema automatically teaches the validator
16
+ # about it — no parallel hand-maintained set to drift out of sync.
17
+ _KNOWN_TOP_LEVEL = frozenset(YAMLConfig.model_fields.keys())
18
+ # Agent-only fields. TaskConfig fields are intentionally NOT unioned in: an
19
+ # agent declaration with a task-only key (``expected_output``, ``output_file``,
20
+ # ``async_execution``, ``context``, ``condition``) is a genuine mistake the
21
+ # runtime ignores, so it must still warn. ``name`` is accepted as an alias the
22
+ # runtime tolerates but the schema doesn't declare.
23
+ _KNOWN_AGENT_FIELDS = frozenset(AgentConfig.model_fields.keys()) | {"name"}
24
+
25
+
14
26
  class ConfigValidator:
15
27
  """Validator for YAML configuration with schema and cross-reference validation."""
16
28
 
@@ -218,44 +230,19 @@ class ConfigValidator:
218
230
 
219
231
  def _is_known_optional_tool(self, tool_name: str) -> bool:
220
232
  """Check if a tool name is a known optional tool.
221
-
233
+
234
+ The single source of truth is ``praisonaiagents.tools.TOOL_MAPPINGS``:
235
+ adding an optional tool upstream teaches the validator about it with no
236
+ wrapper edit. ``resolve()`` returns None for such tools when their
237
+ optional dependencies aren't installed; that's a "needs deps" warning,
238
+ not an "unknown tool" error.
239
+
222
240
  Args:
223
241
  tool_name: Tool name to check
224
-
242
+
225
243
  Returns:
226
244
  True if it's a known optional tool
227
245
  """
228
- # List of known optional tools that require extra dependencies
229
- known_optional = {
230
- # Database tools
231
- 'PostgreSQLTool', 'MySQLTool', 'SQLiteTool', 'MongoDBTool', 'RedisTool',
232
- 'SurrealDBTool', 'CassandraTool', 'ElasticsearchTool',
233
-
234
- # Web/API tools
235
- 'SlackTool', 'DiscordTool', 'TelegramTool', 'EmailTool',
236
- 'TwitterTool', 'LinkedInTool', 'GitHubTool',
237
-
238
- # Cloud tools
239
- 'AWSTool', 'AzureTool', 'GCPTool', 'S3Tool',
240
-
241
- # AI/ML tools
242
- 'HuggingFaceTool', 'OpenAITool', 'AnthropicTool',
243
-
244
- # Data tools
245
- 'PandasTool', 'NumpyTool', 'ScipyTool',
246
-
247
- # Other
248
- 'BrowserTool', 'SeleniumTool', 'PlaywrightTool',
249
- 'KubernetesTool', 'DockerTool', 'TerraformTool',
250
- }
251
-
252
- if tool_name in known_optional:
253
- return True
254
-
255
- # Also treat any tool declared in praisonaiagents' TOOL_MAPPINGS as a
256
- # known tool. resolve() returns None for such tools when their optional
257
- # dependencies aren't installed; that's a "needs deps" warning, not an
258
- # "unknown tool" error.
259
246
  try:
260
247
  from praisonaiagents import tools as agent_tools
261
248
  tool_mappings = getattr(agent_tools, 'TOOL_MAPPINGS', None)
@@ -263,7 +250,7 @@ class ConfigValidator:
263
250
  return True
264
251
  except Exception:
265
252
  pass
266
-
253
+
267
254
  return False
268
255
 
269
256
  def _check_unknown_fields(self, config: Dict[str, Any], file_prefix: str = "") -> List[str]:
@@ -277,46 +264,25 @@ class ConfigValidator:
277
264
  List of warnings about unknown fields
278
265
  """
279
266
  warnings = []
280
-
281
- # Known top-level fields
282
- known_top_level = {
283
- 'name', 'description', 'framework', 'process', 'type',
284
- 'roles', 'agents', 'tasks', 'workflow', 'steps',
285
- 'input', 'topic', 'tools', 'toolsets',
286
- 'config', 'llm', 'models', 'providers',
287
- 'deploy', # Deployment configuration
288
- 'dependencies', # Task dependency declarations
289
- }
290
-
291
- # Known agent/role fields
292
- known_agent_fields = {
293
- 'role', 'goal', 'instructions', 'backstory', 'tools', 'toolsets', 'tasks', 'llm',
294
- 'function_calling_llm', 'allow_delegation', 'max_iter', 'max_rpm',
295
- 'max_execution_time', 'verbose', 'cache', 'system_template',
296
- 'prompt_template', 'response_template', 'tool_timeout', 'tool_retry_policy',
297
- 'planning_tools', 'planning', 'autonomy', 'guardrails', 'streaming', 'stream',
298
- 'approval', 'skills', 'cli_backend', 'runtime', 'reflection', 'handoff',
299
- 'web', 'web_fetch', 'name', # Sometimes used as alias
300
- }
301
-
302
- # Check top-level unknown fields
267
+
268
+ # Check top-level unknown fields (derived from YAMLConfig schema)
303
269
  for field in config:
304
- if field not in known_top_level:
270
+ if field not in _KNOWN_TOP_LEVEL:
305
271
  warnings.append(
306
272
  f"{file_prefix}Unknown top-level field '{field}'. "
307
273
  f"This field will be ignored."
308
274
  )
309
-
310
- # Check agent/role fields
275
+
276
+ # Check agent/role fields (derived from AgentConfig/TaskConfig schema)
311
277
  for section in ['agents', 'roles']:
312
278
  if section in config and isinstance(config[section], dict):
313
279
  for agent_name, agent_config in config[section].items():
314
280
  if isinstance(agent_config, dict):
315
281
  for field in agent_config:
316
- if field not in known_agent_fields:
282
+ if field not in _KNOWN_AGENT_FIELDS:
317
283
  warnings.append(
318
284
  f"{file_prefix}{section}.{agent_name}: Unknown field '{field}'. "
319
285
  f"This field will be ignored."
320
286
  )
321
-
287
+
322
288
  return warnings
@@ -16,10 +16,18 @@ import inspect
16
16
  import time
17
17
  import logging
18
18
  import threading
19
+ import weakref
20
+ import concurrent.futures
19
21
  from typing import Any, Dict, List, Optional
20
22
 
21
23
  logger = logging.getLogger(__name__)
22
24
 
25
+ # Tracks fire-and-forget store writes submitted from a running event loop so a
26
+ # shutting-down worker can flush in-flight persistence before exit. A WeakSet
27
+ # lets completed futures be garbage-collected without manual bookkeeping.
28
+ _BG_WRITES: "weakref.WeakSet[concurrent.futures.Future]" = weakref.WeakSet()
29
+ _BG_WRITES_LOCK = threading.Lock()
30
+
23
31
 
24
32
  class PraisonAIDB:
25
33
  """
@@ -833,16 +841,65 @@ class PraisonAIDB:
833
841
 
834
842
  @staticmethod
835
843
  def _call_store(store, sync_name, async_name, *args, **kwargs):
836
- """Call a store from a sync hook without creating per-call event loops."""
844
+ """Call a store from a sync hook without ever blocking or losing a write.
845
+
846
+ A sync hook can be reached from a plain sync caller *or* from inside a
847
+ running event loop (several async chat paths still route through the
848
+ sync ``_persist_message``). When the resolved store method returns a
849
+ coroutine we must handle both:
850
+
851
+ - No running loop: block on the shared bridge via ``run_sync``.
852
+ - Running loop: submitting-then-blocking would park the loop (the
853
+ pathology ``run_sync_or_offload`` forbids), and the old behaviour
854
+ discarded the coroutine entirely — silently dropping every message,
855
+ reply and tool result. Instead we submit the write to the shared
856
+ bridge as tracked fire-and-forget. Store writes are uuid-keyed and
857
+ idempotent per message, so completing them slightly later is safe by
858
+ construction and strictly better than losing them.
859
+ """
837
860
  fn = PraisonAIDB._store_callable(store, sync_name, async_name)
838
861
  if fn is None:
839
862
  return None
840
863
  result = fn(*args, **kwargs)
841
- if inspect.isawaitable(result):
842
- from .._async_bridge import run_sync_or_offload
864
+ if not inspect.isawaitable(result):
865
+ return result
866
+
867
+ from .._async_bridge import current_bridge, run_sync
868
+
869
+ try:
870
+ asyncio.get_running_loop()
871
+ except RuntimeError:
872
+ return run_sync(result)
873
+
874
+ bridge = current_bridge()
875
+ fut = bridge.submit(result)
876
+ with _BG_WRITES_LOCK:
877
+ _BG_WRITES.add(fut)
878
+
879
+ def _on_done(f, name=sync_name):
880
+ try:
881
+ f.result()
882
+ except Exception:
883
+ logger.warning("Deferred store %s failed", name, exc_info=True)
884
+
885
+ fut.add_done_callback(_on_done)
886
+ return None
887
+
888
+ @staticmethod
889
+ def flush_pending_writes(timeout: Optional[float] = 5.0) -> None:
890
+ """Give in-flight fire-and-forget store writes a chance to complete.
843
891
 
844
- return run_sync_or_offload(result)
845
- return result
892
+ Called from :meth:`close`/:meth:`aclose` so a shutting-down worker does
893
+ not exit mid-write. Best-effort: never raises on a slow/failed write.
894
+ """
895
+ with _BG_WRITES_LOCK:
896
+ pending = [f for f in _BG_WRITES if not f.done()]
897
+ if not pending:
898
+ return
899
+ try:
900
+ concurrent.futures.wait(pending, timeout=timeout)
901
+ except Exception: # pragma: no cover - defensive
902
+ logger.debug("flush_pending_writes wait interrupted", exc_info=True)
846
903
 
847
904
  @staticmethod
848
905
  async def _dispatch_async(store, sync_name, async_name, *args, **kwargs):
@@ -1149,6 +1206,11 @@ class PraisonAIDB:
1149
1206
  loop) so init/close can never race and leave a half-closed adapter that
1150
1207
  reports ``_initialized`` while its stores are shut.
1151
1208
  """
1209
+ # Flush any fire-and-forget writes submitted from a running loop before
1210
+ # tearing stores down, so a shutting-down worker does not drop in-flight
1211
+ # persistence. Runs off the event loop to avoid blocking it.
1212
+ await asyncio.to_thread(self.flush_pending_writes)
1213
+
1152
1214
  if self._ainit_lock is None:
1153
1215
  self._ainit_lock = asyncio.Lock()
1154
1216
 
@@ -1209,6 +1271,9 @@ class PraisonAIDB:
1209
1271
  reused ``with db: ...`` block) triggers a clean re-initialisation via
1210
1272
  ``_init_stores()`` instead of dispatching to a closed store.
1211
1273
  """
1274
+ # Flush fire-and-forget writes submitted from a running loop before
1275
+ # tearing stores down so shutdown does not drop in-flight persistence.
1276
+ self.flush_pending_writes()
1212
1277
  with self._init_lock:
1213
1278
  stores = (
1214
1279
  self._conversation_store,
@@ -11,6 +11,10 @@ from .base import BaseFrameworkAdapter, warn_unsupported_fields
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
13
 
14
+ # Extended YAML fields every AutoGen-family backend consumes. The rest are
15
+ # dropped and surfaced via warn_unsupported_fields.
16
+ _AUTOGEN_SUPPORTED_FIELDS = frozenset({"llm", "function_calling_llm"})
17
+
14
18
 
15
19
  class AutoGenAdapter(BaseFrameworkAdapter):
16
20
  """Adapter for AutoGen v0.2 framework with version resolution."""
@@ -20,6 +24,7 @@ class AutoGenAdapter(BaseFrameworkAdapter):
20
24
  requires_tools_extra = True
21
25
  # AutoGen v0.2 is sync-only; arun offloads run() to a bounded pool.
22
26
  SUPPORTS_ASYNC = False
27
+ SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
23
28
 
24
29
  def is_available(self) -> bool:
25
30
  """Check if AutoGen v0.2 is available for import."""
@@ -203,7 +208,7 @@ class AutoGenAdapter(BaseFrameworkAdapter):
203
208
  # Create agents from the normalized specs
204
209
  for spec in specs:
205
210
  # Surface any extended YAML fields this backend silently drops
206
- warn_unsupported_fields(self.name, spec.extras)
211
+ warn_unsupported_fields(self, spec.extras)
207
212
 
208
213
  # Create AutoGen assistant agent
209
214
  agents[spec.key] = autogen.AssistantAgent(
@@ -288,6 +293,7 @@ class AutoGenV4Adapter(BaseFrameworkAdapter):
288
293
  install_hint = 'pip install "praisonai-frameworks[autogen-v4]"'
289
294
  requires_tools_extra = True
290
295
  implemented: bool = False # explicit marker
296
+ SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
291
297
 
292
298
  def is_available(self) -> bool:
293
299
  """Check if AutoGen v0.4 is available for import."""
@@ -335,6 +341,7 @@ class AG2Adapter(BaseFrameworkAdapter):
335
341
  install_hint = 'pip install "praisonai-frameworks[ag2]"'
336
342
  requires_tools_extra = False
337
343
  implemented: bool = False # explicit marker
344
+ SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
338
345
 
339
346
  def is_available(self) -> bool:
340
347
  """Check if AG2 is available for import."""
@@ -384,6 +391,7 @@ class AutoGenFamilyAdapter(BaseFrameworkAdapter):
384
391
  name = "autogen"
385
392
  install_hint = 'pip install "praisonai-frameworks[autogen]"'
386
393
  is_router = True
394
+ SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
387
395
 
388
396
  def is_available(self) -> bool:
389
397
  """Check if any AutoGen variant is runnable.
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
  import logging
11
11
  import threading
12
12
  from contextlib import contextmanager
13
- from typing import Any, Callable, Dict, List, Optional
13
+ from typing import Any, Callable, ClassVar, Dict, FrozenSet, List, Optional
14
14
 
15
15
  from praisonaiagents.frameworks.base import BaseFrameworkAdapter as _CoreBaseFrameworkAdapter
16
16
  from praisonaiagents.frameworks.protocols import FrameworkAdapterProtocol
@@ -20,51 +20,45 @@ FrameworkAdapter = FrameworkAdapterProtocol
20
20
 
21
21
  logger = logging.getLogger(__name__)
22
22
 
23
- # Extended YAML fields each backend actually consumes. Only ``framework:
24
- # praisonai`` honours the full wrapper feature set (approval, guardrails,
25
- # autonomy, ...); the other backends read a hand-picked subset. Anything a YAML
26
- # declares that the target adapter does not read is silently dropped today, so
27
- # warn the user rather than let a safety-relevant field (e.g. ``approval``) be
28
- # ignored without any diagnostic.
29
- _AUTOGEN_SUPPORTED = {"llm", "function_calling_llm"}
30
- _ADAPTER_SUPPORTED_FIELDS: Dict[str, set] = {
31
- "crewai": {
32
- "allow_delegation", "max_iter", "max_rpm", "max_execution_time",
33
- "verbose", "cache", "system_template", "prompt_template",
34
- "response_template", "llm", "function_calling_llm",
35
- },
36
- "autogen": _AUTOGEN_SUPPORTED,
37
- "autogen_v2": _AUTOGEN_SUPPORTED,
38
- "autogen_v4": _AUTOGEN_SUPPORTED,
39
- "ag2": _AUTOGEN_SUPPORTED,
40
- }
41
-
42
23
  # Structural keys handled by the spec builder itself — never "unsupported".
43
24
  _STRUCTURAL_FIELDS = {"tools", "tasks", "role", "goal", "backstory"}
44
25
 
45
26
 
46
- def warn_unsupported_fields(adapter_name: str, spec_extras: Dict[str, Any]) -> None:
27
+ def warn_unsupported_fields(adapter: Any, spec_extras: Dict[str, Any]) -> None:
47
28
  """Warn once per agent when a backend ignores declared YAML fields.
48
29
 
49
- Non-breaking: pure visibility. ``framework: praisonai`` is treated as
50
- supporting everything, so no warning is emitted there.
30
+ Each adapter declares the extended fields it consumes via the
31
+ ``SUPPORTED_YAML_FIELDS`` class attribute (single source of truth: the
32
+ adapter that reads a field owns the fact that it reads it). An empty set
33
+ means "supports everything" — ``framework: praisonai`` honours the full
34
+ feature set, so no warning is emitted there.
35
+
36
+ Non-breaking: pure visibility. Anything a YAML declares that the target
37
+ adapter does not read is silently dropped otherwise, so warn rather than
38
+ let a safety-relevant field (e.g. ``approval``) be ignored without any
39
+ diagnostic.
51
40
  """
52
- if adapter_name not in _ADAPTER_SUPPORTED_FIELDS:
41
+ supported = getattr(adapter, "SUPPORTED_YAML_FIELDS", frozenset())
42
+ if not supported:
53
43
  return
54
- supported = _ADAPTER_SUPPORTED_FIELDS[adapter_name]
55
- declared = set(spec_extras.keys())
56
- unhandled = declared - supported - _STRUCTURAL_FIELDS
44
+ unhandled = set(spec_extras.keys()) - supported - _STRUCTURAL_FIELDS
57
45
  if unhandled:
58
46
  logger.warning(
59
47
  "framework=%r ignores YAML field(s) %s for agent %r; "
60
48
  "these are only honoured by framework=praisonai.",
61
- adapter_name, sorted(unhandled), spec_extras.get("role"),
49
+ getattr(adapter, "name", "?"), sorted(unhandled), spec_extras.get("role"),
62
50
  )
63
51
 
64
52
 
65
53
  class BaseFrameworkAdapter(_CoreBaseFrameworkAdapter):
66
54
  """Wrapper base adapter with PraisonAIModel LLM resolution for CrewAI etc."""
67
55
 
56
+ # Extended YAML fields this backend actually consumes. The empty default
57
+ # means "supports everything" (the ``praisonai`` backend). Backends that
58
+ # read only a subset override this with the exact set they honour, so
59
+ # ``warn_unsupported_fields`` can surface silently-dropped fields.
60
+ SUPPORTED_YAML_FIELDS: ClassVar[FrozenSet[str]] = frozenset()
61
+
68
62
  # CLI runtime capabilities are opt-in. Adapters that do not implement
69
63
  # these contracts must fail before dispatch instead of silently ignoring
70
64
  # session or structured-stream flags.
@@ -19,6 +19,13 @@ class CrewAIAdapter(BaseFrameworkAdapter):
19
19
  requires_tools_extra = True
20
20
  # CrewAI's kickoff() is sync-only; arun offloads run() to a bounded pool.
21
21
  SUPPORTS_ASYNC = False
22
+ # Extended YAML fields CrewAI actually consumes; the rest are dropped and
23
+ # warned about via warn_unsupported_fields.
24
+ SUPPORTED_YAML_FIELDS = frozenset({
25
+ "allow_delegation", "max_iter", "max_rpm", "max_execution_time",
26
+ "verbose", "cache", "system_template", "prompt_template",
27
+ "response_template", "llm", "function_calling_llm",
28
+ })
22
29
 
23
30
  def is_available(self) -> bool:
24
31
  """Check if CrewAI is available for import."""
@@ -88,7 +95,7 @@ class CrewAIAdapter(BaseFrameworkAdapter):
88
95
  details = spec.extras
89
96
 
90
97
  # Surface any extended YAML fields this backend silently drops
91
- warn_unsupported_fields(self.name, details)
98
+ warn_unsupported_fields(self, details)
92
99
 
93
100
  # Configure LLM using shared resolver
94
101
  llm = self._resolve_llm(details.get('llm'), llm_config)
@@ -124,25 +124,25 @@ class PraisonAIAdapter(BaseFrameworkAdapter):
124
124
  if isinstance(model_config, dict) and 'runtime' in model_config:
125
125
  return model_config['runtime']
126
126
 
127
- # 4. Check provider-scoped runtime
127
+ # 4. Check provider-scoped runtime. Provider inference is data-driven
128
+ # and entry-point-extensible (core SDK), so any declared vendor —
129
+ # groq, deepseek, mistral, cohere, ... — resolves, not just three.
128
130
  if agent_model and 'providers' in config:
129
- # Extract provider from model name
130
- provider = None
131
- if '/' in agent_model:
132
- provider = agent_model.split('/')[0]
133
- elif 'claude' in agent_model.lower():
134
- provider = 'anthropic'
135
- elif 'gpt' in agent_model.lower():
136
- provider = 'openai'
137
- elif 'gemini' in agent_model.lower():
138
- provider = 'google'
139
-
131
+ from praisonaiagents.llm.model_providers import resolve_provider
132
+
133
+ provider = resolve_provider(agent_model)
140
134
  if provider:
141
135
  providers_config = config['providers']
142
136
  if isinstance(providers_config, dict) and provider in providers_config:
143
137
  provider_config = providers_config[provider]
144
138
  if isinstance(provider_config, dict) and 'runtime_default' in provider_config:
145
139
  return provider_config['runtime_default']
140
+ else:
141
+ logger.debug(
142
+ "runtime resolution: no provider registered for model %r; "
143
+ "provider-scoped 'runtime_default' not consulted",
144
+ agent_model,
145
+ )
146
146
 
147
147
  # 5. Check global config
148
148
  global_config = config.get('config', {})