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,165 @@
1
+ """
2
+ Rerank Capabilities Module
3
+
4
+ Provides document reranking 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 RerankResult:
13
+ """Result from document reranking."""
14
+ results: List[Dict[str, Any]]
15
+ model: Optional[str] = None
16
+ metadata: Dict[str, Any] = field(default_factory=dict)
17
+
18
+
19
+ def rerank(
20
+ query: str,
21
+ documents: List[Union[str, Dict[str, Any]]],
22
+ model: str = "cohere/rerank-english-v3.0",
23
+ top_n: Optional[int] = None,
24
+ rank_fields: Optional[List[str]] = None,
25
+ return_documents: bool = True,
26
+ max_chunks_per_doc: Optional[int] = None,
27
+ timeout: float = 600.0,
28
+ api_key: Optional[str] = None,
29
+ api_base: Optional[str] = None,
30
+ metadata: Optional[Dict[str, Any]] = None,
31
+ **kwargs
32
+ ) -> RerankResult:
33
+ """
34
+ Rerank documents based on relevance to a query.
35
+
36
+ Args:
37
+ query: The query to rank documents against
38
+ documents: List of documents (strings or dicts with text field)
39
+ model: Model name (e.g., "cohere/rerank-english-v3.0")
40
+ top_n: Number of top results to return
41
+ rank_fields: Fields to use for ranking (for dict documents)
42
+ return_documents: Whether to return document content
43
+ max_chunks_per_doc: Maximum chunks per document
44
+ timeout: Request timeout in seconds
45
+ api_key: Optional API key override
46
+ api_base: Optional API base URL override
47
+ metadata: Optional metadata for tracing
48
+
49
+ Returns:
50
+ RerankResult with ranked documents
51
+
52
+ Example:
53
+ >>> result = rerank("What is AI?", ["AI is...", "Machine learning..."])
54
+ >>> for r in result.results:
55
+ ... print(r['index'], r['relevance_score'])
56
+ """
57
+ import litellm
58
+
59
+ call_kwargs = {
60
+ 'model': model,
61
+ 'query': query,
62
+ 'documents': documents,
63
+ 'return_documents': return_documents,
64
+ 'timeout': timeout,
65
+ }
66
+
67
+ if top_n:
68
+ call_kwargs['top_n'] = top_n
69
+ if rank_fields:
70
+ call_kwargs['rank_fields'] = rank_fields
71
+ if max_chunks_per_doc:
72
+ call_kwargs['max_chunks_per_doc'] = max_chunks_per_doc
73
+ if api_key:
74
+ call_kwargs['api_key'] = api_key
75
+ if api_base:
76
+ call_kwargs['api_base'] = api_base
77
+
78
+ call_kwargs.update(kwargs)
79
+
80
+ if metadata:
81
+ call_kwargs['metadata'] = metadata
82
+
83
+ response = litellm.rerank(**call_kwargs)
84
+
85
+ results = []
86
+ if hasattr(response, 'results'):
87
+ for item in response.results:
88
+ result_dict = {
89
+ 'index': getattr(item, 'index', 0),
90
+ 'relevance_score': getattr(item, 'relevance_score', 0.0),
91
+ }
92
+ if return_documents and hasattr(item, 'document'):
93
+ result_dict['document'] = item.document
94
+ results.append(result_dict)
95
+
96
+ return RerankResult(
97
+ results=results,
98
+ model=model,
99
+ metadata=metadata or {},
100
+ )
101
+
102
+
103
+ async def arerank(
104
+ query: str,
105
+ documents: List[Union[str, Dict[str, Any]]],
106
+ model: str = "cohere/rerank-english-v3.0",
107
+ top_n: Optional[int] = None,
108
+ rank_fields: Optional[List[str]] = None,
109
+ return_documents: bool = True,
110
+ max_chunks_per_doc: Optional[int] = None,
111
+ timeout: float = 600.0,
112
+ api_key: Optional[str] = None,
113
+ api_base: Optional[str] = None,
114
+ metadata: Optional[Dict[str, Any]] = None,
115
+ **kwargs
116
+ ) -> RerankResult:
117
+ """
118
+ Async: Rerank documents based on relevance to a query.
119
+
120
+ See rerank() for full documentation.
121
+ """
122
+ import litellm
123
+
124
+ call_kwargs = {
125
+ 'model': model,
126
+ 'query': query,
127
+ 'documents': documents,
128
+ 'return_documents': return_documents,
129
+ 'timeout': timeout,
130
+ }
131
+
132
+ if top_n:
133
+ call_kwargs['top_n'] = top_n
134
+ if rank_fields:
135
+ call_kwargs['rank_fields'] = rank_fields
136
+ if max_chunks_per_doc:
137
+ call_kwargs['max_chunks_per_doc'] = max_chunks_per_doc
138
+ if api_key:
139
+ call_kwargs['api_key'] = api_key
140
+ if api_base:
141
+ call_kwargs['api_base'] = api_base
142
+
143
+ call_kwargs.update(kwargs)
144
+
145
+ if metadata:
146
+ call_kwargs['metadata'] = metadata
147
+
148
+ response = await litellm.arerank(**call_kwargs)
149
+
150
+ results = []
151
+ if hasattr(response, 'results'):
152
+ for item in response.results:
153
+ result_dict = {
154
+ 'index': getattr(item, 'index', 0),
155
+ 'relevance_score': getattr(item, 'relevance_score', 0.0),
156
+ }
157
+ if return_documents and hasattr(item, 'document'):
158
+ result_dict['document'] = item.document
159
+ results.append(result_dict)
160
+
161
+ return RerankResult(
162
+ results=results,
163
+ model=model,
164
+ metadata=metadata or {},
165
+ )
@@ -0,0 +1,266 @@
1
+ """
2
+ Responses Capabilities Module
3
+
4
+ Provides response management functionality via LiteLLM.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Any, Dict, List
9
+
10
+
11
+ @dataclass
12
+ class ResponseResult:
13
+ """Result from response operations."""
14
+ id: str
15
+ object: str = "response"
16
+ output: Optional[List[Dict[str, Any]]] = None
17
+ status: Optional[str] = None
18
+ model: Optional[str] = None
19
+ usage: Optional[Dict[str, int]] = None
20
+ metadata: Dict[str, Any] = field(default_factory=dict)
21
+
22
+
23
+ def responses_create(
24
+ model: str,
25
+ input: str,
26
+ instructions: Optional[str] = None,
27
+ tools: Optional[List[Dict[str, Any]]] = None,
28
+ temperature: float = 1.0,
29
+ max_output_tokens: Optional[int] = None,
30
+ timeout: float = 600.0,
31
+ api_key: Optional[str] = None,
32
+ api_base: Optional[str] = None,
33
+ metadata: Optional[Dict[str, Any]] = None,
34
+ **kwargs
35
+ ) -> ResponseResult:
36
+ """
37
+ Create a response using the Responses API.
38
+
39
+ Args:
40
+ model: Model to use
41
+ input: Input text or messages
42
+ instructions: System instructions
43
+ tools: List of tools
44
+ temperature: Sampling temperature
45
+ max_output_tokens: Maximum output tokens
46
+ timeout: Request timeout in seconds
47
+ api_key: Optional API key override
48
+ api_base: Optional API base URL override
49
+ metadata: Optional metadata for tracing
50
+
51
+ Returns:
52
+ ResponseResult with response data
53
+
54
+ Example:
55
+ >>> result = responses_create(
56
+ ... model="gpt-4o-mini",
57
+ ... input="What is 2+2?"
58
+ ... )
59
+ >>> print(result.output)
60
+ """
61
+ import litellm
62
+
63
+ call_kwargs = {
64
+ 'model': model,
65
+ 'input': input,
66
+ 'temperature': temperature,
67
+ 'timeout': timeout,
68
+ }
69
+
70
+ if instructions:
71
+ call_kwargs['instructions'] = instructions
72
+ if tools:
73
+ call_kwargs['tools'] = tools
74
+ if max_output_tokens:
75
+ call_kwargs['max_output_tokens'] = max_output_tokens
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
+ if metadata:
84
+ call_kwargs['metadata'] = metadata
85
+
86
+ # Try to use responses API if available
87
+ try:
88
+ response = litellm.responses(**call_kwargs)
89
+
90
+ output = None
91
+ if hasattr(response, 'output'):
92
+ output = []
93
+ for item in response.output:
94
+ output.append({
95
+ 'type': getattr(item, 'type', 'message'),
96
+ 'content': getattr(item, 'content', None),
97
+ })
98
+
99
+ usage = None
100
+ if hasattr(response, 'usage'):
101
+ usage = {
102
+ 'input_tokens': getattr(response.usage, 'input_tokens', 0),
103
+ 'output_tokens': getattr(response.usage, 'output_tokens', 0),
104
+ 'total_tokens': getattr(response.usage, 'total_tokens', 0),
105
+ }
106
+
107
+ return ResponseResult(
108
+ id=getattr(response, 'id', ''),
109
+ object=getattr(response, 'object', 'response'),
110
+ output=output,
111
+ status=getattr(response, 'status', 'completed'),
112
+ model=getattr(response, 'model', model),
113
+ usage=usage,
114
+ metadata=metadata or {},
115
+ )
116
+ except AttributeError:
117
+ # Fallback to completion if responses not available
118
+ messages = [{"role": "user", "content": input}]
119
+ if instructions:
120
+ messages.insert(0, {"role": "system", "content": instructions})
121
+
122
+ response = litellm.completion(
123
+ model=model,
124
+ messages=messages,
125
+ temperature=temperature,
126
+ max_tokens=max_output_tokens,
127
+ timeout=timeout,
128
+ api_key=api_key,
129
+ api_base=api_base,
130
+ **kwargs
131
+ )
132
+
133
+ output = [{
134
+ 'type': 'message',
135
+ 'content': response.choices[0].message.content if response.choices else None,
136
+ }]
137
+
138
+ usage = None
139
+ if hasattr(response, 'usage'):
140
+ usage = {
141
+ 'input_tokens': getattr(response.usage, 'prompt_tokens', 0),
142
+ 'output_tokens': getattr(response.usage, 'completion_tokens', 0),
143
+ 'total_tokens': getattr(response.usage, 'total_tokens', 0),
144
+ }
145
+
146
+ return ResponseResult(
147
+ id=getattr(response, 'id', ''),
148
+ object='response',
149
+ output=output,
150
+ status='completed',
151
+ model=model,
152
+ usage=usage,
153
+ metadata=metadata or {},
154
+ )
155
+
156
+
157
+ async def aresponses_create(
158
+ model: str,
159
+ input: str,
160
+ instructions: Optional[str] = None,
161
+ tools: Optional[List[Dict[str, Any]]] = None,
162
+ temperature: float = 1.0,
163
+ max_output_tokens: Optional[int] = None,
164
+ timeout: float = 600.0,
165
+ api_key: Optional[str] = None,
166
+ api_base: Optional[str] = None,
167
+ metadata: Optional[Dict[str, Any]] = None,
168
+ **kwargs
169
+ ) -> ResponseResult:
170
+ """
171
+ Async: Create a response using the Responses API.
172
+
173
+ See responses_create() for full documentation.
174
+ """
175
+ import litellm
176
+
177
+ call_kwargs = {
178
+ 'model': model,
179
+ 'input': input,
180
+ 'temperature': temperature,
181
+ 'timeout': timeout,
182
+ }
183
+
184
+ if instructions:
185
+ call_kwargs['instructions'] = instructions
186
+ if tools:
187
+ call_kwargs['tools'] = tools
188
+ if max_output_tokens:
189
+ call_kwargs['max_output_tokens'] = max_output_tokens
190
+ if api_key:
191
+ call_kwargs['api_key'] = api_key
192
+ if api_base:
193
+ call_kwargs['api_base'] = api_base
194
+
195
+ call_kwargs.update(kwargs)
196
+
197
+ if metadata:
198
+ call_kwargs['metadata'] = metadata
199
+
200
+ try:
201
+ response = await litellm.aresponses(**call_kwargs)
202
+
203
+ output = None
204
+ if hasattr(response, 'output'):
205
+ output = []
206
+ for item in response.output:
207
+ output.append({
208
+ 'type': getattr(item, 'type', 'message'),
209
+ 'content': getattr(item, 'content', None),
210
+ })
211
+
212
+ usage = None
213
+ if hasattr(response, 'usage'):
214
+ usage = {
215
+ 'input_tokens': getattr(response.usage, 'input_tokens', 0),
216
+ 'output_tokens': getattr(response.usage, 'output_tokens', 0),
217
+ 'total_tokens': getattr(response.usage, 'total_tokens', 0),
218
+ }
219
+
220
+ return ResponseResult(
221
+ id=getattr(response, 'id', ''),
222
+ object=getattr(response, 'object', 'response'),
223
+ output=output,
224
+ status=getattr(response, 'status', 'completed'),
225
+ model=getattr(response, 'model', model),
226
+ usage=usage,
227
+ metadata=metadata or {},
228
+ )
229
+ except AttributeError:
230
+ messages = [{"role": "user", "content": input}]
231
+ if instructions:
232
+ messages.insert(0, {"role": "system", "content": instructions})
233
+
234
+ response = await litellm.acompletion(
235
+ model=model,
236
+ messages=messages,
237
+ temperature=temperature,
238
+ max_tokens=max_output_tokens,
239
+ timeout=timeout,
240
+ api_key=api_key,
241
+ api_base=api_base,
242
+ **kwargs
243
+ )
244
+
245
+ output = [{
246
+ 'type': 'message',
247
+ 'content': response.choices[0].message.content if response.choices else None,
248
+ }]
249
+
250
+ usage = None
251
+ if hasattr(response, 'usage'):
252
+ usage = {
253
+ 'input_tokens': getattr(response.usage, 'prompt_tokens', 0),
254
+ 'output_tokens': getattr(response.usage, 'completion_tokens', 0),
255
+ 'total_tokens': getattr(response.usage, 'total_tokens', 0),
256
+ }
257
+
258
+ return ResponseResult(
259
+ id=getattr(response, 'id', ''),
260
+ object='response',
261
+ output=output,
262
+ status='completed',
263
+ model=model,
264
+ usage=usage,
265
+ metadata=metadata or {},
266
+ )
@@ -0,0 +1,109 @@
1
+ """
2
+ Search Capabilities Module
3
+
4
+ Provides search functionality.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Any, Dict, List
9
+
10
+
11
+ @dataclass
12
+ class SearchResult:
13
+ """Result from search operations."""
14
+ results: List[Dict[str, Any]]
15
+ query: str
16
+ total: Optional[int] = None
17
+ metadata: Dict[str, Any] = field(default_factory=dict)
18
+
19
+
20
+ def search(
21
+ query: str,
22
+ sources: Optional[List[str]] = None,
23
+ max_results: int = 10,
24
+ timeout: float = 600.0,
25
+ api_key: Optional[str] = None,
26
+ api_base: Optional[str] = None,
27
+ metadata: Optional[Dict[str, Any]] = None,
28
+ **kwargs
29
+ ) -> SearchResult:
30
+ """
31
+ Perform a search query.
32
+
33
+ Args:
34
+ query: Search query
35
+ sources: Optional list of sources to search
36
+ max_results: Maximum number of results
37
+ timeout: Request timeout in seconds
38
+ api_key: Optional API key override
39
+ api_base: Optional API base URL override
40
+ metadata: Optional metadata for tracing
41
+
42
+ Returns:
43
+ SearchResult with search results
44
+
45
+ Example:
46
+ >>> result = search("What is AI?")
47
+ >>> for r in result.results:
48
+ ... print(r['title'], r['url'])
49
+ """
50
+ # Search can be implemented via various providers
51
+ # This is a placeholder that integrates with existing search tools
52
+
53
+ results = []
54
+
55
+ # Try to use web search if available
56
+ try:
57
+ from praisonaiagents.tools.duckduckgo_tools import duckduckgo_search
58
+ search_results = duckduckgo_search(query, max_results=max_results)
59
+
60
+ if isinstance(search_results, list):
61
+ for item in search_results:
62
+ results.append({
63
+ 'title': item.get('title', ''),
64
+ 'url': item.get('href', item.get('url', '')),
65
+ 'snippet': item.get('body', item.get('snippet', '')),
66
+ })
67
+ elif isinstance(search_results, str):
68
+ results.append({
69
+ 'title': 'Search Result',
70
+ 'url': '',
71
+ 'snippet': search_results,
72
+ })
73
+ except ImportError:
74
+ pass
75
+
76
+ return SearchResult(
77
+ results=results,
78
+ query=query,
79
+ total=len(results),
80
+ metadata=metadata or {},
81
+ )
82
+
83
+
84
+ async def asearch(
85
+ query: str,
86
+ sources: Optional[List[str]] = None,
87
+ max_results: int = 10,
88
+ timeout: float = 600.0,
89
+ api_key: Optional[str] = None,
90
+ api_base: Optional[str] = None,
91
+ metadata: Optional[Dict[str, Any]] = None,
92
+ **kwargs
93
+ ) -> SearchResult:
94
+ """
95
+ Async: Perform a search query.
96
+
97
+ See search() for full documentation.
98
+ """
99
+ # For now, delegate to sync version
100
+ return search(
101
+ query=query,
102
+ sources=sources,
103
+ max_results=max_results,
104
+ timeout=timeout,
105
+ api_key=api_key,
106
+ api_base=api_base,
107
+ metadata=metadata,
108
+ **kwargs
109
+ )
@@ -0,0 +1,133 @@
1
+ """
2
+ Skills Capabilities Module
3
+
4
+ Provides agent skills functionality.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Optional, Any, Dict, List
9
+
10
+
11
+ @dataclass
12
+ class SkillResult:
13
+ """Result from skill operations."""
14
+ name: str
15
+ description: Optional[str] = None
16
+ path: Optional[str] = None
17
+ instructions: Optional[str] = None
18
+ metadata: Dict[str, Any] = field(default_factory=dict)
19
+
20
+
21
+ def skill_list(
22
+ skill_dirs: Optional[List[str]] = None,
23
+ include_defaults: bool = True,
24
+ metadata: Optional[Dict[str, Any]] = None,
25
+ **kwargs
26
+ ) -> List[SkillResult]:
27
+ """
28
+ List available skills.
29
+
30
+ Args:
31
+ skill_dirs: Optional list of directories to scan
32
+ include_defaults: Whether to include default skill directories
33
+ metadata: Optional metadata for tracing
34
+
35
+ Returns:
36
+ List of SkillResult objects
37
+
38
+ Example:
39
+ >>> skills = skill_list()
40
+ >>> for skill in skills:
41
+ ... print(skill.name)
42
+ """
43
+ try:
44
+ from praisonaiagents.skills import discover_skills
45
+
46
+ skills = discover_skills(skill_dirs, include_defaults)
47
+
48
+ results = []
49
+ for skill in skills:
50
+ results.append(SkillResult(
51
+ name=skill.name,
52
+ description=skill.description,
53
+ path=str(skill.path) if skill.path else None,
54
+ metadata=metadata or {},
55
+ ))
56
+
57
+ return results
58
+ except ImportError:
59
+ return []
60
+
61
+
62
+ async def askill_list(
63
+ skill_dirs: Optional[List[str]] = None,
64
+ include_defaults: bool = True,
65
+ metadata: Optional[Dict[str, Any]] = None,
66
+ **kwargs
67
+ ) -> List[SkillResult]:
68
+ """
69
+ Async: List available skills.
70
+
71
+ See skill_list() for full documentation.
72
+ """
73
+ return skill_list(
74
+ skill_dirs=skill_dirs,
75
+ include_defaults=include_defaults,
76
+ metadata=metadata,
77
+ **kwargs
78
+ )
79
+
80
+
81
+ def skill_load(
82
+ skill_name: str,
83
+ skill_dirs: Optional[List[str]] = None,
84
+ metadata: Optional[Dict[str, Any]] = None,
85
+ **kwargs
86
+ ) -> Optional[SkillResult]:
87
+ """
88
+ Load a skill by name.
89
+
90
+ Args:
91
+ skill_name: Name of the skill to load
92
+ skill_dirs: Optional list of directories to scan
93
+ metadata: Optional metadata for tracing
94
+
95
+ Returns:
96
+ SkillResult with skill details or None if not found
97
+ """
98
+ try:
99
+ from praisonaiagents.skills import load_skill
100
+
101
+ skill = load_skill(skill_name, skill_dirs)
102
+
103
+ if skill:
104
+ return SkillResult(
105
+ name=skill.name,
106
+ description=skill.description,
107
+ path=str(skill.path) if skill.path else None,
108
+ instructions=skill.instructions if hasattr(skill, 'instructions') else None,
109
+ metadata=metadata or {},
110
+ )
111
+
112
+ return None
113
+ except ImportError:
114
+ return None
115
+
116
+
117
+ async def askill_load(
118
+ skill_name: str,
119
+ skill_dirs: Optional[List[str]] = None,
120
+ metadata: Optional[Dict[str, Any]] = None,
121
+ **kwargs
122
+ ) -> Optional[SkillResult]:
123
+ """
124
+ Async: Load a skill by name.
125
+
126
+ See skill_load() for full documentation.
127
+ """
128
+ return skill_load(
129
+ skill_name=skill_name,
130
+ skill_dirs=skill_dirs,
131
+ metadata=metadata,
132
+ **kwargs
133
+ )