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,275 @@
1
+ """
2
+ PraisonAI Capabilities Module
3
+
4
+ This module provides LiteLLM endpoint capability parity for PraisonAI.
5
+ All capabilities are lazy-loaded to minimize import overhead.
6
+
7
+ Capabilities:
8
+ - audio: Transcription and text-to-speech
9
+ - images: Image generation and editing
10
+ - videos: Video generation
11
+ - files: File upload and management
12
+ - batches: Batch processing
13
+ - vector_stores: Vector store management
14
+ - embeddings: Text embeddings
15
+ - rerank: Document reranking
16
+ - moderations: Content moderation
17
+ - ocr: Optical character recognition
18
+ - assistants: OpenAI-style assistants
19
+ - fine_tuning: Model fine-tuning
20
+ - responses: Response management
21
+ - passthrough: Generic API passthrough
22
+ - containers: Container management
23
+ - search: Search capabilities
24
+ - a2a: Agent-to-agent gateway
25
+ """
26
+
27
+ __all__ = [
28
+ # Audio
29
+ 'transcribe',
30
+ 'atranscribe',
31
+ 'speech',
32
+ 'aspeech',
33
+ # Images
34
+ 'image_generate',
35
+ 'aimage_generate',
36
+ 'image_edit',
37
+ 'aimage_edit',
38
+ # Videos
39
+ 'video_generate',
40
+ 'avideo_generate',
41
+ # Files
42
+ 'file_create',
43
+ 'afile_create',
44
+ 'file_list',
45
+ 'afile_list',
46
+ 'file_retrieve',
47
+ 'afile_retrieve',
48
+ 'file_delete',
49
+ 'afile_delete',
50
+ 'file_content',
51
+ 'afile_content',
52
+ # Batches
53
+ 'batch_create',
54
+ 'abatch_create',
55
+ 'batch_list',
56
+ 'abatch_list',
57
+ 'batch_retrieve',
58
+ 'abatch_retrieve',
59
+ 'batch_cancel',
60
+ 'abatch_cancel',
61
+ # Vector Stores
62
+ 'vector_store_create',
63
+ 'avector_store_create',
64
+ 'vector_store_search',
65
+ 'avector_store_search',
66
+ # Embeddings
67
+ 'embed',
68
+ 'aembed',
69
+ # Rerank
70
+ 'rerank',
71
+ 'arerank',
72
+ # Moderations
73
+ 'moderate',
74
+ 'amoderate',
75
+ # OCR
76
+ 'ocr',
77
+ 'aocr',
78
+ # Assistants
79
+ 'assistant_create',
80
+ 'aassistant_create',
81
+ 'assistant_list',
82
+ 'aassistant_list',
83
+ # Fine-tuning
84
+ 'fine_tuning_create',
85
+ 'afine_tuning_create',
86
+ 'fine_tuning_list',
87
+ 'afine_tuning_list',
88
+ # Responses
89
+ 'responses_create',
90
+ 'aresponses_create',
91
+ # Passthrough
92
+ 'passthrough',
93
+ 'apassthrough',
94
+ # Containers
95
+ 'container_create',
96
+ 'acontainer_create',
97
+ # Search
98
+ 'search',
99
+ 'asearch',
100
+ # A2A
101
+ 'a2a_send',
102
+ 'aa2a_send',
103
+ # Completions
104
+ 'chat_completion',
105
+ 'achat_completion',
106
+ 'text_completion',
107
+ 'atext_completion',
108
+ # Messages
109
+ 'messages_create',
110
+ 'amessages_create',
111
+ 'count_tokens',
112
+ 'acount_tokens',
113
+ # Guardrails
114
+ 'apply_guardrail',
115
+ 'aapply_guardrail',
116
+ # RAG
117
+ 'rag_query',
118
+ 'arag_query',
119
+ # Realtime
120
+ 'realtime_connect',
121
+ 'arealtime_connect',
122
+ 'realtime_send',
123
+ 'arealtime_send',
124
+ # Skills
125
+ 'skill_list',
126
+ 'askill_list',
127
+ 'skill_load',
128
+ 'askill_load',
129
+ # MCP
130
+ 'mcp_list_tools',
131
+ 'amcp_list_tools',
132
+ 'mcp_call_tool',
133
+ 'amcp_call_tool',
134
+ # Vector Store Files
135
+ 'vector_store_file_create',
136
+ 'avector_store_file_create',
137
+ 'vector_store_file_list',
138
+ 'avector_store_file_list',
139
+ 'vector_store_file_delete',
140
+ 'avector_store_file_delete',
141
+ # Container Files
142
+ 'container_file_read',
143
+ 'acontainer_file_read',
144
+ 'container_file_write',
145
+ 'acontainer_file_write',
146
+ 'container_file_list',
147
+ 'acontainer_file_list',
148
+ # Result types
149
+ 'TranscriptionResult',
150
+ 'SpeechResult',
151
+ 'ImageResult',
152
+ 'FileResult',
153
+ 'BatchResult',
154
+ 'VectorStoreResult',
155
+ 'EmbeddingResult',
156
+ 'RerankResult',
157
+ 'ModerationResult',
158
+ 'OCRResult',
159
+ 'CompletionResult',
160
+ 'MessageResult',
161
+ 'TokenCountResult',
162
+ 'GuardrailResult',
163
+ 'RAGResult',
164
+ 'RealtimeSession',
165
+ 'RealtimeEvent',
166
+ 'SkillResult',
167
+ 'MCPResult',
168
+ 'MCPToolCallResult',
169
+ 'VectorStoreFileResult',
170
+ 'ContainerFileResult',
171
+ ]
172
+
173
+ _ATTR_TO_MODULE = {
174
+ # Audio
175
+ 'transcribe': 'audio', 'atranscribe': 'audio', 'speech': 'audio', 'aspeech': 'audio',
176
+ 'TranscriptionResult': 'audio', 'SpeechResult': 'audio',
177
+ # Images
178
+ 'image_generate': 'images', 'aimage_generate': 'images', 'image_edit': 'images',
179
+ 'aimage_edit': 'images', 'ImageResult': 'images',
180
+ # Videos
181
+ 'video_generate': 'videos', 'avideo_generate': 'videos',
182
+ # Files
183
+ 'file_create': 'files', 'afile_create': 'files', 'file_list': 'files',
184
+ 'afile_list': 'files', 'file_retrieve': 'files', 'afile_retrieve': 'files',
185
+ 'file_delete': 'files', 'afile_delete': 'files', 'file_content': 'files',
186
+ 'afile_content': 'files', 'FileResult': 'files',
187
+ # Batches
188
+ 'batch_create': 'batches', 'abatch_create': 'batches', 'batch_list': 'batches',
189
+ 'abatch_list': 'batches', 'batch_retrieve': 'batches', 'abatch_retrieve': 'batches',
190
+ 'batch_cancel': 'batches', 'abatch_cancel': 'batches', 'BatchResult': 'batches',
191
+ # Vector Stores
192
+ 'vector_store_create': 'vector_stores', 'avector_store_create': 'vector_stores',
193
+ 'vector_store_search': 'vector_stores', 'avector_store_search': 'vector_stores',
194
+ 'VectorStoreResult': 'vector_stores',
195
+ # Embeddings
196
+ 'embed': 'embeddings', 'aembed': 'embeddings', 'EmbeddingResult': 'embeddings',
197
+ # Rerank
198
+ 'rerank': 'rerank_module', 'arerank': 'rerank_module', 'RerankResult': 'rerank_module',
199
+ # Moderations
200
+ 'moderate': 'moderations', 'amoderate': 'moderations', 'ModerationResult': 'moderations',
201
+ # OCR
202
+ 'ocr': 'ocr_module', 'aocr': 'ocr_module', 'OCRResult': 'ocr_module',
203
+ # Assistants
204
+ 'assistant_create': 'assistants', 'aassistant_create': 'assistants',
205
+ 'assistant_list': 'assistants', 'aassistant_list': 'assistants',
206
+ # Fine-tuning
207
+ 'fine_tuning_create': 'fine_tuning', 'afine_tuning_create': 'fine_tuning',
208
+ 'fine_tuning_list': 'fine_tuning', 'afine_tuning_list': 'fine_tuning',
209
+ # Responses
210
+ 'responses_create': 'responses', 'aresponses_create': 'responses',
211
+ # Passthrough
212
+ 'passthrough': 'passthrough_module', 'apassthrough': 'passthrough_module',
213
+ # Containers
214
+ 'container_create': 'containers', 'acontainer_create': 'containers',
215
+ # Search
216
+ 'search': 'search_module', 'asearch': 'search_module',
217
+ # A2A
218
+ 'a2a_send': 'a2a', 'aa2a_send': 'a2a',
219
+ # Completions
220
+ 'chat_completion': 'completions', 'achat_completion': 'completions',
221
+ 'text_completion': 'completions', 'atext_completion': 'completions',
222
+ 'CompletionResult': 'completions',
223
+ # Messages
224
+ 'messages_create': 'messages', 'amessages_create': 'messages',
225
+ 'count_tokens': 'messages', 'acount_tokens': 'messages',
226
+ 'MessageResult': 'messages', 'TokenCountResult': 'messages',
227
+ # Guardrails
228
+ 'apply_guardrail': 'guardrails', 'aapply_guardrail': 'guardrails',
229
+ 'GuardrailResult': 'guardrails',
230
+ # RAG
231
+ 'rag_query': 'rag', 'arag_query': 'rag', 'RAGResult': 'rag',
232
+ # Realtime
233
+ 'realtime_connect': 'realtime', 'arealtime_connect': 'realtime',
234
+ 'realtime_send': 'realtime', 'arealtime_send': 'realtime',
235
+ 'RealtimeSession': 'realtime', 'RealtimeEvent': 'realtime',
236
+ # Skills
237
+ 'skill_list': 'skills_module', 'askill_list': 'skills_module',
238
+ 'skill_load': 'skills_module', 'askill_load': 'skills_module',
239
+ 'SkillResult': 'skills_module',
240
+ # MCP
241
+ 'mcp_list_tools': 'mcp', 'amcp_list_tools': 'mcp',
242
+ 'mcp_call_tool': 'mcp', 'amcp_call_tool': 'mcp',
243
+ 'MCPResult': 'mcp', 'MCPToolCallResult': 'mcp',
244
+ # Vector Store Files
245
+ 'vector_store_file_create': 'vector_store_files', 'avector_store_file_create': 'vector_store_files',
246
+ 'vector_store_file_list': 'vector_store_files', 'avector_store_file_list': 'vector_store_files',
247
+ 'vector_store_file_delete': 'vector_store_files', 'avector_store_file_delete': 'vector_store_files',
248
+ 'VectorStoreFileResult': 'vector_store_files',
249
+ # Container Files
250
+ 'container_file_read': 'container_files', 'acontainer_file_read': 'container_files',
251
+ 'container_file_write': 'container_files', 'acontainer_file_write': 'container_files',
252
+ 'container_file_list': 'container_files', 'acontainer_file_list': 'container_files',
253
+ 'ContainerFileResult': 'container_files',
254
+ }
255
+
256
+ # Module name mapping (for modules that conflict with function names)
257
+ _MODULE_ALIASES = {
258
+ 'rerank_module': 'rerank',
259
+ 'ocr_module': 'ocr',
260
+ 'passthrough_module': 'passthrough',
261
+ 'search_module': 'search',
262
+ 'skills_module': 'skills',
263
+ }
264
+
265
+ def __getattr__(name):
266
+ """Lazy load capabilities to minimize import overhead."""
267
+ if name in _ATTR_TO_MODULE:
268
+ import importlib
269
+ module_name = _ATTR_TO_MODULE[name]
270
+ # Handle module aliases
271
+ actual_module = _MODULE_ALIASES.get(module_name, module_name)
272
+ module = importlib.import_module(f'.{actual_module}', __package__)
273
+ return getattr(module, name)
274
+
275
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,140 @@
1
+ """
2
+ A2A (Agent-to-Agent) Capabilities Module
3
+
4
+ Provides agent-to-agent communication gateway functionality.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Any, Dict, List
9
+
10
+
11
+ @dataclass
12
+ class A2AResult:
13
+ """Result from A2A operations."""
14
+ id: str
15
+ status: str = "sent"
16
+ response: Optional[Any] = None
17
+ target_agent: Optional[str] = None
18
+ metadata: Dict[str, Any] = field(default_factory=dict)
19
+
20
+
21
+ def a2a_send(
22
+ message: str,
23
+ target_agent: str,
24
+ source_agent: Optional[str] = None,
25
+ context: Optional[Dict[str, Any]] = None,
26
+ timeout: float = 600.0,
27
+ api_key: Optional[str] = None,
28
+ api_base: Optional[str] = None,
29
+ metadata: Optional[Dict[str, Any]] = None,
30
+ **kwargs
31
+ ) -> A2AResult:
32
+ """
33
+ Send a message to another agent via A2A protocol.
34
+
35
+ Args:
36
+ message: Message to send
37
+ target_agent: Target agent identifier
38
+ source_agent: Source agent identifier
39
+ context: Additional context
40
+ timeout: Request timeout in seconds
41
+ api_key: Optional API key override
42
+ api_base: Optional API base URL override
43
+ metadata: Optional metadata for tracing
44
+
45
+ Returns:
46
+ A2AResult with response
47
+
48
+ Example:
49
+ >>> result = a2a_send(
50
+ ... "Please analyze this data",
51
+ ... target_agent="data-analyst"
52
+ ... )
53
+ >>> print(result.response)
54
+ """
55
+ import uuid
56
+
57
+ # A2A protocol implementation
58
+ # This integrates with PraisonAI's handoff mechanism
59
+
60
+ message_id = f"a2a-{uuid.uuid4().hex[:12]}"
61
+
62
+ # Try to use handoff if available
63
+ try:
64
+ from praisonaiagents import Agent
65
+
66
+ # Create a simple agent to handle the message
67
+ agent = Agent(
68
+ name=target_agent,
69
+ instructions=f"You are {target_agent}. Process the following request.",
70
+ )
71
+
72
+ response = agent.chat(message)
73
+
74
+ return A2AResult(
75
+ id=message_id,
76
+ status="completed",
77
+ response=response,
78
+ target_agent=target_agent,
79
+ metadata=metadata or {},
80
+ )
81
+ except Exception:
82
+ # Return pending status if agent not available
83
+ return A2AResult(
84
+ id=message_id,
85
+ status="pending",
86
+ response=None,
87
+ target_agent=target_agent,
88
+ metadata=metadata or {},
89
+ )
90
+
91
+
92
+ async def aa2a_send(
93
+ message: str,
94
+ target_agent: str,
95
+ source_agent: Optional[str] = None,
96
+ context: Optional[Dict[str, Any]] = None,
97
+ timeout: float = 600.0,
98
+ api_key: Optional[str] = None,
99
+ api_base: Optional[str] = None,
100
+ metadata: Optional[Dict[str, Any]] = None,
101
+ **kwargs
102
+ ) -> A2AResult:
103
+ """
104
+ Async: Send a message to another agent via A2A protocol.
105
+
106
+ See a2a_send() for full documentation.
107
+ """
108
+ import uuid
109
+
110
+ message_id = f"a2a-{uuid.uuid4().hex[:12]}"
111
+
112
+ try:
113
+ from praisonaiagents import Agent
114
+
115
+ agent = Agent(
116
+ name=target_agent,
117
+ instructions=f"You are {target_agent}. Process the following request.",
118
+ )
119
+
120
+ # Use async chat if available
121
+ if hasattr(agent, 'achat'):
122
+ response = await agent.achat(message)
123
+ else:
124
+ response = agent.chat(message)
125
+
126
+ return A2AResult(
127
+ id=message_id,
128
+ status="completed",
129
+ response=response,
130
+ target_agent=target_agent,
131
+ metadata=metadata or {},
132
+ )
133
+ except Exception:
134
+ return A2AResult(
135
+ id=message_id,
136
+ status="pending",
137
+ response=None,
138
+ target_agent=target_agent,
139
+ metadata=metadata or {},
140
+ )
@@ -0,0 +1,283 @@
1
+ """
2
+ Assistants Capabilities Module
3
+
4
+ Provides OpenAI-style assistants functionality via LiteLLM.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, List, Any, Dict, Literal
9
+
10
+
11
+ @dataclass
12
+ class AssistantResult:
13
+ """Result from assistant operations."""
14
+ id: str
15
+ object: str = "assistant"
16
+ name: Optional[str] = None
17
+ description: Optional[str] = None
18
+ model: Optional[str] = None
19
+ instructions: Optional[str] = None
20
+ tools: Optional[List[Dict[str, Any]]] = None
21
+ created_at: Optional[int] = None
22
+ metadata: Dict[str, Any] = field(default_factory=dict)
23
+
24
+
25
+ def assistant_create(
26
+ model: str = "gpt-4o-mini",
27
+ name: Optional[str] = None,
28
+ description: Optional[str] = None,
29
+ instructions: Optional[str] = None,
30
+ tools: Optional[List[Dict[str, Any]]] = None,
31
+ file_ids: Optional[List[str]] = None,
32
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
33
+ timeout: float = 600.0,
34
+ api_key: Optional[str] = None,
35
+ api_base: Optional[str] = None,
36
+ assistant_metadata: Optional[Dict[str, str]] = None,
37
+ **kwargs
38
+ ) -> AssistantResult:
39
+ """
40
+ Create an assistant.
41
+
42
+ Args:
43
+ model: Model to use for the assistant
44
+ name: Name of the assistant
45
+ description: Description of the assistant
46
+ instructions: System instructions for the assistant
47
+ tools: List of tools (e.g., [{"type": "code_interpreter"}])
48
+ file_ids: List of file IDs to attach
49
+ custom_llm_provider: Provider ("openai", "azure")
50
+ timeout: Request timeout in seconds
51
+ api_key: Optional API key override
52
+ api_base: Optional API base URL override
53
+ assistant_metadata: Optional metadata for the assistant
54
+
55
+ Returns:
56
+ AssistantResult with assistant ID
57
+
58
+ Example:
59
+ >>> result = assistant_create(
60
+ ... name="Math Tutor",
61
+ ... instructions="You are a helpful math tutor."
62
+ ... )
63
+ >>> print(result.id)
64
+ """
65
+ import litellm
66
+
67
+ call_kwargs = {
68
+ 'model': model,
69
+ 'custom_llm_provider': custom_llm_provider,
70
+ 'timeout': timeout,
71
+ }
72
+
73
+ if name:
74
+ call_kwargs['name'] = name
75
+ if description:
76
+ call_kwargs['description'] = description
77
+ if instructions:
78
+ call_kwargs['instructions'] = instructions
79
+ if tools:
80
+ call_kwargs['tools'] = tools
81
+ if file_ids:
82
+ call_kwargs['file_ids'] = file_ids
83
+ if api_key:
84
+ call_kwargs['api_key'] = api_key
85
+ if api_base:
86
+ call_kwargs['api_base'] = api_base
87
+ if assistant_metadata:
88
+ call_kwargs['metadata'] = assistant_metadata
89
+
90
+ call_kwargs.update(kwargs)
91
+
92
+ response = litellm.create_assistants(**call_kwargs)
93
+
94
+ return AssistantResult(
95
+ id=getattr(response, 'id', ''),
96
+ object=getattr(response, 'object', 'assistant'),
97
+ name=getattr(response, 'name', name),
98
+ description=getattr(response, 'description', description),
99
+ model=getattr(response, 'model', model),
100
+ instructions=getattr(response, 'instructions', instructions),
101
+ tools=getattr(response, 'tools', tools),
102
+ created_at=getattr(response, 'created_at', None),
103
+ metadata=assistant_metadata or {},
104
+ )
105
+
106
+
107
+ async def aassistant_create(
108
+ model: str = "gpt-4o-mini",
109
+ name: Optional[str] = None,
110
+ description: Optional[str] = None,
111
+ instructions: Optional[str] = None,
112
+ tools: Optional[List[Dict[str, Any]]] = None,
113
+ file_ids: Optional[List[str]] = None,
114
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
115
+ timeout: float = 600.0,
116
+ api_key: Optional[str] = None,
117
+ api_base: Optional[str] = None,
118
+ assistant_metadata: Optional[Dict[str, str]] = None,
119
+ **kwargs
120
+ ) -> AssistantResult:
121
+ """
122
+ Async: Create an assistant.
123
+
124
+ See assistant_create() for full documentation.
125
+ """
126
+ import litellm
127
+
128
+ call_kwargs = {
129
+ 'model': model,
130
+ 'custom_llm_provider': custom_llm_provider,
131
+ 'timeout': timeout,
132
+ }
133
+
134
+ if name:
135
+ call_kwargs['name'] = name
136
+ if description:
137
+ call_kwargs['description'] = description
138
+ if instructions:
139
+ call_kwargs['instructions'] = instructions
140
+ if tools:
141
+ call_kwargs['tools'] = tools
142
+ if file_ids:
143
+ call_kwargs['file_ids'] = file_ids
144
+ if api_key:
145
+ call_kwargs['api_key'] = api_key
146
+ if api_base:
147
+ call_kwargs['api_base'] = api_base
148
+ if assistant_metadata:
149
+ call_kwargs['metadata'] = assistant_metadata
150
+
151
+ call_kwargs.update(kwargs)
152
+
153
+ response = await litellm.acreate_assistants(**call_kwargs)
154
+
155
+ return AssistantResult(
156
+ id=getattr(response, 'id', ''),
157
+ object=getattr(response, 'object', 'assistant'),
158
+ name=getattr(response, 'name', name),
159
+ description=getattr(response, 'description', description),
160
+ model=getattr(response, 'model', model),
161
+ instructions=getattr(response, 'instructions', instructions),
162
+ tools=getattr(response, 'tools', tools),
163
+ created_at=getattr(response, 'created_at', None),
164
+ metadata=assistant_metadata or {},
165
+ )
166
+
167
+
168
+ def assistant_list(
169
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
170
+ limit: int = 20,
171
+ order: str = "desc",
172
+ after: Optional[str] = None,
173
+ before: Optional[str] = None,
174
+ api_key: Optional[str] = None,
175
+ api_base: Optional[str] = None,
176
+ **kwargs
177
+ ) -> List[AssistantResult]:
178
+ """
179
+ List assistants.
180
+
181
+ Args:
182
+ custom_llm_provider: Provider
183
+ limit: Maximum number of assistants to return
184
+ order: Sort order ("asc" or "desc")
185
+ after: Cursor for pagination
186
+ before: Cursor for pagination
187
+ api_key: Optional API key override
188
+ api_base: Optional API base URL override
189
+
190
+ Returns:
191
+ List of AssistantResult objects
192
+ """
193
+ import litellm
194
+
195
+ call_kwargs = {
196
+ 'custom_llm_provider': custom_llm_provider,
197
+ 'limit': limit,
198
+ 'order': order,
199
+ }
200
+
201
+ if after:
202
+ call_kwargs['after'] = after
203
+ if before:
204
+ call_kwargs['before'] = before
205
+ if api_key:
206
+ call_kwargs['api_key'] = api_key
207
+ if api_base:
208
+ call_kwargs['api_base'] = api_base
209
+
210
+ call_kwargs.update(kwargs)
211
+
212
+ response = litellm.get_assistants(**call_kwargs)
213
+
214
+ results = []
215
+ data = getattr(response, 'data', response) if hasattr(response, 'data') else response
216
+ if isinstance(data, list):
217
+ for item in data:
218
+ results.append(AssistantResult(
219
+ id=getattr(item, 'id', ''),
220
+ object=getattr(item, 'object', 'assistant'),
221
+ name=getattr(item, 'name', None),
222
+ description=getattr(item, 'description', None),
223
+ model=getattr(item, 'model', None),
224
+ instructions=getattr(item, 'instructions', None),
225
+ tools=getattr(item, 'tools', None),
226
+ created_at=getattr(item, 'created_at', None),
227
+ ))
228
+
229
+ return results
230
+
231
+
232
+ async def aassistant_list(
233
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
234
+ limit: int = 20,
235
+ order: str = "desc",
236
+ after: Optional[str] = None,
237
+ before: Optional[str] = None,
238
+ api_key: Optional[str] = None,
239
+ api_base: Optional[str] = None,
240
+ **kwargs
241
+ ) -> List[AssistantResult]:
242
+ """
243
+ Async: List assistants.
244
+
245
+ See assistant_list() for full documentation.
246
+ """
247
+ import litellm
248
+
249
+ call_kwargs = {
250
+ 'custom_llm_provider': custom_llm_provider,
251
+ 'limit': limit,
252
+ 'order': order,
253
+ }
254
+
255
+ if after:
256
+ call_kwargs['after'] = after
257
+ if before:
258
+ call_kwargs['before'] = before
259
+ if api_key:
260
+ call_kwargs['api_key'] = api_key
261
+ if api_base:
262
+ call_kwargs['api_base'] = api_base
263
+
264
+ call_kwargs.update(kwargs)
265
+
266
+ response = await litellm.aget_assistants(**call_kwargs)
267
+
268
+ results = []
269
+ data = getattr(response, 'data', response) if hasattr(response, 'data') else response
270
+ if isinstance(data, list):
271
+ for item in data:
272
+ results.append(AssistantResult(
273
+ id=getattr(item, 'id', ''),
274
+ object=getattr(item, 'object', 'assistant'),
275
+ name=getattr(item, 'name', None),
276
+ description=getattr(item, 'description', None),
277
+ model=getattr(item, 'model', None),
278
+ instructions=getattr(item, 'instructions', None),
279
+ tools=getattr(item, 'tools', None),
280
+ created_at=getattr(item, 'created_at', None),
281
+ ))
282
+
283
+ return results