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.
- praisonai/__init__.py +54 -0
- praisonai/__main__.py +15 -0
- praisonai/acp/__init__.py +54 -0
- praisonai/acp/config.py +159 -0
- praisonai/acp/server.py +587 -0
- praisonai/acp/session.py +219 -0
- praisonai/adapters/__init__.py +50 -0
- praisonai/adapters/readers.py +395 -0
- praisonai/adapters/rerankers.py +315 -0
- praisonai/adapters/retrievers.py +394 -0
- praisonai/adapters/vector_stores.py +409 -0
- praisonai/agent_scheduler.py +337 -0
- praisonai/agents_generator.py +903 -0
- praisonai/api/call.py +292 -0
- praisonai/auto.py +1197 -0
- praisonai/capabilities/__init__.py +275 -0
- praisonai/capabilities/a2a.py +140 -0
- praisonai/capabilities/assistants.py +283 -0
- praisonai/capabilities/audio.py +320 -0
- praisonai/capabilities/batches.py +469 -0
- praisonai/capabilities/completions.py +336 -0
- praisonai/capabilities/container_files.py +155 -0
- praisonai/capabilities/containers.py +93 -0
- praisonai/capabilities/embeddings.py +158 -0
- praisonai/capabilities/files.py +467 -0
- praisonai/capabilities/fine_tuning.py +293 -0
- praisonai/capabilities/guardrails.py +182 -0
- praisonai/capabilities/images.py +330 -0
- praisonai/capabilities/mcp.py +190 -0
- praisonai/capabilities/messages.py +270 -0
- praisonai/capabilities/moderations.py +154 -0
- praisonai/capabilities/ocr.py +217 -0
- praisonai/capabilities/passthrough.py +204 -0
- praisonai/capabilities/rag.py +207 -0
- praisonai/capabilities/realtime.py +160 -0
- praisonai/capabilities/rerank.py +165 -0
- praisonai/capabilities/responses.py +266 -0
- praisonai/capabilities/search.py +109 -0
- praisonai/capabilities/skills.py +133 -0
- praisonai/capabilities/vector_store_files.py +334 -0
- praisonai/capabilities/vector_stores.py +304 -0
- praisonai/capabilities/videos.py +141 -0
- praisonai/chainlit_ui.py +304 -0
- praisonai/chat/__init__.py +106 -0
- praisonai/chat/app.py +125 -0
- praisonai/cli/__init__.py +26 -0
- praisonai/cli/app.py +213 -0
- praisonai/cli/commands/__init__.py +75 -0
- praisonai/cli/commands/acp.py +70 -0
- praisonai/cli/commands/completion.py +333 -0
- praisonai/cli/commands/config.py +166 -0
- praisonai/cli/commands/debug.py +142 -0
- praisonai/cli/commands/diag.py +55 -0
- praisonai/cli/commands/doctor.py +166 -0
- praisonai/cli/commands/environment.py +179 -0
- praisonai/cli/commands/lsp.py +112 -0
- praisonai/cli/commands/mcp.py +210 -0
- praisonai/cli/commands/profile.py +457 -0
- praisonai/cli/commands/run.py +228 -0
- praisonai/cli/commands/schedule.py +150 -0
- praisonai/cli/commands/serve.py +97 -0
- praisonai/cli/commands/session.py +212 -0
- praisonai/cli/commands/traces.py +145 -0
- praisonai/cli/commands/version.py +101 -0
- praisonai/cli/configuration/__init__.py +18 -0
- praisonai/cli/configuration/loader.py +353 -0
- praisonai/cli/configuration/paths.py +114 -0
- praisonai/cli/configuration/schema.py +164 -0
- praisonai/cli/features/__init__.py +268 -0
- praisonai/cli/features/acp.py +236 -0
- praisonai/cli/features/action_orchestrator.py +546 -0
- praisonai/cli/features/agent_scheduler.py +773 -0
- praisonai/cli/features/agent_tools.py +474 -0
- praisonai/cli/features/agents.py +375 -0
- praisonai/cli/features/at_mentions.py +471 -0
- praisonai/cli/features/auto_memory.py +182 -0
- praisonai/cli/features/autonomy_mode.py +490 -0
- praisonai/cli/features/background.py +356 -0
- praisonai/cli/features/base.py +168 -0
- praisonai/cli/features/capabilities.py +1326 -0
- praisonai/cli/features/checkpoints.py +338 -0
- praisonai/cli/features/code_intelligence.py +652 -0
- praisonai/cli/features/compaction.py +294 -0
- praisonai/cli/features/compare.py +534 -0
- praisonai/cli/features/cost_tracker.py +514 -0
- praisonai/cli/features/debug.py +810 -0
- praisonai/cli/features/deploy.py +517 -0
- praisonai/cli/features/diag.py +289 -0
- praisonai/cli/features/doctor/__init__.py +63 -0
- praisonai/cli/features/doctor/checks/__init__.py +24 -0
- praisonai/cli/features/doctor/checks/acp_checks.py +240 -0
- praisonai/cli/features/doctor/checks/config_checks.py +366 -0
- praisonai/cli/features/doctor/checks/db_checks.py +366 -0
- praisonai/cli/features/doctor/checks/env_checks.py +543 -0
- praisonai/cli/features/doctor/checks/lsp_checks.py +199 -0
- praisonai/cli/features/doctor/checks/mcp_checks.py +349 -0
- praisonai/cli/features/doctor/checks/memory_checks.py +268 -0
- praisonai/cli/features/doctor/checks/network_checks.py +251 -0
- praisonai/cli/features/doctor/checks/obs_checks.py +328 -0
- praisonai/cli/features/doctor/checks/performance_checks.py +235 -0
- praisonai/cli/features/doctor/checks/permissions_checks.py +259 -0
- praisonai/cli/features/doctor/checks/selftest_checks.py +322 -0
- praisonai/cli/features/doctor/checks/serve_checks.py +426 -0
- praisonai/cli/features/doctor/checks/skills_checks.py +231 -0
- praisonai/cli/features/doctor/checks/tools_checks.py +371 -0
- praisonai/cli/features/doctor/engine.py +266 -0
- praisonai/cli/features/doctor/formatters.py +310 -0
- praisonai/cli/features/doctor/handler.py +397 -0
- praisonai/cli/features/doctor/models.py +264 -0
- praisonai/cli/features/doctor/registry.py +239 -0
- praisonai/cli/features/endpoints.py +1019 -0
- praisonai/cli/features/eval.py +560 -0
- praisonai/cli/features/external_agents.py +231 -0
- praisonai/cli/features/fast_context.py +410 -0
- praisonai/cli/features/flow_display.py +566 -0
- praisonai/cli/features/git_integration.py +651 -0
- praisonai/cli/features/guardrail.py +171 -0
- praisonai/cli/features/handoff.py +185 -0
- praisonai/cli/features/hooks.py +583 -0
- praisonai/cli/features/image.py +384 -0
- praisonai/cli/features/interactive_runtime.py +585 -0
- praisonai/cli/features/interactive_tools.py +380 -0
- praisonai/cli/features/interactive_tui.py +603 -0
- praisonai/cli/features/jobs.py +632 -0
- praisonai/cli/features/knowledge.py +531 -0
- praisonai/cli/features/lite.py +244 -0
- praisonai/cli/features/lsp_cli.py +225 -0
- praisonai/cli/features/mcp.py +169 -0
- praisonai/cli/features/message_queue.py +587 -0
- praisonai/cli/features/metrics.py +211 -0
- praisonai/cli/features/n8n.py +673 -0
- praisonai/cli/features/observability.py +293 -0
- praisonai/cli/features/ollama.py +361 -0
- praisonai/cli/features/output_style.py +273 -0
- praisonai/cli/features/package.py +631 -0
- praisonai/cli/features/performance.py +308 -0
- praisonai/cli/features/persistence.py +636 -0
- praisonai/cli/features/profile.py +226 -0
- praisonai/cli/features/profiler/__init__.py +81 -0
- praisonai/cli/features/profiler/core.py +558 -0
- praisonai/cli/features/profiler/optimizations.py +652 -0
- praisonai/cli/features/profiler/suite.py +386 -0
- praisonai/cli/features/profiling.py +350 -0
- praisonai/cli/features/queue/__init__.py +73 -0
- praisonai/cli/features/queue/manager.py +395 -0
- praisonai/cli/features/queue/models.py +286 -0
- praisonai/cli/features/queue/persistence.py +564 -0
- praisonai/cli/features/queue/scheduler.py +484 -0
- praisonai/cli/features/queue/worker.py +372 -0
- praisonai/cli/features/recipe.py +1723 -0
- praisonai/cli/features/recipes.py +449 -0
- praisonai/cli/features/registry.py +229 -0
- praisonai/cli/features/repo_map.py +860 -0
- praisonai/cli/features/router.py +466 -0
- praisonai/cli/features/sandbox_executor.py +515 -0
- praisonai/cli/features/serve.py +829 -0
- praisonai/cli/features/session.py +222 -0
- praisonai/cli/features/skills.py +856 -0
- praisonai/cli/features/slash_commands.py +650 -0
- praisonai/cli/features/telemetry.py +179 -0
- praisonai/cli/features/templates.py +1384 -0
- praisonai/cli/features/thinking.py +305 -0
- praisonai/cli/features/todo.py +334 -0
- praisonai/cli/features/tools.py +680 -0
- praisonai/cli/features/tui/__init__.py +83 -0
- praisonai/cli/features/tui/app.py +580 -0
- praisonai/cli/features/tui/cli.py +566 -0
- praisonai/cli/features/tui/debug.py +511 -0
- praisonai/cli/features/tui/events.py +99 -0
- praisonai/cli/features/tui/mock_provider.py +328 -0
- praisonai/cli/features/tui/orchestrator.py +652 -0
- praisonai/cli/features/tui/screens/__init__.py +50 -0
- praisonai/cli/features/tui/screens/main.py +245 -0
- praisonai/cli/features/tui/screens/queue.py +174 -0
- praisonai/cli/features/tui/screens/session.py +124 -0
- praisonai/cli/features/tui/screens/settings.py +148 -0
- praisonai/cli/features/tui/widgets/__init__.py +56 -0
- praisonai/cli/features/tui/widgets/chat.py +261 -0
- praisonai/cli/features/tui/widgets/composer.py +224 -0
- praisonai/cli/features/tui/widgets/queue_panel.py +200 -0
- praisonai/cli/features/tui/widgets/status.py +167 -0
- praisonai/cli/features/tui/widgets/tool_panel.py +248 -0
- praisonai/cli/features/workflow.py +720 -0
- praisonai/cli/legacy.py +236 -0
- praisonai/cli/main.py +5559 -0
- praisonai/cli/schedule_cli.py +54 -0
- praisonai/cli/state/__init__.py +31 -0
- praisonai/cli/state/identifiers.py +161 -0
- praisonai/cli/state/sessions.py +313 -0
- praisonai/code/__init__.py +93 -0
- praisonai/code/agent_tools.py +344 -0
- praisonai/code/diff/__init__.py +21 -0
- praisonai/code/diff/diff_strategy.py +432 -0
- praisonai/code/tools/__init__.py +27 -0
- praisonai/code/tools/apply_diff.py +221 -0
- praisonai/code/tools/execute_command.py +275 -0
- praisonai/code/tools/list_files.py +274 -0
- praisonai/code/tools/read_file.py +206 -0
- praisonai/code/tools/search_replace.py +248 -0
- praisonai/code/tools/write_file.py +217 -0
- praisonai/code/utils/__init__.py +46 -0
- praisonai/code/utils/file_utils.py +307 -0
- praisonai/code/utils/ignore_utils.py +308 -0
- praisonai/code/utils/text_utils.py +276 -0
- praisonai/db/__init__.py +64 -0
- praisonai/db/adapter.py +531 -0
- praisonai/deploy/__init__.py +62 -0
- praisonai/deploy/api.py +231 -0
- praisonai/deploy/docker.py +454 -0
- praisonai/deploy/doctor.py +367 -0
- praisonai/deploy/main.py +327 -0
- praisonai/deploy/models.py +179 -0
- praisonai/deploy/providers/__init__.py +33 -0
- praisonai/deploy/providers/aws.py +331 -0
- praisonai/deploy/providers/azure.py +358 -0
- praisonai/deploy/providers/base.py +101 -0
- praisonai/deploy/providers/gcp.py +314 -0
- praisonai/deploy/schema.py +208 -0
- praisonai/deploy.py +185 -0
- praisonai/endpoints/__init__.py +53 -0
- praisonai/endpoints/a2u_server.py +410 -0
- praisonai/endpoints/discovery.py +165 -0
- praisonai/endpoints/providers/__init__.py +28 -0
- praisonai/endpoints/providers/a2a.py +253 -0
- praisonai/endpoints/providers/a2u.py +208 -0
- praisonai/endpoints/providers/agents_api.py +171 -0
- praisonai/endpoints/providers/base.py +231 -0
- praisonai/endpoints/providers/mcp.py +263 -0
- praisonai/endpoints/providers/recipe.py +206 -0
- praisonai/endpoints/providers/tools_mcp.py +150 -0
- praisonai/endpoints/registry.py +131 -0
- praisonai/endpoints/server.py +161 -0
- praisonai/inbuilt_tools/__init__.py +24 -0
- praisonai/inbuilt_tools/autogen_tools.py +117 -0
- praisonai/inc/__init__.py +2 -0
- praisonai/inc/config.py +96 -0
- praisonai/inc/models.py +155 -0
- praisonai/integrations/__init__.py +56 -0
- praisonai/integrations/base.py +303 -0
- praisonai/integrations/claude_code.py +270 -0
- praisonai/integrations/codex_cli.py +255 -0
- praisonai/integrations/cursor_cli.py +195 -0
- praisonai/integrations/gemini_cli.py +222 -0
- praisonai/jobs/__init__.py +67 -0
- praisonai/jobs/executor.py +425 -0
- praisonai/jobs/models.py +230 -0
- praisonai/jobs/router.py +314 -0
- praisonai/jobs/server.py +186 -0
- praisonai/jobs/store.py +203 -0
- praisonai/llm/__init__.py +66 -0
- praisonai/llm/registry.py +382 -0
- praisonai/mcp_server/__init__.py +152 -0
- praisonai/mcp_server/adapters/__init__.py +74 -0
- praisonai/mcp_server/adapters/agents.py +128 -0
- praisonai/mcp_server/adapters/capabilities.py +168 -0
- praisonai/mcp_server/adapters/cli_tools.py +568 -0
- praisonai/mcp_server/adapters/extended_capabilities.py +462 -0
- praisonai/mcp_server/adapters/knowledge.py +93 -0
- praisonai/mcp_server/adapters/memory.py +104 -0
- praisonai/mcp_server/adapters/prompts.py +306 -0
- praisonai/mcp_server/adapters/resources.py +124 -0
- praisonai/mcp_server/adapters/tools_bridge.py +280 -0
- praisonai/mcp_server/auth/__init__.py +48 -0
- praisonai/mcp_server/auth/api_key.py +291 -0
- praisonai/mcp_server/auth/oauth.py +460 -0
- praisonai/mcp_server/auth/oidc.py +289 -0
- praisonai/mcp_server/auth/scopes.py +260 -0
- praisonai/mcp_server/cli.py +852 -0
- praisonai/mcp_server/elicitation.py +445 -0
- praisonai/mcp_server/icons.py +302 -0
- praisonai/mcp_server/recipe_adapter.py +573 -0
- praisonai/mcp_server/recipe_cli.py +824 -0
- praisonai/mcp_server/registry.py +703 -0
- praisonai/mcp_server/sampling.py +422 -0
- praisonai/mcp_server/server.py +490 -0
- praisonai/mcp_server/tasks.py +443 -0
- praisonai/mcp_server/transports/__init__.py +18 -0
- praisonai/mcp_server/transports/http_stream.py +376 -0
- praisonai/mcp_server/transports/stdio.py +132 -0
- praisonai/persistence/__init__.py +84 -0
- praisonai/persistence/config.py +238 -0
- praisonai/persistence/conversation/__init__.py +25 -0
- praisonai/persistence/conversation/async_mysql.py +427 -0
- praisonai/persistence/conversation/async_postgres.py +410 -0
- praisonai/persistence/conversation/async_sqlite.py +371 -0
- praisonai/persistence/conversation/base.py +151 -0
- praisonai/persistence/conversation/json_store.py +250 -0
- praisonai/persistence/conversation/mysql.py +387 -0
- praisonai/persistence/conversation/postgres.py +401 -0
- praisonai/persistence/conversation/singlestore.py +240 -0
- praisonai/persistence/conversation/sqlite.py +341 -0
- praisonai/persistence/conversation/supabase.py +203 -0
- praisonai/persistence/conversation/surrealdb.py +287 -0
- praisonai/persistence/factory.py +301 -0
- praisonai/persistence/hooks/__init__.py +18 -0
- praisonai/persistence/hooks/agent_hooks.py +297 -0
- praisonai/persistence/knowledge/__init__.py +26 -0
- praisonai/persistence/knowledge/base.py +144 -0
- praisonai/persistence/knowledge/cassandra.py +232 -0
- praisonai/persistence/knowledge/chroma.py +295 -0
- praisonai/persistence/knowledge/clickhouse.py +242 -0
- praisonai/persistence/knowledge/cosmosdb_vector.py +438 -0
- praisonai/persistence/knowledge/couchbase.py +286 -0
- praisonai/persistence/knowledge/lancedb.py +216 -0
- praisonai/persistence/knowledge/langchain_adapter.py +291 -0
- praisonai/persistence/knowledge/lightrag_adapter.py +212 -0
- praisonai/persistence/knowledge/llamaindex_adapter.py +256 -0
- praisonai/persistence/knowledge/milvus.py +277 -0
- praisonai/persistence/knowledge/mongodb_vector.py +306 -0
- praisonai/persistence/knowledge/pgvector.py +335 -0
- praisonai/persistence/knowledge/pinecone.py +253 -0
- praisonai/persistence/knowledge/qdrant.py +301 -0
- praisonai/persistence/knowledge/redis_vector.py +291 -0
- praisonai/persistence/knowledge/singlestore_vector.py +299 -0
- praisonai/persistence/knowledge/surrealdb_vector.py +309 -0
- praisonai/persistence/knowledge/upstash_vector.py +266 -0
- praisonai/persistence/knowledge/weaviate.py +223 -0
- praisonai/persistence/migrations/__init__.py +10 -0
- praisonai/persistence/migrations/manager.py +251 -0
- praisonai/persistence/orchestrator.py +406 -0
- praisonai/persistence/state/__init__.py +21 -0
- praisonai/persistence/state/async_mongodb.py +200 -0
- praisonai/persistence/state/base.py +107 -0
- praisonai/persistence/state/dynamodb.py +226 -0
- praisonai/persistence/state/firestore.py +175 -0
- praisonai/persistence/state/gcs.py +155 -0
- praisonai/persistence/state/memory.py +245 -0
- praisonai/persistence/state/mongodb.py +158 -0
- praisonai/persistence/state/redis.py +190 -0
- praisonai/persistence/state/upstash.py +144 -0
- praisonai/persistence/tests/__init__.py +3 -0
- praisonai/persistence/tests/test_all_backends.py +633 -0
- praisonai/profiler.py +1214 -0
- praisonai/recipe/__init__.py +134 -0
- praisonai/recipe/bridge.py +278 -0
- praisonai/recipe/core.py +893 -0
- praisonai/recipe/exceptions.py +54 -0
- praisonai/recipe/history.py +402 -0
- praisonai/recipe/models.py +266 -0
- praisonai/recipe/operations.py +440 -0
- praisonai/recipe/policy.py +422 -0
- praisonai/recipe/registry.py +849 -0
- praisonai/recipe/runtime.py +214 -0
- praisonai/recipe/security.py +711 -0
- praisonai/recipe/serve.py +859 -0
- praisonai/recipe/server.py +613 -0
- praisonai/scheduler/__init__.py +45 -0
- praisonai/scheduler/agent_scheduler.py +552 -0
- praisonai/scheduler/base.py +124 -0
- praisonai/scheduler/daemon_manager.py +225 -0
- praisonai/scheduler/state_manager.py +155 -0
- praisonai/scheduler/yaml_loader.py +193 -0
- praisonai/scheduler.py +194 -0
- praisonai/setup/__init__.py +1 -0
- praisonai/setup/build.py +21 -0
- praisonai/setup/post_install.py +23 -0
- praisonai/setup/setup_conda_env.py +25 -0
- praisonai/setup.py +16 -0
- praisonai/templates/__init__.py +116 -0
- praisonai/templates/cache.py +364 -0
- praisonai/templates/dependency_checker.py +358 -0
- praisonai/templates/discovery.py +391 -0
- praisonai/templates/loader.py +564 -0
- praisonai/templates/registry.py +511 -0
- praisonai/templates/resolver.py +206 -0
- praisonai/templates/security.py +327 -0
- praisonai/templates/tool_override.py +498 -0
- praisonai/templates/tools_doctor.py +256 -0
- praisonai/test.py +105 -0
- praisonai/train.py +562 -0
- praisonai/train_vision.py +306 -0
- praisonai/ui/agents.py +824 -0
- praisonai/ui/callbacks.py +57 -0
- praisonai/ui/chainlit_compat.py +246 -0
- praisonai/ui/chat.py +532 -0
- praisonai/ui/code.py +717 -0
- praisonai/ui/colab.py +474 -0
- praisonai/ui/colab_chainlit.py +81 -0
- praisonai/ui/components/aicoder.py +284 -0
- praisonai/ui/context.py +283 -0
- praisonai/ui/database_config.py +56 -0
- praisonai/ui/db.py +294 -0
- praisonai/ui/realtime.py +488 -0
- praisonai/ui/realtimeclient/__init__.py +756 -0
- praisonai/ui/realtimeclient/tools.py +242 -0
- praisonai/ui/sql_alchemy.py +710 -0
- praisonai/upload_vision.py +140 -0
- praisonai/version.py +1 -0
- praisonai-3.0.0.dist-info/METADATA +3493 -0
- praisonai-3.0.0.dist-info/RECORD +393 -0
- praisonai-3.0.0.dist-info/WHEEL +5 -0
- praisonai-3.0.0.dist-info/entry_points.txt +4 -0
- 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
|
+
)
|