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,330 @@
1
+ """
2
+ Images Capabilities Module
3
+
4
+ Provides image generation and editing functionality via LiteLLM.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Union, List, Any, Dict
9
+
10
+
11
+ @dataclass
12
+ class ImageResult:
13
+ """Result from image generation or editing."""
14
+ url: Optional[str] = None
15
+ b64_json: Optional[str] = None
16
+ revised_prompt: Optional[str] = None
17
+ model: Optional[str] = None
18
+ metadata: Dict[str, Any] = field(default_factory=dict)
19
+
20
+ def save(self, path: str) -> str:
21
+ """Save image to file (from base64 or download from URL)."""
22
+ if self.b64_json:
23
+ import base64
24
+ with open(path, 'wb') as f:
25
+ f.write(base64.b64decode(self.b64_json))
26
+ elif self.url:
27
+ import urllib.request
28
+ urllib.request.urlretrieve(self.url, path)
29
+ else:
30
+ raise ValueError("No image data available")
31
+ return path
32
+
33
+
34
+ def image_generate(
35
+ prompt: str,
36
+ model: str = "dall-e-3",
37
+ n: int = 1,
38
+ size: str = "1024x1024",
39
+ quality: str = "standard",
40
+ style: Optional[str] = None,
41
+ response_format: str = "url",
42
+ timeout: float = 600.0,
43
+ api_key: Optional[str] = None,
44
+ api_base: Optional[str] = None,
45
+ metadata: Optional[Dict[str, Any]] = None,
46
+ **kwargs
47
+ ) -> List[ImageResult]:
48
+ """
49
+ Generate images from a text prompt using LiteLLM.
50
+
51
+ Args:
52
+ prompt: Text description of the image to generate
53
+ model: Model name (e.g., "dall-e-3", "dall-e-2", "stability/...")
54
+ n: Number of images to generate
55
+ size: Image size (e.g., "1024x1024", "1792x1024", "1024x1792")
56
+ quality: Image quality ("standard" or "hd")
57
+ style: Image style ("vivid" or "natural")
58
+ response_format: "url" or "b64_json"
59
+ timeout: Request timeout in seconds
60
+ api_key: Optional API key override
61
+ api_base: Optional API base URL override
62
+ metadata: Optional metadata for tracing
63
+
64
+ Returns:
65
+ List of ImageResult objects
66
+
67
+ Example:
68
+ >>> results = image_generate("A sunset over mountains")
69
+ >>> results[0].save("sunset.png")
70
+ """
71
+ import litellm
72
+
73
+ call_kwargs = {
74
+ 'model': model,
75
+ 'prompt': prompt,
76
+ 'n': n,
77
+ 'size': size,
78
+ 'response_format': response_format,
79
+ 'timeout': timeout,
80
+ }
81
+
82
+ # Only add quality/style for dall-e-3 (not supported by dall-e-2)
83
+ if 'dall-e-3' in model.lower():
84
+ call_kwargs['quality'] = quality
85
+ if style:
86
+ call_kwargs['style'] = style
87
+ if api_key:
88
+ call_kwargs['api_key'] = api_key
89
+ if api_base:
90
+ call_kwargs['api_base'] = api_base
91
+
92
+ call_kwargs.update(kwargs)
93
+
94
+ if metadata:
95
+ call_kwargs['metadata'] = metadata
96
+
97
+ response = litellm.image_generation(**call_kwargs)
98
+
99
+ results = []
100
+ if hasattr(response, 'data'):
101
+ for item in response.data:
102
+ results.append(ImageResult(
103
+ url=getattr(item, 'url', None),
104
+ b64_json=getattr(item, 'b64_json', None),
105
+ revised_prompt=getattr(item, 'revised_prompt', None),
106
+ model=model,
107
+ metadata=metadata or {},
108
+ ))
109
+
110
+ return results
111
+
112
+
113
+ async def aimage_generate(
114
+ prompt: str,
115
+ model: str = "dall-e-3",
116
+ n: int = 1,
117
+ size: str = "1024x1024",
118
+ quality: str = "standard",
119
+ style: Optional[str] = None,
120
+ response_format: str = "url",
121
+ timeout: float = 600.0,
122
+ api_key: Optional[str] = None,
123
+ api_base: Optional[str] = None,
124
+ metadata: Optional[Dict[str, Any]] = None,
125
+ **kwargs
126
+ ) -> List[ImageResult]:
127
+ """
128
+ Async: Generate images from a text prompt using LiteLLM.
129
+
130
+ See image_generate() for full documentation.
131
+ """
132
+ import litellm
133
+
134
+ call_kwargs = {
135
+ 'model': model,
136
+ 'prompt': prompt,
137
+ 'n': n,
138
+ 'size': size,
139
+ 'response_format': response_format,
140
+ 'timeout': timeout,
141
+ }
142
+
143
+ # Only add quality/style for dall-e-3 (not supported by dall-e-2)
144
+ if 'dall-e-3' in model.lower():
145
+ call_kwargs['quality'] = quality
146
+ if style:
147
+ call_kwargs['style'] = style
148
+ if api_key:
149
+ call_kwargs['api_key'] = api_key
150
+ if api_base:
151
+ call_kwargs['api_base'] = api_base
152
+
153
+ call_kwargs.update(kwargs)
154
+
155
+ if metadata:
156
+ call_kwargs['metadata'] = metadata
157
+
158
+ response = await litellm.aimage_generation(**call_kwargs)
159
+
160
+ results = []
161
+ if hasattr(response, 'data'):
162
+ for item in response.data:
163
+ results.append(ImageResult(
164
+ url=getattr(item, 'url', None),
165
+ b64_json=getattr(item, 'b64_json', None),
166
+ revised_prompt=getattr(item, 'revised_prompt', None),
167
+ model=model,
168
+ metadata=metadata or {},
169
+ ))
170
+
171
+ return results
172
+
173
+
174
+ def image_edit(
175
+ image: Union[str, bytes],
176
+ prompt: str,
177
+ model: str = "dall-e-2",
178
+ mask: Optional[Union[str, bytes]] = None,
179
+ n: int = 1,
180
+ size: str = "1024x1024",
181
+ response_format: str = "url",
182
+ timeout: float = 600.0,
183
+ api_key: Optional[str] = None,
184
+ api_base: Optional[str] = None,
185
+ metadata: Optional[Dict[str, Any]] = None,
186
+ **kwargs
187
+ ) -> List[ImageResult]:
188
+ """
189
+ Edit an image using a text prompt.
190
+
191
+ Args:
192
+ image: Path to image file or image bytes
193
+ prompt: Text description of the edit
194
+ model: Model name
195
+ mask: Optional mask image (transparent areas will be edited)
196
+ n: Number of images to generate
197
+ size: Output image size
198
+ response_format: "url" or "b64_json"
199
+ timeout: Request timeout in seconds
200
+ api_key: Optional API key override
201
+ api_base: Optional API base URL override
202
+ metadata: Optional metadata for tracing
203
+
204
+ Returns:
205
+ List of ImageResult objects
206
+ """
207
+ import litellm
208
+
209
+ # Handle file paths
210
+ image_file = image
211
+ if isinstance(image, str):
212
+ image_file = open(image, 'rb')
213
+
214
+ mask_file = mask
215
+ if mask and isinstance(mask, str):
216
+ mask_file = open(mask, 'rb')
217
+
218
+ try:
219
+ call_kwargs = {
220
+ 'model': model,
221
+ 'image': image_file,
222
+ 'prompt': prompt,
223
+ 'n': n,
224
+ 'size': size,
225
+ 'response_format': response_format,
226
+ 'timeout': timeout,
227
+ }
228
+
229
+ if mask_file:
230
+ call_kwargs['mask'] = mask_file
231
+ if api_key:
232
+ call_kwargs['api_key'] = api_key
233
+ if api_base:
234
+ call_kwargs['api_base'] = api_base
235
+
236
+ call_kwargs.update(kwargs)
237
+
238
+ if metadata:
239
+ call_kwargs['metadata'] = metadata
240
+
241
+ response = litellm.image_edit(**call_kwargs)
242
+
243
+ results = []
244
+ if hasattr(response, 'data'):
245
+ for item in response.data:
246
+ results.append(ImageResult(
247
+ url=getattr(item, 'url', None),
248
+ b64_json=getattr(item, 'b64_json', None),
249
+ model=model,
250
+ metadata=metadata or {},
251
+ ))
252
+
253
+ return results
254
+ finally:
255
+ if isinstance(image, str) and hasattr(image_file, 'close'):
256
+ image_file.close()
257
+ if mask and isinstance(mask, str) and hasattr(mask_file, 'close'):
258
+ mask_file.close()
259
+
260
+
261
+ async def aimage_edit(
262
+ image: Union[str, bytes],
263
+ prompt: str,
264
+ model: str = "dall-e-2",
265
+ mask: Optional[Union[str, bytes]] = None,
266
+ n: int = 1,
267
+ size: str = "1024x1024",
268
+ response_format: str = "url",
269
+ timeout: float = 600.0,
270
+ api_key: Optional[str] = None,
271
+ api_base: Optional[str] = None,
272
+ metadata: Optional[Dict[str, Any]] = None,
273
+ **kwargs
274
+ ) -> List[ImageResult]:
275
+ """
276
+ Async: Edit an image using a text prompt.
277
+
278
+ See image_edit() for full documentation.
279
+ """
280
+ import litellm
281
+
282
+ image_file = image
283
+ if isinstance(image, str):
284
+ image_file = open(image, 'rb')
285
+
286
+ mask_file = mask
287
+ if mask and isinstance(mask, str):
288
+ mask_file = open(mask, 'rb')
289
+
290
+ try:
291
+ call_kwargs = {
292
+ 'model': model,
293
+ 'image': image_file,
294
+ 'prompt': prompt,
295
+ 'n': n,
296
+ 'size': size,
297
+ 'response_format': response_format,
298
+ 'timeout': timeout,
299
+ }
300
+
301
+ if mask_file:
302
+ call_kwargs['mask'] = mask_file
303
+ if api_key:
304
+ call_kwargs['api_key'] = api_key
305
+ if api_base:
306
+ call_kwargs['api_base'] = api_base
307
+
308
+ call_kwargs.update(kwargs)
309
+
310
+ if metadata:
311
+ call_kwargs['metadata'] = metadata
312
+
313
+ response = await litellm.aimage_edit(**call_kwargs)
314
+
315
+ results = []
316
+ if hasattr(response, 'data'):
317
+ for item in response.data:
318
+ results.append(ImageResult(
319
+ url=getattr(item, 'url', None),
320
+ b64_json=getattr(item, 'b64_json', None),
321
+ model=model,
322
+ metadata=metadata or {},
323
+ ))
324
+
325
+ return results
326
+ finally:
327
+ if isinstance(image, str) and hasattr(image_file, 'close'):
328
+ image_file.close()
329
+ if mask and isinstance(mask, str) and hasattr(mask_file, 'close'):
330
+ mask_file.close()
@@ -0,0 +1,190 @@
1
+ """
2
+ MCP (Model Context Protocol) Capabilities Module
3
+
4
+ Provides MCP server interaction functionality.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Any, Dict, List
9
+
10
+
11
+ @dataclass
12
+ class MCPResult:
13
+ """Result from MCP operations."""
14
+ tools: Optional[List[Dict[str, Any]]] = None
15
+ resources: Optional[List[Dict[str, Any]]] = None
16
+ prompts: Optional[List[Dict[str, Any]]] = None
17
+ server_name: Optional[str] = None
18
+ metadata: Dict[str, Any] = field(default_factory=dict)
19
+
20
+
21
+ @dataclass
22
+ class MCPToolCallResult:
23
+ """Result from MCP tool call."""
24
+ result: Any
25
+ tool_name: str
26
+ server_name: Optional[str] = None
27
+ metadata: Dict[str, Any] = field(default_factory=dict)
28
+
29
+
30
+ def mcp_list_tools(
31
+ command: str,
32
+ args: Optional[List[str]] = None,
33
+ env: Optional[Dict[str, str]] = None,
34
+ timeout: float = 30.0,
35
+ metadata: Optional[Dict[str, Any]] = None,
36
+ **kwargs
37
+ ) -> MCPResult:
38
+ """
39
+ List tools from an MCP server.
40
+
41
+ Args:
42
+ command: MCP server command (e.g., "npx")
43
+ args: Command arguments
44
+ env: Environment variables
45
+ timeout: Request timeout in seconds
46
+ metadata: Optional metadata for tracing
47
+
48
+ Returns:
49
+ MCPResult with available tools
50
+
51
+ Example:
52
+ >>> result = mcp_list_tools("npx", ["-y", "@modelcontextprotocol/server-filesystem", "."])
53
+ >>> for tool in result.tools:
54
+ ... print(tool['name'])
55
+ """
56
+ try:
57
+ from praisonaiagents.mcp import MCP
58
+
59
+ mcp = MCP(command=command, args=args or [], env=env)
60
+ tools = mcp.get_tools()
61
+
62
+ tool_list = []
63
+ for tool in tools:
64
+ tool_list.append({
65
+ 'name': getattr(tool, 'name', str(tool)),
66
+ 'description': getattr(tool, 'description', ''),
67
+ })
68
+
69
+ return MCPResult(
70
+ tools=tool_list,
71
+ server_name=command,
72
+ metadata=metadata or {},
73
+ )
74
+ except ImportError:
75
+ return MCPResult(
76
+ tools=[],
77
+ server_name=command,
78
+ metadata={"error": "MCP not available", **(metadata or {})},
79
+ )
80
+
81
+
82
+ async def amcp_list_tools(
83
+ command: str,
84
+ args: Optional[List[str]] = None,
85
+ env: Optional[Dict[str, str]] = None,
86
+ timeout: float = 30.0,
87
+ metadata: Optional[Dict[str, Any]] = None,
88
+ **kwargs
89
+ ) -> MCPResult:
90
+ """
91
+ Async: List tools from an MCP server.
92
+
93
+ See mcp_list_tools() for full documentation.
94
+ """
95
+ return mcp_list_tools(
96
+ command=command,
97
+ args=args,
98
+ env=env,
99
+ timeout=timeout,
100
+ metadata=metadata,
101
+ **kwargs
102
+ )
103
+
104
+
105
+ def mcp_call_tool(
106
+ command: str,
107
+ tool_name: str,
108
+ tool_args: Optional[Dict[str, Any]] = None,
109
+ args: Optional[List[str]] = None,
110
+ env: Optional[Dict[str, str]] = None,
111
+ timeout: float = 60.0,
112
+ metadata: Optional[Dict[str, Any]] = None,
113
+ **kwargs
114
+ ) -> MCPToolCallResult:
115
+ """
116
+ Call a tool on an MCP server.
117
+
118
+ Args:
119
+ command: MCP server command
120
+ tool_name: Name of the tool to call
121
+ tool_args: Arguments for the tool
122
+ args: Command arguments
123
+ env: Environment variables
124
+ timeout: Request timeout in seconds
125
+ metadata: Optional metadata for tracing
126
+
127
+ Returns:
128
+ MCPToolCallResult with tool result
129
+ """
130
+ try:
131
+ from praisonaiagents.mcp import MCP
132
+
133
+ mcp = MCP(command=command, args=args or [], env=env)
134
+
135
+ # Get the tool and call it
136
+ tools = mcp.get_tools()
137
+ for tool in tools:
138
+ if getattr(tool, 'name', str(tool)) == tool_name:
139
+ if callable(tool):
140
+ result = tool(**(tool_args or {}))
141
+ else:
142
+ result = None
143
+
144
+ return MCPToolCallResult(
145
+ result=result,
146
+ tool_name=tool_name,
147
+ server_name=command,
148
+ metadata=metadata or {},
149
+ )
150
+
151
+ return MCPToolCallResult(
152
+ result=None,
153
+ tool_name=tool_name,
154
+ server_name=command,
155
+ metadata={"error": f"Tool '{tool_name}' not found", **(metadata or {})},
156
+ )
157
+ except ImportError:
158
+ return MCPToolCallResult(
159
+ result=None,
160
+ tool_name=tool_name,
161
+ server_name=command,
162
+ metadata={"error": "MCP not available", **(metadata or {})},
163
+ )
164
+
165
+
166
+ async def amcp_call_tool(
167
+ command: str,
168
+ tool_name: str,
169
+ tool_args: Optional[Dict[str, Any]] = None,
170
+ args: Optional[List[str]] = None,
171
+ env: Optional[Dict[str, str]] = None,
172
+ timeout: float = 60.0,
173
+ metadata: Optional[Dict[str, Any]] = None,
174
+ **kwargs
175
+ ) -> MCPToolCallResult:
176
+ """
177
+ Async: Call a tool on an MCP server.
178
+
179
+ See mcp_call_tool() for full documentation.
180
+ """
181
+ return mcp_call_tool(
182
+ command=command,
183
+ tool_name=tool_name,
184
+ tool_args=tool_args,
185
+ args=args,
186
+ env=env,
187
+ timeout=timeout,
188
+ metadata=metadata,
189
+ **kwargs
190
+ )