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,293 @@
1
+ """
2
+ Fine-tuning Capabilities Module
3
+
4
+ Provides model fine-tuning 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 FineTuningResult:
13
+ """Result from fine-tuning operations."""
14
+ id: str
15
+ object: str = "fine_tuning.job"
16
+ model: Optional[str] = None
17
+ status: Optional[str] = None
18
+ training_file: Optional[str] = None
19
+ validation_file: Optional[str] = None
20
+ fine_tuned_model: Optional[str] = None
21
+ created_at: Optional[int] = None
22
+ finished_at: Optional[int] = None
23
+ trained_tokens: Optional[int] = None
24
+ error: Optional[Dict[str, Any]] = None
25
+ metadata: Dict[str, Any] = field(default_factory=dict)
26
+
27
+
28
+ def fine_tuning_create(
29
+ training_file: str,
30
+ model: str = "gpt-4o-mini-2024-07-18",
31
+ validation_file: Optional[str] = None,
32
+ hyperparameters: Optional[Dict[str, Any]] = None,
33
+ suffix: Optional[str] = None,
34
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
35
+ timeout: float = 600.0,
36
+ api_key: Optional[str] = None,
37
+ api_base: Optional[str] = None,
38
+ **kwargs
39
+ ) -> FineTuningResult:
40
+ """
41
+ Create a fine-tuning job.
42
+
43
+ Args:
44
+ training_file: ID of the training file
45
+ model: Base model to fine-tune
46
+ validation_file: Optional validation file ID
47
+ hyperparameters: Training hyperparameters
48
+ suffix: Suffix for the fine-tuned model name
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
+
54
+ Returns:
55
+ FineTuningResult with job ID
56
+
57
+ Example:
58
+ >>> result = fine_tuning_create("file-abc123")
59
+ >>> print(result.id, result.status)
60
+ """
61
+ import litellm
62
+
63
+ call_kwargs = {
64
+ 'training_file': training_file,
65
+ 'model': model,
66
+ 'custom_llm_provider': custom_llm_provider,
67
+ 'timeout': timeout,
68
+ }
69
+
70
+ if validation_file:
71
+ call_kwargs['validation_file'] = validation_file
72
+ if hyperparameters:
73
+ call_kwargs['hyperparameters'] = hyperparameters
74
+ if suffix:
75
+ call_kwargs['suffix'] = suffix
76
+ if api_key:
77
+ call_kwargs['api_key'] = api_key
78
+ if api_base:
79
+ call_kwargs['api_base'] = api_base
80
+
81
+ call_kwargs.update(kwargs)
82
+
83
+ response = litellm.create_fine_tuning_job(**call_kwargs)
84
+
85
+ error = None
86
+ if hasattr(response, 'error') and response.error:
87
+ error = {
88
+ 'code': getattr(response.error, 'code', None),
89
+ 'message': getattr(response.error, 'message', None),
90
+ }
91
+
92
+ return FineTuningResult(
93
+ id=getattr(response, 'id', ''),
94
+ object=getattr(response, 'object', 'fine_tuning.job'),
95
+ model=getattr(response, 'model', model),
96
+ status=getattr(response, 'status', None),
97
+ training_file=getattr(response, 'training_file', training_file),
98
+ validation_file=getattr(response, 'validation_file', validation_file),
99
+ fine_tuned_model=getattr(response, 'fine_tuned_model', None),
100
+ created_at=getattr(response, 'created_at', None),
101
+ finished_at=getattr(response, 'finished_at', None),
102
+ trained_tokens=getattr(response, 'trained_tokens', None),
103
+ error=error,
104
+ )
105
+
106
+
107
+ async def afine_tuning_create(
108
+ training_file: str,
109
+ model: str = "gpt-4o-mini-2024-07-18",
110
+ validation_file: Optional[str] = None,
111
+ hyperparameters: Optional[Dict[str, Any]] = None,
112
+ suffix: Optional[str] = None,
113
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
114
+ timeout: float = 600.0,
115
+ api_key: Optional[str] = None,
116
+ api_base: Optional[str] = None,
117
+ **kwargs
118
+ ) -> FineTuningResult:
119
+ """
120
+ Async: Create a fine-tuning job.
121
+
122
+ See fine_tuning_create() for full documentation.
123
+ """
124
+ import litellm
125
+
126
+ call_kwargs = {
127
+ 'training_file': training_file,
128
+ 'model': model,
129
+ 'custom_llm_provider': custom_llm_provider,
130
+ 'timeout': timeout,
131
+ }
132
+
133
+ if validation_file:
134
+ call_kwargs['validation_file'] = validation_file
135
+ if hyperparameters:
136
+ call_kwargs['hyperparameters'] = hyperparameters
137
+ if suffix:
138
+ call_kwargs['suffix'] = suffix
139
+ if api_key:
140
+ call_kwargs['api_key'] = api_key
141
+ if api_base:
142
+ call_kwargs['api_base'] = api_base
143
+
144
+ call_kwargs.update(kwargs)
145
+
146
+ response = await litellm.acreate_fine_tuning_job(**call_kwargs)
147
+
148
+ error = None
149
+ if hasattr(response, 'error') and response.error:
150
+ error = {
151
+ 'code': getattr(response.error, 'code', None),
152
+ 'message': getattr(response.error, 'message', None),
153
+ }
154
+
155
+ return FineTuningResult(
156
+ id=getattr(response, 'id', ''),
157
+ object=getattr(response, 'object', 'fine_tuning.job'),
158
+ model=getattr(response, 'model', model),
159
+ status=getattr(response, 'status', None),
160
+ training_file=getattr(response, 'training_file', training_file),
161
+ validation_file=getattr(response, 'validation_file', validation_file),
162
+ fine_tuned_model=getattr(response, 'fine_tuned_model', None),
163
+ created_at=getattr(response, 'created_at', None),
164
+ finished_at=getattr(response, 'finished_at', None),
165
+ trained_tokens=getattr(response, 'trained_tokens', None),
166
+ error=error,
167
+ )
168
+
169
+
170
+ def fine_tuning_list(
171
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
172
+ after: Optional[str] = None,
173
+ limit: int = 20,
174
+ api_key: Optional[str] = None,
175
+ api_base: Optional[str] = None,
176
+ **kwargs
177
+ ) -> List[FineTuningResult]:
178
+ """
179
+ List fine-tuning jobs.
180
+
181
+ Args:
182
+ custom_llm_provider: Provider
183
+ after: Cursor for pagination
184
+ limit: Maximum number of jobs to return
185
+ api_key: Optional API key override
186
+ api_base: Optional API base URL override
187
+
188
+ Returns:
189
+ List of FineTuningResult objects
190
+ """
191
+ import litellm
192
+
193
+ call_kwargs = {
194
+ 'custom_llm_provider': custom_llm_provider,
195
+ 'limit': limit,
196
+ }
197
+
198
+ if after:
199
+ call_kwargs['after'] = after
200
+ if api_key:
201
+ call_kwargs['api_key'] = api_key
202
+ if api_base:
203
+ call_kwargs['api_base'] = api_base
204
+
205
+ call_kwargs.update(kwargs)
206
+
207
+ response = litellm.list_fine_tuning_jobs(**call_kwargs)
208
+
209
+ results = []
210
+ data = getattr(response, 'data', response) if hasattr(response, 'data') else response
211
+ if isinstance(data, list):
212
+ for item in data:
213
+ error = None
214
+ if hasattr(item, 'error') and item.error:
215
+ error = {
216
+ 'code': getattr(item.error, 'code', None),
217
+ 'message': getattr(item.error, 'message', None),
218
+ }
219
+
220
+ results.append(FineTuningResult(
221
+ id=getattr(item, 'id', ''),
222
+ object=getattr(item, 'object', 'fine_tuning.job'),
223
+ model=getattr(item, 'model', None),
224
+ status=getattr(item, 'status', None),
225
+ training_file=getattr(item, 'training_file', None),
226
+ validation_file=getattr(item, 'validation_file', None),
227
+ fine_tuned_model=getattr(item, 'fine_tuned_model', None),
228
+ created_at=getattr(item, 'created_at', None),
229
+ finished_at=getattr(item, 'finished_at', None),
230
+ trained_tokens=getattr(item, 'trained_tokens', None),
231
+ error=error,
232
+ ))
233
+
234
+ return results
235
+
236
+
237
+ async def afine_tuning_list(
238
+ custom_llm_provider: Literal["openai", "azure"] = "openai",
239
+ after: Optional[str] = None,
240
+ limit: int = 20,
241
+ api_key: Optional[str] = None,
242
+ api_base: Optional[str] = None,
243
+ **kwargs
244
+ ) -> List[FineTuningResult]:
245
+ """
246
+ Async: List fine-tuning jobs.
247
+
248
+ See fine_tuning_list() for full documentation.
249
+ """
250
+ import litellm
251
+
252
+ call_kwargs = {
253
+ 'custom_llm_provider': custom_llm_provider,
254
+ 'limit': limit,
255
+ }
256
+
257
+ if after:
258
+ call_kwargs['after'] = after
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.alist_fine_tuning_jobs(**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
+ error = None
273
+ if hasattr(item, 'error') and item.error:
274
+ error = {
275
+ 'code': getattr(item.error, 'code', None),
276
+ 'message': getattr(item.error, 'message', None),
277
+ }
278
+
279
+ results.append(FineTuningResult(
280
+ id=getattr(item, 'id', ''),
281
+ object=getattr(item, 'object', 'fine_tuning.job'),
282
+ model=getattr(item, 'model', None),
283
+ status=getattr(item, 'status', None),
284
+ training_file=getattr(item, 'training_file', None),
285
+ validation_file=getattr(item, 'validation_file', None),
286
+ fine_tuned_model=getattr(item, 'fine_tuned_model', None),
287
+ created_at=getattr(item, 'created_at', None),
288
+ finished_at=getattr(item, 'finished_at', None),
289
+ trained_tokens=getattr(item, 'trained_tokens', None),
290
+ error=error,
291
+ ))
292
+
293
+ return results
@@ -0,0 +1,182 @@
1
+ """
2
+ Guardrails Capabilities Module
3
+
4
+ Provides content guardrails and safety checks functionality.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Any, Dict, List
9
+
10
+
11
+ @dataclass
12
+ class GuardrailResult:
13
+ """Result from guardrail check."""
14
+ passed: bool
15
+ violations: Optional[List[Dict[str, Any]]] = None
16
+ modified_content: Optional[str] = None
17
+ original_content: Optional[str] = None
18
+ guardrail_name: Optional[str] = None
19
+ metadata: Dict[str, Any] = field(default_factory=dict)
20
+
21
+
22
+ def apply_guardrail(
23
+ content: str,
24
+ guardrail_name: str = "default",
25
+ rules: Optional[List[str]] = None,
26
+ model: str = "gpt-4o-mini",
27
+ timeout: float = 60.0,
28
+ api_key: Optional[str] = None,
29
+ api_base: Optional[str] = None,
30
+ metadata: Optional[Dict[str, Any]] = None,
31
+ **kwargs
32
+ ) -> GuardrailResult:
33
+ """
34
+ Apply a guardrail to content.
35
+
36
+ Args:
37
+ content: Content to check
38
+ guardrail_name: Name of the guardrail
39
+ rules: List of rules to apply
40
+ model: Model to use for guardrail checking
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
+ GuardrailResult with check results
48
+
49
+ Example:
50
+ >>> result = apply_guardrail("Some content", rules=["no_pii", "no_profanity"])
51
+ >>> print(result.passed)
52
+ """
53
+ import litellm
54
+
55
+ # Build guardrail prompt
56
+ rules_text = ""
57
+ if rules:
58
+ rules_text = "\n".join(f"- {rule}" for rule in rules)
59
+ else:
60
+ rules_text = """- No personally identifiable information (PII)
61
+ - No profanity or offensive language
62
+ - No harmful or dangerous content
63
+ - No misinformation"""
64
+
65
+ check_prompt = f"""You are a content guardrail. Check the following content against these rules:
66
+
67
+ {rules_text}
68
+
69
+ Content to check:
70
+ {content}
71
+
72
+ Respond with a JSON object:
73
+ {{"passed": true/false, "violations": ["list of violations if any"], "modified_content": "cleaned content if needed"}}
74
+
75
+ Only respond with the JSON, no other text."""
76
+
77
+ try:
78
+ response = litellm.completion(
79
+ model=model,
80
+ messages=[{"role": "user", "content": check_prompt}],
81
+ timeout=timeout,
82
+ api_key=api_key,
83
+ api_base=api_base,
84
+ response_format={"type": "json_object"},
85
+ **kwargs
86
+ )
87
+
88
+ import json
89
+ result_text = response.choices[0].message.content
90
+ result_data = json.loads(result_text)
91
+
92
+ return GuardrailResult(
93
+ passed=result_data.get("passed", True),
94
+ violations=result_data.get("violations"),
95
+ modified_content=result_data.get("modified_content"),
96
+ original_content=content,
97
+ guardrail_name=guardrail_name,
98
+ metadata=metadata or {},
99
+ )
100
+ except Exception as e:
101
+ # On error, fail safe (pass through)
102
+ return GuardrailResult(
103
+ passed=True,
104
+ violations=None,
105
+ modified_content=None,
106
+ original_content=content,
107
+ guardrail_name=guardrail_name,
108
+ metadata={"error": str(e), **(metadata or {})},
109
+ )
110
+
111
+
112
+ async def aapply_guardrail(
113
+ content: str,
114
+ guardrail_name: str = "default",
115
+ rules: Optional[List[str]] = None,
116
+ model: str = "gpt-4o-mini",
117
+ timeout: float = 60.0,
118
+ api_key: Optional[str] = None,
119
+ api_base: Optional[str] = None,
120
+ metadata: Optional[Dict[str, Any]] = None,
121
+ **kwargs
122
+ ) -> GuardrailResult:
123
+ """
124
+ Async: Apply a guardrail to content.
125
+
126
+ See apply_guardrail() for full documentation.
127
+ """
128
+ import litellm
129
+
130
+ rules_text = ""
131
+ if rules:
132
+ rules_text = "\n".join(f"- {rule}" for rule in rules)
133
+ else:
134
+ rules_text = """- No personally identifiable information (PII)
135
+ - No profanity or offensive language
136
+ - No harmful or dangerous content
137
+ - No misinformation"""
138
+
139
+ check_prompt = f"""You are a content guardrail. Check the following content against these rules:
140
+
141
+ {rules_text}
142
+
143
+ Content to check:
144
+ {content}
145
+
146
+ Respond with a JSON object:
147
+ {{"passed": true/false, "violations": ["list of violations if any"], "modified_content": "cleaned content if needed"}}
148
+
149
+ Only respond with the JSON, no other text."""
150
+
151
+ try:
152
+ response = await litellm.acompletion(
153
+ model=model,
154
+ messages=[{"role": "user", "content": check_prompt}],
155
+ timeout=timeout,
156
+ api_key=api_key,
157
+ api_base=api_base,
158
+ response_format={"type": "json_object"},
159
+ **kwargs
160
+ )
161
+
162
+ import json
163
+ result_text = response.choices[0].message.content
164
+ result_data = json.loads(result_text)
165
+
166
+ return GuardrailResult(
167
+ passed=result_data.get("passed", True),
168
+ violations=result_data.get("violations"),
169
+ modified_content=result_data.get("modified_content"),
170
+ original_content=content,
171
+ guardrail_name=guardrail_name,
172
+ metadata=metadata or {},
173
+ )
174
+ except Exception as e:
175
+ return GuardrailResult(
176
+ passed=True,
177
+ violations=None,
178
+ modified_content=None,
179
+ original_content=content,
180
+ guardrail_name=guardrail_name,
181
+ metadata={"error": str(e), **(metadata or {})},
182
+ )