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,158 @@
1
+ """
2
+ Embeddings Capabilities Module
3
+
4
+ Provides text embedding 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 EmbeddingResult:
13
+ """Result from embedding generation."""
14
+ embeddings: List[List[float]]
15
+ model: Optional[str] = None
16
+ usage: Optional[Dict[str, int]] = None
17
+ metadata: Dict[str, Any] = field(default_factory=dict)
18
+
19
+
20
+ def embed(
21
+ input: Union[str, List[str]],
22
+ model: str = "text-embedding-3-small",
23
+ dimensions: Optional[int] = None,
24
+ encoding_format: str = "float",
25
+ timeout: float = 600.0,
26
+ api_key: Optional[str] = None,
27
+ api_base: Optional[str] = None,
28
+ metadata: Optional[Dict[str, Any]] = None,
29
+ **kwargs
30
+ ) -> EmbeddingResult:
31
+ """
32
+ Generate embeddings for text using LiteLLM.
33
+
34
+ Args:
35
+ input: Text or list of texts to embed
36
+ model: Model name (e.g., "text-embedding-3-small", "text-embedding-3-large")
37
+ dimensions: Optional output dimensions (for models that support it)
38
+ encoding_format: "float" or "base64"
39
+ timeout: Request timeout in seconds
40
+ api_key: Optional API key override
41
+ api_base: Optional API base URL override
42
+ metadata: Optional metadata for tracing
43
+
44
+ Returns:
45
+ EmbeddingResult with embeddings list
46
+
47
+ Example:
48
+ >>> result = embed("Hello, world!")
49
+ >>> print(len(result.embeddings[0]))
50
+
51
+ >>> result = embed(["Hello", "World"], model="text-embedding-3-large")
52
+ """
53
+ import litellm
54
+
55
+ call_kwargs = {
56
+ 'model': model,
57
+ 'input': input,
58
+ 'encoding_format': encoding_format,
59
+ 'timeout': timeout,
60
+ }
61
+
62
+ if dimensions:
63
+ call_kwargs['dimensions'] = dimensions
64
+ if api_key:
65
+ call_kwargs['api_key'] = api_key
66
+ if api_base:
67
+ call_kwargs['api_base'] = api_base
68
+
69
+ call_kwargs.update(kwargs)
70
+
71
+ if metadata:
72
+ call_kwargs['metadata'] = metadata
73
+
74
+ response = litellm.embedding(**call_kwargs)
75
+
76
+ embeddings = []
77
+ if hasattr(response, 'data'):
78
+ for item in response.data:
79
+ if isinstance(item, dict):
80
+ embeddings.append(item.get('embedding', []))
81
+ else:
82
+ embeddings.append(getattr(item, 'embedding', []))
83
+
84
+ usage = None
85
+ if hasattr(response, 'usage'):
86
+ usage = {
87
+ 'prompt_tokens': getattr(response.usage, 'prompt_tokens', 0),
88
+ 'total_tokens': getattr(response.usage, 'total_tokens', 0),
89
+ }
90
+
91
+ return EmbeddingResult(
92
+ embeddings=embeddings,
93
+ model=model,
94
+ usage=usage,
95
+ metadata=metadata or {},
96
+ )
97
+
98
+
99
+ async def aembed(
100
+ input: Union[str, List[str]],
101
+ model: str = "text-embedding-3-small",
102
+ dimensions: Optional[int] = None,
103
+ encoding_format: str = "float",
104
+ timeout: float = 600.0,
105
+ api_key: Optional[str] = None,
106
+ api_base: Optional[str] = None,
107
+ metadata: Optional[Dict[str, Any]] = None,
108
+ **kwargs
109
+ ) -> EmbeddingResult:
110
+ """
111
+ Async: Generate embeddings for text using LiteLLM.
112
+
113
+ See embed() for full documentation.
114
+ """
115
+ import litellm
116
+
117
+ call_kwargs = {
118
+ 'model': model,
119
+ 'input': input,
120
+ 'encoding_format': encoding_format,
121
+ 'timeout': timeout,
122
+ }
123
+
124
+ if dimensions:
125
+ call_kwargs['dimensions'] = dimensions
126
+ if api_key:
127
+ call_kwargs['api_key'] = api_key
128
+ if api_base:
129
+ call_kwargs['api_base'] = api_base
130
+
131
+ call_kwargs.update(kwargs)
132
+
133
+ if metadata:
134
+ call_kwargs['metadata'] = metadata
135
+
136
+ response = await litellm.aembedding(**call_kwargs)
137
+
138
+ embeddings = []
139
+ if hasattr(response, 'data'):
140
+ for item in response.data:
141
+ if isinstance(item, dict):
142
+ embeddings.append(item.get('embedding', []))
143
+ else:
144
+ embeddings.append(getattr(item, 'embedding', []))
145
+
146
+ usage = None
147
+ if hasattr(response, 'usage'):
148
+ usage = {
149
+ 'prompt_tokens': getattr(response.usage, 'prompt_tokens', 0),
150
+ 'total_tokens': getattr(response.usage, 'total_tokens', 0),
151
+ }
152
+
153
+ return EmbeddingResult(
154
+ embeddings=embeddings,
155
+ model=model,
156
+ usage=usage,
157
+ metadata=metadata or {},
158
+ )
@@ -0,0 +1,467 @@
1
+ """
2
+ Files Capabilities Module
3
+
4
+ Provides file upload and management functionality via LiteLLM.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Union, List, Any, Dict, Literal, BinaryIO
9
+
10
+
11
+ @dataclass
12
+ class FileResult:
13
+ """Result from file operations."""
14
+ id: str
15
+ object: str = "file"
16
+ bytes: Optional[int] = None
17
+ created_at: Optional[int] = None
18
+ filename: Optional[str] = None
19
+ purpose: Optional[str] = None
20
+ status: Optional[str] = None
21
+ metadata: Dict[str, Any] = field(default_factory=dict)
22
+
23
+
24
+ def file_create(
25
+ file: Union[str, bytes, BinaryIO],
26
+ purpose: Literal["assistants", "batch", "fine-tune"] = "assistants",
27
+ custom_llm_provider: str = "openai",
28
+ timeout: float = 600.0,
29
+ api_key: Optional[str] = None,
30
+ api_base: Optional[str] = None,
31
+ metadata: Optional[Dict[str, Any]] = None,
32
+ **kwargs
33
+ ) -> FileResult:
34
+ """
35
+ Upload a file for use with assistants, batch, or fine-tuning.
36
+
37
+ Args:
38
+ file: File path, bytes, or file-like object
39
+ purpose: Purpose of the file ("assistants", "batch", "fine-tune")
40
+ custom_llm_provider: Provider ("openai", "azure", "vertex_ai", "bedrock")
41
+ timeout: Request timeout in seconds
42
+ api_key: Optional API key override
43
+ api_base: Optional API base URL override
44
+ metadata: Optional metadata for tracing
45
+
46
+ Returns:
47
+ FileResult with file ID and metadata
48
+
49
+ Example:
50
+ >>> result = file_create("./data.jsonl", purpose="batch")
51
+ >>> print(result.id)
52
+ """
53
+ import litellm
54
+
55
+ file_obj = file
56
+ if isinstance(file, str):
57
+ file_obj = open(file, 'rb')
58
+
59
+ try:
60
+ call_kwargs = {
61
+ 'file': file_obj,
62
+ 'purpose': purpose,
63
+ 'custom_llm_provider': custom_llm_provider,
64
+ 'timeout': timeout,
65
+ }
66
+
67
+ if api_key:
68
+ call_kwargs['api_key'] = api_key
69
+ if api_base:
70
+ call_kwargs['api_base'] = api_base
71
+
72
+ call_kwargs.update(kwargs)
73
+
74
+ response = litellm.create_file(**call_kwargs)
75
+
76
+ return FileResult(
77
+ id=getattr(response, 'id', ''),
78
+ object=getattr(response, 'object', 'file'),
79
+ bytes=getattr(response, 'bytes', None),
80
+ created_at=getattr(response, 'created_at', None),
81
+ filename=getattr(response, 'filename', None),
82
+ purpose=getattr(response, 'purpose', purpose),
83
+ status=getattr(response, 'status', None),
84
+ metadata=metadata or {},
85
+ )
86
+ finally:
87
+ if isinstance(file, str) and hasattr(file_obj, 'close'):
88
+ file_obj.close()
89
+
90
+
91
+ async def afile_create(
92
+ file: Union[str, bytes, BinaryIO],
93
+ purpose: Literal["assistants", "batch", "fine-tune"] = "assistants",
94
+ custom_llm_provider: str = "openai",
95
+ timeout: float = 600.0,
96
+ api_key: Optional[str] = None,
97
+ api_base: Optional[str] = None,
98
+ metadata: Optional[Dict[str, Any]] = None,
99
+ **kwargs
100
+ ) -> FileResult:
101
+ """
102
+ Async: Upload a file for use with assistants, batch, or fine-tuning.
103
+
104
+ See file_create() for full documentation.
105
+ """
106
+ import litellm
107
+
108
+ file_obj = file
109
+ if isinstance(file, str):
110
+ file_obj = open(file, 'rb')
111
+
112
+ try:
113
+ call_kwargs = {
114
+ 'file': file_obj,
115
+ 'purpose': purpose,
116
+ 'custom_llm_provider': custom_llm_provider,
117
+ 'timeout': timeout,
118
+ }
119
+
120
+ if api_key:
121
+ call_kwargs['api_key'] = api_key
122
+ if api_base:
123
+ call_kwargs['api_base'] = api_base
124
+
125
+ call_kwargs.update(kwargs)
126
+
127
+ response = await litellm.acreate_file(**call_kwargs)
128
+
129
+ return FileResult(
130
+ id=getattr(response, 'id', ''),
131
+ object=getattr(response, 'object', 'file'),
132
+ bytes=getattr(response, 'bytes', None),
133
+ created_at=getattr(response, 'created_at', None),
134
+ filename=getattr(response, 'filename', None),
135
+ purpose=getattr(response, 'purpose', purpose),
136
+ status=getattr(response, 'status', None),
137
+ metadata=metadata or {},
138
+ )
139
+ finally:
140
+ if isinstance(file, str) and hasattr(file_obj, 'close'):
141
+ file_obj.close()
142
+
143
+
144
+ def file_list(
145
+ purpose: Optional[str] = None,
146
+ custom_llm_provider: str = "openai",
147
+ api_key: Optional[str] = None,
148
+ api_base: Optional[str] = None,
149
+ **kwargs
150
+ ) -> List[FileResult]:
151
+ """
152
+ List uploaded files.
153
+
154
+ Args:
155
+ purpose: Filter by purpose
156
+ custom_llm_provider: Provider
157
+ api_key: Optional API key override
158
+ api_base: Optional API base URL override
159
+
160
+ Returns:
161
+ List of FileResult objects
162
+ """
163
+ import litellm
164
+
165
+ call_kwargs = {
166
+ 'custom_llm_provider': custom_llm_provider,
167
+ }
168
+
169
+ if purpose:
170
+ call_kwargs['purpose'] = purpose
171
+ if api_key:
172
+ call_kwargs['api_key'] = api_key
173
+ if api_base:
174
+ call_kwargs['api_base'] = api_base
175
+
176
+ call_kwargs.update(kwargs)
177
+
178
+ response = litellm.file_list(**call_kwargs)
179
+
180
+ results = []
181
+ data = getattr(response, 'data', response) if hasattr(response, 'data') else response
182
+ if isinstance(data, list):
183
+ for item in data:
184
+ results.append(FileResult(
185
+ id=getattr(item, 'id', ''),
186
+ object=getattr(item, 'object', 'file'),
187
+ bytes=getattr(item, 'bytes', None),
188
+ created_at=getattr(item, 'created_at', None),
189
+ filename=getattr(item, 'filename', None),
190
+ purpose=getattr(item, 'purpose', None),
191
+ status=getattr(item, 'status', None),
192
+ ))
193
+
194
+ return results
195
+
196
+
197
+ async def afile_list(
198
+ purpose: Optional[str] = None,
199
+ custom_llm_provider: str = "openai",
200
+ api_key: Optional[str] = None,
201
+ api_base: Optional[str] = None,
202
+ **kwargs
203
+ ) -> List[FileResult]:
204
+ """
205
+ Async: List uploaded files.
206
+
207
+ See file_list() for full documentation.
208
+ """
209
+ import litellm
210
+
211
+ call_kwargs = {
212
+ 'custom_llm_provider': custom_llm_provider,
213
+ }
214
+
215
+ if purpose:
216
+ call_kwargs['purpose'] = purpose
217
+ if api_key:
218
+ call_kwargs['api_key'] = api_key
219
+ if api_base:
220
+ call_kwargs['api_base'] = api_base
221
+
222
+ call_kwargs.update(kwargs)
223
+
224
+ response = await litellm.afile_list(**call_kwargs)
225
+
226
+ results = []
227
+ data = getattr(response, 'data', response) if hasattr(response, 'data') else response
228
+ if isinstance(data, list):
229
+ for item in data:
230
+ results.append(FileResult(
231
+ id=getattr(item, 'id', ''),
232
+ object=getattr(item, 'object', 'file'),
233
+ bytes=getattr(item, 'bytes', None),
234
+ created_at=getattr(item, 'created_at', None),
235
+ filename=getattr(item, 'filename', None),
236
+ purpose=getattr(item, 'purpose', None),
237
+ status=getattr(item, 'status', None),
238
+ ))
239
+
240
+ return results
241
+
242
+
243
+ def file_retrieve(
244
+ file_id: str,
245
+ custom_llm_provider: str = "openai",
246
+ api_key: Optional[str] = None,
247
+ api_base: Optional[str] = None,
248
+ **kwargs
249
+ ) -> FileResult:
250
+ """
251
+ Retrieve a file by ID.
252
+
253
+ Args:
254
+ file_id: The file ID
255
+ custom_llm_provider: Provider
256
+ api_key: Optional API key override
257
+ api_base: Optional API base URL override
258
+
259
+ Returns:
260
+ FileResult with file metadata
261
+ """
262
+ import litellm
263
+
264
+ call_kwargs = {
265
+ 'file_id': file_id,
266
+ 'custom_llm_provider': custom_llm_provider,
267
+ }
268
+
269
+ if api_key:
270
+ call_kwargs['api_key'] = api_key
271
+ if api_base:
272
+ call_kwargs['api_base'] = api_base
273
+
274
+ call_kwargs.update(kwargs)
275
+
276
+ response = litellm.file_retrieve(**call_kwargs)
277
+
278
+ return FileResult(
279
+ id=getattr(response, 'id', file_id),
280
+ object=getattr(response, 'object', 'file'),
281
+ bytes=getattr(response, 'bytes', None),
282
+ created_at=getattr(response, 'created_at', None),
283
+ filename=getattr(response, 'filename', None),
284
+ purpose=getattr(response, 'purpose', None),
285
+ status=getattr(response, 'status', None),
286
+ )
287
+
288
+
289
+ async def afile_retrieve(
290
+ file_id: str,
291
+ custom_llm_provider: str = "openai",
292
+ api_key: Optional[str] = None,
293
+ api_base: Optional[str] = None,
294
+ **kwargs
295
+ ) -> FileResult:
296
+ """
297
+ Async: Retrieve a file by ID.
298
+
299
+ See file_retrieve() for full documentation.
300
+ """
301
+ import litellm
302
+
303
+ call_kwargs = {
304
+ 'file_id': file_id,
305
+ 'custom_llm_provider': custom_llm_provider,
306
+ }
307
+
308
+ if api_key:
309
+ call_kwargs['api_key'] = api_key
310
+ if api_base:
311
+ call_kwargs['api_base'] = api_base
312
+
313
+ call_kwargs.update(kwargs)
314
+
315
+ response = await litellm.afile_retrieve(**call_kwargs)
316
+
317
+ return FileResult(
318
+ id=getattr(response, 'id', file_id),
319
+ object=getattr(response, 'object', 'file'),
320
+ bytes=getattr(response, 'bytes', None),
321
+ created_at=getattr(response, 'created_at', None),
322
+ filename=getattr(response, 'filename', None),
323
+ purpose=getattr(response, 'purpose', None),
324
+ status=getattr(response, 'status', None),
325
+ )
326
+
327
+
328
+ def file_delete(
329
+ file_id: str,
330
+ custom_llm_provider: str = "openai",
331
+ api_key: Optional[str] = None,
332
+ api_base: Optional[str] = None,
333
+ **kwargs
334
+ ) -> bool:
335
+ """
336
+ Delete a file by ID.
337
+
338
+ Args:
339
+ file_id: The file ID
340
+ custom_llm_provider: Provider
341
+ api_key: Optional API key override
342
+ api_base: Optional API base URL override
343
+
344
+ Returns:
345
+ True if deleted successfully
346
+ """
347
+ import litellm
348
+
349
+ call_kwargs = {
350
+ 'file_id': file_id,
351
+ 'custom_llm_provider': custom_llm_provider,
352
+ }
353
+
354
+ if api_key:
355
+ call_kwargs['api_key'] = api_key
356
+ if api_base:
357
+ call_kwargs['api_base'] = api_base
358
+
359
+ call_kwargs.update(kwargs)
360
+
361
+ response = litellm.file_delete(**call_kwargs)
362
+
363
+ return getattr(response, 'deleted', True)
364
+
365
+
366
+ async def afile_delete(
367
+ file_id: str,
368
+ custom_llm_provider: str = "openai",
369
+ api_key: Optional[str] = None,
370
+ api_base: Optional[str] = None,
371
+ **kwargs
372
+ ) -> bool:
373
+ """
374
+ Async: Delete a file by ID.
375
+
376
+ See file_delete() for full documentation.
377
+ """
378
+ import litellm
379
+
380
+ call_kwargs = {
381
+ 'file_id': file_id,
382
+ 'custom_llm_provider': custom_llm_provider,
383
+ }
384
+
385
+ if api_key:
386
+ call_kwargs['api_key'] = api_key
387
+ if api_base:
388
+ call_kwargs['api_base'] = api_base
389
+
390
+ call_kwargs.update(kwargs)
391
+
392
+ response = await litellm.afile_delete(**call_kwargs)
393
+
394
+ return getattr(response, 'deleted', True)
395
+
396
+
397
+ def file_content(
398
+ file_id: str,
399
+ custom_llm_provider: str = "openai",
400
+ api_key: Optional[str] = None,
401
+ api_base: Optional[str] = None,
402
+ **kwargs
403
+ ) -> bytes:
404
+ """
405
+ Get file content by ID.
406
+
407
+ Args:
408
+ file_id: The file ID
409
+ custom_llm_provider: Provider
410
+ api_key: Optional API key override
411
+ api_base: Optional API base URL override
412
+
413
+ Returns:
414
+ File content as bytes
415
+ """
416
+ import litellm
417
+
418
+ call_kwargs = {
419
+ 'file_id': file_id,
420
+ 'custom_llm_provider': custom_llm_provider,
421
+ }
422
+
423
+ if api_key:
424
+ call_kwargs['api_key'] = api_key
425
+ if api_base:
426
+ call_kwargs['api_base'] = api_base
427
+
428
+ call_kwargs.update(kwargs)
429
+
430
+ response = litellm.file_content(**call_kwargs)
431
+
432
+ if hasattr(response, 'content'):
433
+ return response.content
434
+ return bytes(response) if response else b''
435
+
436
+
437
+ async def afile_content(
438
+ file_id: str,
439
+ custom_llm_provider: str = "openai",
440
+ api_key: Optional[str] = None,
441
+ api_base: Optional[str] = None,
442
+ **kwargs
443
+ ) -> bytes:
444
+ """
445
+ Async: Get file content by ID.
446
+
447
+ See file_content() for full documentation.
448
+ """
449
+ import litellm
450
+
451
+ call_kwargs = {
452
+ 'file_id': file_id,
453
+ 'custom_llm_provider': custom_llm_provider,
454
+ }
455
+
456
+ if api_key:
457
+ call_kwargs['api_key'] = api_key
458
+ if api_base:
459
+ call_kwargs['api_base'] = api_base
460
+
461
+ call_kwargs.update(kwargs)
462
+
463
+ response = await litellm.afile_content(**call_kwargs)
464
+
465
+ if hasattr(response, 'content'):
466
+ return response.content
467
+ return bytes(response) if response else b''