PraisonAI 3.0.0__py3-none-any.whl

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 (393) hide show
  1. praisonai/__init__.py +54 -0
  2. praisonai/__main__.py +15 -0
  3. praisonai/acp/__init__.py +54 -0
  4. praisonai/acp/config.py +159 -0
  5. praisonai/acp/server.py +587 -0
  6. praisonai/acp/session.py +219 -0
  7. praisonai/adapters/__init__.py +50 -0
  8. praisonai/adapters/readers.py +395 -0
  9. praisonai/adapters/rerankers.py +315 -0
  10. praisonai/adapters/retrievers.py +394 -0
  11. praisonai/adapters/vector_stores.py +409 -0
  12. praisonai/agent_scheduler.py +337 -0
  13. praisonai/agents_generator.py +903 -0
  14. praisonai/api/call.py +292 -0
  15. praisonai/auto.py +1197 -0
  16. praisonai/capabilities/__init__.py +275 -0
  17. praisonai/capabilities/a2a.py +140 -0
  18. praisonai/capabilities/assistants.py +283 -0
  19. praisonai/capabilities/audio.py +320 -0
  20. praisonai/capabilities/batches.py +469 -0
  21. praisonai/capabilities/completions.py +336 -0
  22. praisonai/capabilities/container_files.py +155 -0
  23. praisonai/capabilities/containers.py +93 -0
  24. praisonai/capabilities/embeddings.py +158 -0
  25. praisonai/capabilities/files.py +467 -0
  26. praisonai/capabilities/fine_tuning.py +293 -0
  27. praisonai/capabilities/guardrails.py +182 -0
  28. praisonai/capabilities/images.py +330 -0
  29. praisonai/capabilities/mcp.py +190 -0
  30. praisonai/capabilities/messages.py +270 -0
  31. praisonai/capabilities/moderations.py +154 -0
  32. praisonai/capabilities/ocr.py +217 -0
  33. praisonai/capabilities/passthrough.py +204 -0
  34. praisonai/capabilities/rag.py +207 -0
  35. praisonai/capabilities/realtime.py +160 -0
  36. praisonai/capabilities/rerank.py +165 -0
  37. praisonai/capabilities/responses.py +266 -0
  38. praisonai/capabilities/search.py +109 -0
  39. praisonai/capabilities/skills.py +133 -0
  40. praisonai/capabilities/vector_store_files.py +334 -0
  41. praisonai/capabilities/vector_stores.py +304 -0
  42. praisonai/capabilities/videos.py +141 -0
  43. praisonai/chainlit_ui.py +304 -0
  44. praisonai/chat/__init__.py +106 -0
  45. praisonai/chat/app.py +125 -0
  46. praisonai/cli/__init__.py +26 -0
  47. praisonai/cli/app.py +213 -0
  48. praisonai/cli/commands/__init__.py +75 -0
  49. praisonai/cli/commands/acp.py +70 -0
  50. praisonai/cli/commands/completion.py +333 -0
  51. praisonai/cli/commands/config.py +166 -0
  52. praisonai/cli/commands/debug.py +142 -0
  53. praisonai/cli/commands/diag.py +55 -0
  54. praisonai/cli/commands/doctor.py +166 -0
  55. praisonai/cli/commands/environment.py +179 -0
  56. praisonai/cli/commands/lsp.py +112 -0
  57. praisonai/cli/commands/mcp.py +210 -0
  58. praisonai/cli/commands/profile.py +457 -0
  59. praisonai/cli/commands/run.py +228 -0
  60. praisonai/cli/commands/schedule.py +150 -0
  61. praisonai/cli/commands/serve.py +97 -0
  62. praisonai/cli/commands/session.py +212 -0
  63. praisonai/cli/commands/traces.py +145 -0
  64. praisonai/cli/commands/version.py +101 -0
  65. praisonai/cli/configuration/__init__.py +18 -0
  66. praisonai/cli/configuration/loader.py +353 -0
  67. praisonai/cli/configuration/paths.py +114 -0
  68. praisonai/cli/configuration/schema.py +164 -0
  69. praisonai/cli/features/__init__.py +268 -0
  70. praisonai/cli/features/acp.py +236 -0
  71. praisonai/cli/features/action_orchestrator.py +546 -0
  72. praisonai/cli/features/agent_scheduler.py +773 -0
  73. praisonai/cli/features/agent_tools.py +474 -0
  74. praisonai/cli/features/agents.py +375 -0
  75. praisonai/cli/features/at_mentions.py +471 -0
  76. praisonai/cli/features/auto_memory.py +182 -0
  77. praisonai/cli/features/autonomy_mode.py +490 -0
  78. praisonai/cli/features/background.py +356 -0
  79. praisonai/cli/features/base.py +168 -0
  80. praisonai/cli/features/capabilities.py +1326 -0
  81. praisonai/cli/features/checkpoints.py +338 -0
  82. praisonai/cli/features/code_intelligence.py +652 -0
  83. praisonai/cli/features/compaction.py +294 -0
  84. praisonai/cli/features/compare.py +534 -0
  85. praisonai/cli/features/cost_tracker.py +514 -0
  86. praisonai/cli/features/debug.py +810 -0
  87. praisonai/cli/features/deploy.py +517 -0
  88. praisonai/cli/features/diag.py +289 -0
  89. praisonai/cli/features/doctor/__init__.py +63 -0
  90. praisonai/cli/features/doctor/checks/__init__.py +24 -0
  91. praisonai/cli/features/doctor/checks/acp_checks.py +240 -0
  92. praisonai/cli/features/doctor/checks/config_checks.py +366 -0
  93. praisonai/cli/features/doctor/checks/db_checks.py +366 -0
  94. praisonai/cli/features/doctor/checks/env_checks.py +543 -0
  95. praisonai/cli/features/doctor/checks/lsp_checks.py +199 -0
  96. praisonai/cli/features/doctor/checks/mcp_checks.py +349 -0
  97. praisonai/cli/features/doctor/checks/memory_checks.py +268 -0
  98. praisonai/cli/features/doctor/checks/network_checks.py +251 -0
  99. praisonai/cli/features/doctor/checks/obs_checks.py +328 -0
  100. praisonai/cli/features/doctor/checks/performance_checks.py +235 -0
  101. praisonai/cli/features/doctor/checks/permissions_checks.py +259 -0
  102. praisonai/cli/features/doctor/checks/selftest_checks.py +322 -0
  103. praisonai/cli/features/doctor/checks/serve_checks.py +426 -0
  104. praisonai/cli/features/doctor/checks/skills_checks.py +231 -0
  105. praisonai/cli/features/doctor/checks/tools_checks.py +371 -0
  106. praisonai/cli/features/doctor/engine.py +266 -0
  107. praisonai/cli/features/doctor/formatters.py +310 -0
  108. praisonai/cli/features/doctor/handler.py +397 -0
  109. praisonai/cli/features/doctor/models.py +264 -0
  110. praisonai/cli/features/doctor/registry.py +239 -0
  111. praisonai/cli/features/endpoints.py +1019 -0
  112. praisonai/cli/features/eval.py +560 -0
  113. praisonai/cli/features/external_agents.py +231 -0
  114. praisonai/cli/features/fast_context.py +410 -0
  115. praisonai/cli/features/flow_display.py +566 -0
  116. praisonai/cli/features/git_integration.py +651 -0
  117. praisonai/cli/features/guardrail.py +171 -0
  118. praisonai/cli/features/handoff.py +185 -0
  119. praisonai/cli/features/hooks.py +583 -0
  120. praisonai/cli/features/image.py +384 -0
  121. praisonai/cli/features/interactive_runtime.py +585 -0
  122. praisonai/cli/features/interactive_tools.py +380 -0
  123. praisonai/cli/features/interactive_tui.py +603 -0
  124. praisonai/cli/features/jobs.py +632 -0
  125. praisonai/cli/features/knowledge.py +531 -0
  126. praisonai/cli/features/lite.py +244 -0
  127. praisonai/cli/features/lsp_cli.py +225 -0
  128. praisonai/cli/features/mcp.py +169 -0
  129. praisonai/cli/features/message_queue.py +587 -0
  130. praisonai/cli/features/metrics.py +211 -0
  131. praisonai/cli/features/n8n.py +673 -0
  132. praisonai/cli/features/observability.py +293 -0
  133. praisonai/cli/features/ollama.py +361 -0
  134. praisonai/cli/features/output_style.py +273 -0
  135. praisonai/cli/features/package.py +631 -0
  136. praisonai/cli/features/performance.py +308 -0
  137. praisonai/cli/features/persistence.py +636 -0
  138. praisonai/cli/features/profile.py +226 -0
  139. praisonai/cli/features/profiler/__init__.py +81 -0
  140. praisonai/cli/features/profiler/core.py +558 -0
  141. praisonai/cli/features/profiler/optimizations.py +652 -0
  142. praisonai/cli/features/profiler/suite.py +386 -0
  143. praisonai/cli/features/profiling.py +350 -0
  144. praisonai/cli/features/queue/__init__.py +73 -0
  145. praisonai/cli/features/queue/manager.py +395 -0
  146. praisonai/cli/features/queue/models.py +286 -0
  147. praisonai/cli/features/queue/persistence.py +564 -0
  148. praisonai/cli/features/queue/scheduler.py +484 -0
  149. praisonai/cli/features/queue/worker.py +372 -0
  150. praisonai/cli/features/recipe.py +1723 -0
  151. praisonai/cli/features/recipes.py +449 -0
  152. praisonai/cli/features/registry.py +229 -0
  153. praisonai/cli/features/repo_map.py +860 -0
  154. praisonai/cli/features/router.py +466 -0
  155. praisonai/cli/features/sandbox_executor.py +515 -0
  156. praisonai/cli/features/serve.py +829 -0
  157. praisonai/cli/features/session.py +222 -0
  158. praisonai/cli/features/skills.py +856 -0
  159. praisonai/cli/features/slash_commands.py +650 -0
  160. praisonai/cli/features/telemetry.py +179 -0
  161. praisonai/cli/features/templates.py +1384 -0
  162. praisonai/cli/features/thinking.py +305 -0
  163. praisonai/cli/features/todo.py +334 -0
  164. praisonai/cli/features/tools.py +680 -0
  165. praisonai/cli/features/tui/__init__.py +83 -0
  166. praisonai/cli/features/tui/app.py +580 -0
  167. praisonai/cli/features/tui/cli.py +566 -0
  168. praisonai/cli/features/tui/debug.py +511 -0
  169. praisonai/cli/features/tui/events.py +99 -0
  170. praisonai/cli/features/tui/mock_provider.py +328 -0
  171. praisonai/cli/features/tui/orchestrator.py +652 -0
  172. praisonai/cli/features/tui/screens/__init__.py +50 -0
  173. praisonai/cli/features/tui/screens/main.py +245 -0
  174. praisonai/cli/features/tui/screens/queue.py +174 -0
  175. praisonai/cli/features/tui/screens/session.py +124 -0
  176. praisonai/cli/features/tui/screens/settings.py +148 -0
  177. praisonai/cli/features/tui/widgets/__init__.py +56 -0
  178. praisonai/cli/features/tui/widgets/chat.py +261 -0
  179. praisonai/cli/features/tui/widgets/composer.py +224 -0
  180. praisonai/cli/features/tui/widgets/queue_panel.py +200 -0
  181. praisonai/cli/features/tui/widgets/status.py +167 -0
  182. praisonai/cli/features/tui/widgets/tool_panel.py +248 -0
  183. praisonai/cli/features/workflow.py +720 -0
  184. praisonai/cli/legacy.py +236 -0
  185. praisonai/cli/main.py +5559 -0
  186. praisonai/cli/schedule_cli.py +54 -0
  187. praisonai/cli/state/__init__.py +31 -0
  188. praisonai/cli/state/identifiers.py +161 -0
  189. praisonai/cli/state/sessions.py +313 -0
  190. praisonai/code/__init__.py +93 -0
  191. praisonai/code/agent_tools.py +344 -0
  192. praisonai/code/diff/__init__.py +21 -0
  193. praisonai/code/diff/diff_strategy.py +432 -0
  194. praisonai/code/tools/__init__.py +27 -0
  195. praisonai/code/tools/apply_diff.py +221 -0
  196. praisonai/code/tools/execute_command.py +275 -0
  197. praisonai/code/tools/list_files.py +274 -0
  198. praisonai/code/tools/read_file.py +206 -0
  199. praisonai/code/tools/search_replace.py +248 -0
  200. praisonai/code/tools/write_file.py +217 -0
  201. praisonai/code/utils/__init__.py +46 -0
  202. praisonai/code/utils/file_utils.py +307 -0
  203. praisonai/code/utils/ignore_utils.py +308 -0
  204. praisonai/code/utils/text_utils.py +276 -0
  205. praisonai/db/__init__.py +64 -0
  206. praisonai/db/adapter.py +531 -0
  207. praisonai/deploy/__init__.py +62 -0
  208. praisonai/deploy/api.py +231 -0
  209. praisonai/deploy/docker.py +454 -0
  210. praisonai/deploy/doctor.py +367 -0
  211. praisonai/deploy/main.py +327 -0
  212. praisonai/deploy/models.py +179 -0
  213. praisonai/deploy/providers/__init__.py +33 -0
  214. praisonai/deploy/providers/aws.py +331 -0
  215. praisonai/deploy/providers/azure.py +358 -0
  216. praisonai/deploy/providers/base.py +101 -0
  217. praisonai/deploy/providers/gcp.py +314 -0
  218. praisonai/deploy/schema.py +208 -0
  219. praisonai/deploy.py +185 -0
  220. praisonai/endpoints/__init__.py +53 -0
  221. praisonai/endpoints/a2u_server.py +410 -0
  222. praisonai/endpoints/discovery.py +165 -0
  223. praisonai/endpoints/providers/__init__.py +28 -0
  224. praisonai/endpoints/providers/a2a.py +253 -0
  225. praisonai/endpoints/providers/a2u.py +208 -0
  226. praisonai/endpoints/providers/agents_api.py +171 -0
  227. praisonai/endpoints/providers/base.py +231 -0
  228. praisonai/endpoints/providers/mcp.py +263 -0
  229. praisonai/endpoints/providers/recipe.py +206 -0
  230. praisonai/endpoints/providers/tools_mcp.py +150 -0
  231. praisonai/endpoints/registry.py +131 -0
  232. praisonai/endpoints/server.py +161 -0
  233. praisonai/inbuilt_tools/__init__.py +24 -0
  234. praisonai/inbuilt_tools/autogen_tools.py +117 -0
  235. praisonai/inc/__init__.py +2 -0
  236. praisonai/inc/config.py +96 -0
  237. praisonai/inc/models.py +155 -0
  238. praisonai/integrations/__init__.py +56 -0
  239. praisonai/integrations/base.py +303 -0
  240. praisonai/integrations/claude_code.py +270 -0
  241. praisonai/integrations/codex_cli.py +255 -0
  242. praisonai/integrations/cursor_cli.py +195 -0
  243. praisonai/integrations/gemini_cli.py +222 -0
  244. praisonai/jobs/__init__.py +67 -0
  245. praisonai/jobs/executor.py +425 -0
  246. praisonai/jobs/models.py +230 -0
  247. praisonai/jobs/router.py +314 -0
  248. praisonai/jobs/server.py +186 -0
  249. praisonai/jobs/store.py +203 -0
  250. praisonai/llm/__init__.py +66 -0
  251. praisonai/llm/registry.py +382 -0
  252. praisonai/mcp_server/__init__.py +152 -0
  253. praisonai/mcp_server/adapters/__init__.py +74 -0
  254. praisonai/mcp_server/adapters/agents.py +128 -0
  255. praisonai/mcp_server/adapters/capabilities.py +168 -0
  256. praisonai/mcp_server/adapters/cli_tools.py +568 -0
  257. praisonai/mcp_server/adapters/extended_capabilities.py +462 -0
  258. praisonai/mcp_server/adapters/knowledge.py +93 -0
  259. praisonai/mcp_server/adapters/memory.py +104 -0
  260. praisonai/mcp_server/adapters/prompts.py +306 -0
  261. praisonai/mcp_server/adapters/resources.py +124 -0
  262. praisonai/mcp_server/adapters/tools_bridge.py +280 -0
  263. praisonai/mcp_server/auth/__init__.py +48 -0
  264. praisonai/mcp_server/auth/api_key.py +291 -0
  265. praisonai/mcp_server/auth/oauth.py +460 -0
  266. praisonai/mcp_server/auth/oidc.py +289 -0
  267. praisonai/mcp_server/auth/scopes.py +260 -0
  268. praisonai/mcp_server/cli.py +852 -0
  269. praisonai/mcp_server/elicitation.py +445 -0
  270. praisonai/mcp_server/icons.py +302 -0
  271. praisonai/mcp_server/recipe_adapter.py +573 -0
  272. praisonai/mcp_server/recipe_cli.py +824 -0
  273. praisonai/mcp_server/registry.py +703 -0
  274. praisonai/mcp_server/sampling.py +422 -0
  275. praisonai/mcp_server/server.py +490 -0
  276. praisonai/mcp_server/tasks.py +443 -0
  277. praisonai/mcp_server/transports/__init__.py +18 -0
  278. praisonai/mcp_server/transports/http_stream.py +376 -0
  279. praisonai/mcp_server/transports/stdio.py +132 -0
  280. praisonai/persistence/__init__.py +84 -0
  281. praisonai/persistence/config.py +238 -0
  282. praisonai/persistence/conversation/__init__.py +25 -0
  283. praisonai/persistence/conversation/async_mysql.py +427 -0
  284. praisonai/persistence/conversation/async_postgres.py +410 -0
  285. praisonai/persistence/conversation/async_sqlite.py +371 -0
  286. praisonai/persistence/conversation/base.py +151 -0
  287. praisonai/persistence/conversation/json_store.py +250 -0
  288. praisonai/persistence/conversation/mysql.py +387 -0
  289. praisonai/persistence/conversation/postgres.py +401 -0
  290. praisonai/persistence/conversation/singlestore.py +240 -0
  291. praisonai/persistence/conversation/sqlite.py +341 -0
  292. praisonai/persistence/conversation/supabase.py +203 -0
  293. praisonai/persistence/conversation/surrealdb.py +287 -0
  294. praisonai/persistence/factory.py +301 -0
  295. praisonai/persistence/hooks/__init__.py +18 -0
  296. praisonai/persistence/hooks/agent_hooks.py +297 -0
  297. praisonai/persistence/knowledge/__init__.py +26 -0
  298. praisonai/persistence/knowledge/base.py +144 -0
  299. praisonai/persistence/knowledge/cassandra.py +232 -0
  300. praisonai/persistence/knowledge/chroma.py +295 -0
  301. praisonai/persistence/knowledge/clickhouse.py +242 -0
  302. praisonai/persistence/knowledge/cosmosdb_vector.py +438 -0
  303. praisonai/persistence/knowledge/couchbase.py +286 -0
  304. praisonai/persistence/knowledge/lancedb.py +216 -0
  305. praisonai/persistence/knowledge/langchain_adapter.py +291 -0
  306. praisonai/persistence/knowledge/lightrag_adapter.py +212 -0
  307. praisonai/persistence/knowledge/llamaindex_adapter.py +256 -0
  308. praisonai/persistence/knowledge/milvus.py +277 -0
  309. praisonai/persistence/knowledge/mongodb_vector.py +306 -0
  310. praisonai/persistence/knowledge/pgvector.py +335 -0
  311. praisonai/persistence/knowledge/pinecone.py +253 -0
  312. praisonai/persistence/knowledge/qdrant.py +301 -0
  313. praisonai/persistence/knowledge/redis_vector.py +291 -0
  314. praisonai/persistence/knowledge/singlestore_vector.py +299 -0
  315. praisonai/persistence/knowledge/surrealdb_vector.py +309 -0
  316. praisonai/persistence/knowledge/upstash_vector.py +266 -0
  317. praisonai/persistence/knowledge/weaviate.py +223 -0
  318. praisonai/persistence/migrations/__init__.py +10 -0
  319. praisonai/persistence/migrations/manager.py +251 -0
  320. praisonai/persistence/orchestrator.py +406 -0
  321. praisonai/persistence/state/__init__.py +21 -0
  322. praisonai/persistence/state/async_mongodb.py +200 -0
  323. praisonai/persistence/state/base.py +107 -0
  324. praisonai/persistence/state/dynamodb.py +226 -0
  325. praisonai/persistence/state/firestore.py +175 -0
  326. praisonai/persistence/state/gcs.py +155 -0
  327. praisonai/persistence/state/memory.py +245 -0
  328. praisonai/persistence/state/mongodb.py +158 -0
  329. praisonai/persistence/state/redis.py +190 -0
  330. praisonai/persistence/state/upstash.py +144 -0
  331. praisonai/persistence/tests/__init__.py +3 -0
  332. praisonai/persistence/tests/test_all_backends.py +633 -0
  333. praisonai/profiler.py +1214 -0
  334. praisonai/recipe/__init__.py +134 -0
  335. praisonai/recipe/bridge.py +278 -0
  336. praisonai/recipe/core.py +893 -0
  337. praisonai/recipe/exceptions.py +54 -0
  338. praisonai/recipe/history.py +402 -0
  339. praisonai/recipe/models.py +266 -0
  340. praisonai/recipe/operations.py +440 -0
  341. praisonai/recipe/policy.py +422 -0
  342. praisonai/recipe/registry.py +849 -0
  343. praisonai/recipe/runtime.py +214 -0
  344. praisonai/recipe/security.py +711 -0
  345. praisonai/recipe/serve.py +859 -0
  346. praisonai/recipe/server.py +613 -0
  347. praisonai/scheduler/__init__.py +45 -0
  348. praisonai/scheduler/agent_scheduler.py +552 -0
  349. praisonai/scheduler/base.py +124 -0
  350. praisonai/scheduler/daemon_manager.py +225 -0
  351. praisonai/scheduler/state_manager.py +155 -0
  352. praisonai/scheduler/yaml_loader.py +193 -0
  353. praisonai/scheduler.py +194 -0
  354. praisonai/setup/__init__.py +1 -0
  355. praisonai/setup/build.py +21 -0
  356. praisonai/setup/post_install.py +23 -0
  357. praisonai/setup/setup_conda_env.py +25 -0
  358. praisonai/setup.py +16 -0
  359. praisonai/templates/__init__.py +116 -0
  360. praisonai/templates/cache.py +364 -0
  361. praisonai/templates/dependency_checker.py +358 -0
  362. praisonai/templates/discovery.py +391 -0
  363. praisonai/templates/loader.py +564 -0
  364. praisonai/templates/registry.py +511 -0
  365. praisonai/templates/resolver.py +206 -0
  366. praisonai/templates/security.py +327 -0
  367. praisonai/templates/tool_override.py +498 -0
  368. praisonai/templates/tools_doctor.py +256 -0
  369. praisonai/test.py +105 -0
  370. praisonai/train.py +562 -0
  371. praisonai/train_vision.py +306 -0
  372. praisonai/ui/agents.py +824 -0
  373. praisonai/ui/callbacks.py +57 -0
  374. praisonai/ui/chainlit_compat.py +246 -0
  375. praisonai/ui/chat.py +532 -0
  376. praisonai/ui/code.py +717 -0
  377. praisonai/ui/colab.py +474 -0
  378. praisonai/ui/colab_chainlit.py +81 -0
  379. praisonai/ui/components/aicoder.py +284 -0
  380. praisonai/ui/context.py +283 -0
  381. praisonai/ui/database_config.py +56 -0
  382. praisonai/ui/db.py +294 -0
  383. praisonai/ui/realtime.py +488 -0
  384. praisonai/ui/realtimeclient/__init__.py +756 -0
  385. praisonai/ui/realtimeclient/tools.py +242 -0
  386. praisonai/ui/sql_alchemy.py +710 -0
  387. praisonai/upload_vision.py +140 -0
  388. praisonai/version.py +1 -0
  389. praisonai-3.0.0.dist-info/METADATA +3493 -0
  390. praisonai-3.0.0.dist-info/RECORD +393 -0
  391. praisonai-3.0.0.dist-info/WHEEL +5 -0
  392. praisonai-3.0.0.dist-info/entry_points.txt +4 -0
  393. praisonai-3.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,256 @@
1
+ """
2
+ Tools Doctor for PraisonAI.
3
+
4
+ Diagnoses tool availability, checks dependencies, and reports issues.
5
+ Supports both human-readable and JSON output formats.
6
+ """
7
+
8
+ import importlib.util
9
+ import json
10
+ import os
11
+ from pathlib import Path
12
+ from typing import Any, Dict, List, Optional
13
+
14
+
15
+ class ToolsDoctor:
16
+ """
17
+ Diagnoses tool availability and dependencies.
18
+
19
+ Checks:
20
+ - praisonai-tools installation
21
+ - Built-in tools availability
22
+ - Custom tool directories
23
+ - Optional dependency packages
24
+ """
25
+
26
+ # Default custom tool directories
27
+ DEFAULT_TOOL_DIRS = [
28
+ "~/.praison/tools",
29
+ "~/.config/praison/tools",
30
+ ]
31
+
32
+ # Known tools and their optional dependencies
33
+ TOOL_DEPENDENCIES = {
34
+ "youtube_tool": ["pytube", "youtube-transcript-api"],
35
+ "whisper_tool": ["openai-whisper", "torch"],
36
+ "vision_tool": ["pillow", "opencv-python"],
37
+ "tavily_search": ["tavily-python"],
38
+ "arxiv_search": ["arxiv"],
39
+ "wikipedia_search": ["wikipedia"],
40
+ }
41
+
42
+ def __init__(self, custom_dirs: Optional[List[str]] = None):
43
+ """
44
+ Initialize tools doctor.
45
+
46
+ Args:
47
+ custom_dirs: Additional custom tool directories to check
48
+ """
49
+ self._custom_dirs = custom_dirs or []
50
+
51
+ def diagnose(self) -> Dict[str, Any]:
52
+ """
53
+ Run full diagnostics.
54
+
55
+ Returns:
56
+ Dict with diagnostic results
57
+ """
58
+ result = {
59
+ "praisonai_tools_installed": self._check_praisonai_tools(),
60
+ "praisonaiagents_installed": self._check_praisonaiagents(),
61
+ "builtin_tools": self._get_builtin_tools(),
62
+ "praisonai_tools_available": self._get_praisonai_tools_list(),
63
+ "custom_tools_dirs": self._check_custom_dirs(),
64
+ "tool_dependencies": self._check_tool_dependencies(),
65
+ "issues": [],
66
+ }
67
+
68
+ # Collect issues
69
+ if not result["praisonaiagents_installed"]:
70
+ result["issues"].append({
71
+ "severity": "error",
72
+ "message": "praisonaiagents not installed",
73
+ "hint": "pip install praisonaiagents"
74
+ })
75
+
76
+ if not result["praisonai_tools_installed"]:
77
+ result["issues"].append({
78
+ "severity": "warning",
79
+ "message": "praisonai-tools not installed (optional)",
80
+ "hint": "pip install praisonai-tools"
81
+ })
82
+
83
+ # Check for missing dependencies
84
+ for tool, deps in result["tool_dependencies"].items():
85
+ missing = [d for d in deps if not d["available"]]
86
+ if missing:
87
+ result["issues"].append({
88
+ "severity": "info",
89
+ "message": f"Tool '{tool}' has missing optional dependencies",
90
+ "hint": f"pip install {' '.join(d['name'] for d in missing)}"
91
+ })
92
+
93
+ return result
94
+
95
+ def _check_praisonai_tools(self) -> bool:
96
+ """Check if praisonai-tools is installed."""
97
+ spec = importlib.util.find_spec("praisonai_tools")
98
+ return spec is not None
99
+
100
+ def _check_praisonaiagents(self) -> bool:
101
+ """Check if praisonaiagents is installed."""
102
+ spec = importlib.util.find_spec("praisonaiagents")
103
+ return spec is not None
104
+
105
+ def _get_builtin_tools(self) -> List[str]:
106
+ """Get list of built-in tools."""
107
+ tools = []
108
+ try:
109
+ from praisonaiagents.tools import TOOL_MAPPINGS
110
+ tools = list(TOOL_MAPPINGS.keys())
111
+ except ImportError:
112
+ pass
113
+ return tools
114
+
115
+ def _get_praisonai_tools_list(self) -> List[str]:
116
+ """Get list of tools from praisonai-tools package."""
117
+ tools = []
118
+ try:
119
+ import praisonai_tools
120
+ # Get all callable attributes that look like tools
121
+ for name in dir(praisonai_tools):
122
+ if not name.startswith("_"):
123
+ obj = getattr(praisonai_tools, name, None)
124
+ if callable(obj):
125
+ tools.append(name)
126
+ except ImportError:
127
+ pass
128
+ return tools
129
+
130
+ def _check_custom_dirs(self) -> List[Dict[str, Any]]:
131
+ """Check custom tool directories."""
132
+ dirs = []
133
+
134
+ # Check default dirs
135
+ for dir_path in self.DEFAULT_TOOL_DIRS:
136
+ path = Path(dir_path).expanduser()
137
+ tool_count = 0
138
+ if path.exists():
139
+ # Count Python files
140
+ tool_count = len(list(path.glob("*.py")))
141
+
142
+ dirs.append({
143
+ "path": str(path),
144
+ "exists": path.exists(),
145
+ "tool_count": tool_count
146
+ })
147
+
148
+ # Check custom dirs
149
+ for dir_path in self._custom_dirs:
150
+ path = Path(dir_path).expanduser()
151
+ tool_count = 0
152
+ if path.exists():
153
+ tool_count = len(list(path.glob("*.py")))
154
+
155
+ dirs.append({
156
+ "path": str(path),
157
+ "exists": path.exists(),
158
+ "tool_count": tool_count,
159
+ "custom": True
160
+ })
161
+
162
+ return dirs
163
+
164
+ def _check_tool_dependencies(self) -> Dict[str, List[Dict[str, Any]]]:
165
+ """Check dependencies for known tools."""
166
+ result = {}
167
+
168
+ for tool, deps in self.TOOL_DEPENDENCIES.items():
169
+ result[tool] = []
170
+ for dep in deps:
171
+ spec = importlib.util.find_spec(dep.replace("-", "_"))
172
+ result[tool].append({
173
+ "name": dep,
174
+ "available": spec is not None
175
+ })
176
+
177
+ return result
178
+
179
+ def diagnose_json(self) -> str:
180
+ """
181
+ Run diagnostics and return JSON output.
182
+
183
+ Returns:
184
+ JSON string with diagnostic results
185
+ """
186
+ result = self.diagnose()
187
+ return json.dumps(result, indent=2)
188
+
189
+ def diagnose_human(self) -> str:
190
+ """
191
+ Run diagnostics and return human-readable output.
192
+
193
+ Returns:
194
+ Formatted string with diagnostic results
195
+ """
196
+ result = self.diagnose()
197
+ lines = []
198
+
199
+ lines.append("=" * 60)
200
+ lines.append("PraisonAI Tools Doctor")
201
+ lines.append("=" * 60)
202
+ lines.append("")
203
+
204
+ # Core packages
205
+ lines.append("Core Packages:")
206
+ status = "✓" if result["praisonaiagents_installed"] else "✗"
207
+ lines.append(f" {status} praisonaiagents")
208
+ status = "✓" if result["praisonai_tools_installed"] else "✗"
209
+ lines.append(f" {status} praisonai-tools (optional)")
210
+ lines.append("")
211
+
212
+ # Built-in tools
213
+ lines.append(f"Built-in Tools ({len(result['builtin_tools'])}):")
214
+ if result["builtin_tools"]:
215
+ for tool in result["builtin_tools"][:10]:
216
+ lines.append(f" • {tool}")
217
+ if len(result["builtin_tools"]) > 10:
218
+ lines.append(f" ... and {len(result['builtin_tools']) - 10} more")
219
+ else:
220
+ lines.append(" (none found)")
221
+ lines.append("")
222
+
223
+ # praisonai-tools
224
+ if result["praisonai_tools_available"]:
225
+ lines.append(f"praisonai-tools ({len(result['praisonai_tools_available'])}):")
226
+ for tool in result["praisonai_tools_available"][:10]:
227
+ lines.append(f" • {tool}")
228
+ if len(result["praisonai_tools_available"]) > 10:
229
+ lines.append(f" ... and {len(result['praisonai_tools_available']) - 10} more")
230
+ lines.append("")
231
+
232
+ # Custom directories
233
+ lines.append("Custom Tool Directories:")
234
+ for dir_info in result["custom_tools_dirs"]:
235
+ status = "✓" if dir_info["exists"] else "✗"
236
+ count = f" ({dir_info['tool_count']} tools)" if dir_info["exists"] else ""
237
+ custom = " [custom]" if dir_info.get("custom") else ""
238
+ lines.append(f" {status} {dir_info['path']}{count}{custom}")
239
+ lines.append("")
240
+
241
+ # Issues
242
+ if result["issues"]:
243
+ lines.append("Issues Found:")
244
+ for issue in result["issues"]:
245
+ icon = {"error": "❌", "warning": "⚠️", "info": "ℹ️"}.get(issue["severity"], "•")
246
+ lines.append(f" {icon} {issue['message']}")
247
+ if issue.get("hint"):
248
+ lines.append(f" Hint: {issue['hint']}")
249
+ lines.append("")
250
+ else:
251
+ lines.append("✓ No issues found")
252
+ lines.append("")
253
+
254
+ lines.append("=" * 60)
255
+
256
+ return "\n".join(lines)
praisonai/test.py ADDED
@@ -0,0 +1,105 @@
1
+ import yaml
2
+ import os
3
+ from rich import print
4
+ from dotenv import load_dotenv
5
+ from crewai import Agent, Task, Crew
6
+ load_dotenv()
7
+ import autogen
8
+ config_list = [
9
+ {
10
+ 'model': os.environ.get("OPENAI_MODEL_NAME", "gpt-5-nano"),
11
+ 'base_url': os.environ.get("OPENAI_API_BASE", "https://api.openai.com/v1"),
12
+ 'api_key': os.environ.get("OPENAI_API_KEY")
13
+ }
14
+ ]
15
+
16
+ def generate_crew_and_kickoff(agent_file):
17
+ """
18
+ This function generates a crew of agents and kicks off tasks based on the configuration provided in a YAML file.
19
+
20
+ Parameters:
21
+ agent_file (str): The path to the YAML file containing the configuration for the agents and tasks.
22
+
23
+ Returns:
24
+ str: The result of the last task executed by the crew.
25
+ """
26
+
27
+ with open(agent_file, 'r') as f:
28
+ config = yaml.safe_load(f)
29
+
30
+ topic = config['topic']
31
+ framework = config['framework']
32
+
33
+ agents = {}
34
+ tasks = []
35
+ if framework == "autogen":
36
+ # Load the LLM configuration dynamically
37
+ print(config_list)
38
+ llm_config = {"config_list": config_list}
39
+
40
+ for role, details in config['roles'].items():
41
+ agent_name = details['role'].format(topic=topic).replace("{topic}", topic)
42
+ agent_goal = details['goal'].format(topic=topic)
43
+ # Creating an AssistantAgent for each role dynamically
44
+ agents[role] = autogen.AssistantAgent(
45
+ name=agent_name,
46
+ llm_config=llm_config,
47
+ system_message=details['backstory'].format(topic=topic)+". Reply \"TERMINATE\" in the end when everything is done.",
48
+ )
49
+
50
+ # Preparing tasks for initiate_chats
51
+ for task_name, task_details in details.get('tasks', {}).items():
52
+ description_filled = task_details['description'].format(topic=topic)
53
+ expected_output_filled = task_details['expected_output'].format(topic=topic)
54
+
55
+ chat_task = {
56
+ "recipient": agents[role],
57
+ "message": description_filled,
58
+ "summary_method": "last_msg", # Customize as needed
59
+ # Additional fields like carryover can be added based on dependencies
60
+ }
61
+ tasks.append(chat_task)
62
+
63
+ # Assuming the user proxy agent is set up as per your requirements
64
+ user = autogen.UserProxyAgent(
65
+ name="User",
66
+ human_input_mode="NEVER",
67
+ is_termination_msg=lambda x: (x.get("content") or "").rstrip().endswith("TERMINATE"),
68
+ code_execution_config={
69
+ "work_dir": "coding",
70
+ "use_docker": False,
71
+ },
72
+ # additional setup for the user proxy agent
73
+ )
74
+ response = user.initiate_chats(tasks)
75
+ result = "### Output ###\n"+response[-1].summary if hasattr(response[-1], 'summary') else ""
76
+ else:
77
+ for role, details in config['roles'].items():
78
+ role_filled = details['role'].format(topic=topic)
79
+ goal_filled = details['goal'].format(topic=topic)
80
+ backstory_filled = details['backstory'].format(topic=topic)
81
+
82
+ # Assume tools are loaded and handled here as per your requirements
83
+ agent = Agent(role=role_filled, goal=goal_filled, backstory=backstory_filled)
84
+ agents[role] = agent
85
+
86
+ for task_name, task_details in details.get('tasks', {}).items():
87
+ description_filled = task_details['description'].format(topic=topic)
88
+ expected_output_filled = task_details['expected_output'].format(topic=topic)
89
+
90
+ task = Task(description=description_filled, expected_output=expected_output_filled, agent=agent)
91
+ tasks.append(task)
92
+
93
+ crew = Crew(
94
+ agents=list(agents.values()),
95
+ tasks=tasks,
96
+ verbose=2
97
+ )
98
+
99
+ result = crew.kickoff()
100
+ return result
101
+
102
+ if __name__ == "__main__":
103
+ agent_file = "agents.yaml"
104
+ result = generate_crew_and_kickoff(agent_file)
105
+ print(result)