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,382 @@
|
|
|
1
|
+
"""
|
|
2
|
+
LLM Provider Registry - Extensible provider registration system for Python.
|
|
3
|
+
|
|
4
|
+
This module provides parity with the TypeScript ProviderRegistry,
|
|
5
|
+
allowing users to register custom LLM providers that can be resolved by name.
|
|
6
|
+
|
|
7
|
+
Example:
|
|
8
|
+
from praisonai.llm import register_llm_provider, create_llm_provider
|
|
9
|
+
|
|
10
|
+
class CloudflareProvider:
|
|
11
|
+
provider_id = "cloudflare"
|
|
12
|
+
def __init__(self, model_id, config=None):
|
|
13
|
+
self.model_id = model_id
|
|
14
|
+
self.config = config or {}
|
|
15
|
+
def generate(self, prompt):
|
|
16
|
+
# Implementation
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
register_llm_provider("cloudflare", CloudflareProvider)
|
|
20
|
+
provider = create_llm_provider("cloudflare/workers-ai")
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from typing import Any, Callable, Dict, List, Optional, Type, Union
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Type aliases
|
|
27
|
+
ProviderClass = Type[Any] # Class with __init__(model_id, config)
|
|
28
|
+
ProviderFactory = Callable[[str, Optional[Dict[str, Any]]], Any]
|
|
29
|
+
ProviderType = Union[ProviderClass, ProviderFactory]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class LLMProviderRegistry:
|
|
33
|
+
"""
|
|
34
|
+
Registry for LLM providers.
|
|
35
|
+
|
|
36
|
+
Manages registration and resolution of LLM providers by name.
|
|
37
|
+
Supports lazy loading, aliases, and isolated instances.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(self):
|
|
41
|
+
"""Initialize an empty registry."""
|
|
42
|
+
self._providers: Dict[str, ProviderType] = {}
|
|
43
|
+
self._aliases: Dict[str, str] = {} # alias -> canonical name
|
|
44
|
+
|
|
45
|
+
def register(
|
|
46
|
+
self,
|
|
47
|
+
name: str,
|
|
48
|
+
provider: ProviderType,
|
|
49
|
+
*,
|
|
50
|
+
override: bool = False,
|
|
51
|
+
aliases: Optional[List[str]] = None
|
|
52
|
+
) -> None:
|
|
53
|
+
"""
|
|
54
|
+
Register a provider by name.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
name: Provider name (e.g., 'cloudflare', 'ollama')
|
|
58
|
+
provider: Provider class or factory function
|
|
59
|
+
override: Allow overwriting existing registration
|
|
60
|
+
aliases: Additional names that resolve to this provider
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
ValueError: If name is already registered (unless override=True)
|
|
64
|
+
"""
|
|
65
|
+
normalized_name = name.lower()
|
|
66
|
+
|
|
67
|
+
# Check for existing registration
|
|
68
|
+
if normalized_name in self._providers and not override:
|
|
69
|
+
raise ValueError(
|
|
70
|
+
f"Provider '{name}' is already registered. "
|
|
71
|
+
f"Use override=True to replace it."
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
self._providers[normalized_name] = provider
|
|
75
|
+
|
|
76
|
+
# Register aliases
|
|
77
|
+
if aliases:
|
|
78
|
+
for alias in aliases:
|
|
79
|
+
normalized_alias = alias.lower()
|
|
80
|
+
# Check collision with existing provider name
|
|
81
|
+
if normalized_alias in self._providers and not override:
|
|
82
|
+
raise ValueError(
|
|
83
|
+
f"Alias '{alias}' conflicts with existing provider name. "
|
|
84
|
+
f"Use override=True to replace it."
|
|
85
|
+
)
|
|
86
|
+
# Check collision with existing alias
|
|
87
|
+
if normalized_alias in self._aliases and not override:
|
|
88
|
+
existing_target = self._aliases[normalized_alias]
|
|
89
|
+
raise ValueError(
|
|
90
|
+
f"Alias '{alias}' is already registered (points to '{existing_target}'). "
|
|
91
|
+
f"Use override=True to replace it."
|
|
92
|
+
)
|
|
93
|
+
self._aliases[normalized_alias] = normalized_name
|
|
94
|
+
|
|
95
|
+
def unregister(self, name: str) -> bool:
|
|
96
|
+
"""
|
|
97
|
+
Unregister a provider by name.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
name: Provider name to unregister
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
True if provider was unregistered, False if not found
|
|
104
|
+
"""
|
|
105
|
+
normalized_name = name.lower()
|
|
106
|
+
|
|
107
|
+
# Check if it's an alias
|
|
108
|
+
if normalized_name in self._aliases:
|
|
109
|
+
del self._aliases[normalized_name]
|
|
110
|
+
return True
|
|
111
|
+
|
|
112
|
+
# Check if it's a canonical name
|
|
113
|
+
if normalized_name in self._providers:
|
|
114
|
+
# Remove all aliases pointing to this provider
|
|
115
|
+
aliases_to_remove = [
|
|
116
|
+
alias for alias, canonical in self._aliases.items()
|
|
117
|
+
if canonical == normalized_name
|
|
118
|
+
]
|
|
119
|
+
for alias in aliases_to_remove:
|
|
120
|
+
del self._aliases[alias]
|
|
121
|
+
|
|
122
|
+
del self._providers[normalized_name]
|
|
123
|
+
return True
|
|
124
|
+
|
|
125
|
+
return False
|
|
126
|
+
|
|
127
|
+
def has(self, name: str) -> bool:
|
|
128
|
+
"""
|
|
129
|
+
Check if a provider is registered.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
name: Provider name to check
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
True if provider is registered
|
|
136
|
+
"""
|
|
137
|
+
normalized_name = name.lower()
|
|
138
|
+
return normalized_name in self._providers or normalized_name in self._aliases
|
|
139
|
+
|
|
140
|
+
def list(self) -> List[str]:
|
|
141
|
+
"""
|
|
142
|
+
List all registered provider names (canonical names only).
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
List of provider names
|
|
146
|
+
"""
|
|
147
|
+
return list(self._providers.keys())
|
|
148
|
+
|
|
149
|
+
def list_all(self) -> List[str]:
|
|
150
|
+
"""
|
|
151
|
+
List all names including aliases.
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
List of all registered names and aliases
|
|
155
|
+
"""
|
|
156
|
+
return list(self._providers.keys()) + list(self._aliases.keys())
|
|
157
|
+
|
|
158
|
+
def resolve(
|
|
159
|
+
self,
|
|
160
|
+
name: str,
|
|
161
|
+
model_id: str,
|
|
162
|
+
config: Optional[Dict[str, Any]] = None
|
|
163
|
+
) -> Any:
|
|
164
|
+
"""
|
|
165
|
+
Resolve a provider by name, creating an instance.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
name: Provider name
|
|
169
|
+
model_id: Model ID to pass to constructor
|
|
170
|
+
config: Optional provider config
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
Provider instance
|
|
174
|
+
|
|
175
|
+
Raises:
|
|
176
|
+
ValueError: If provider not found
|
|
177
|
+
"""
|
|
178
|
+
normalized_name = name.lower()
|
|
179
|
+
|
|
180
|
+
# Resolve alias to canonical name
|
|
181
|
+
canonical_name = self._aliases.get(normalized_name, normalized_name)
|
|
182
|
+
|
|
183
|
+
provider = self._providers.get(canonical_name)
|
|
184
|
+
if provider is None:
|
|
185
|
+
available = self.list()
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"Unknown provider: '{name}'. "
|
|
188
|
+
f"Available providers: {', '.join(available) if available else 'none'}. "
|
|
189
|
+
f"Register a custom provider with register_llm_provider('{name}', YourProviderClass)."
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# Create instance
|
|
193
|
+
return provider(model_id, config)
|
|
194
|
+
|
|
195
|
+
def get(self, name: str) -> Optional[ProviderType]:
|
|
196
|
+
"""
|
|
197
|
+
Get the provider class/factory without instantiating.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
name: Provider name
|
|
201
|
+
|
|
202
|
+
Returns:
|
|
203
|
+
Provider class/factory or None
|
|
204
|
+
"""
|
|
205
|
+
normalized_name = name.lower()
|
|
206
|
+
canonical_name = self._aliases.get(normalized_name, normalized_name)
|
|
207
|
+
return self._providers.get(canonical_name)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
# ============================================================================
|
|
211
|
+
# Default Registry Singleton
|
|
212
|
+
# ============================================================================
|
|
213
|
+
|
|
214
|
+
_default_registry: Optional[LLMProviderRegistry] = None
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def get_default_llm_registry() -> LLMProviderRegistry:
|
|
218
|
+
"""
|
|
219
|
+
Get the default global LLM provider registry.
|
|
220
|
+
|
|
221
|
+
This is the registry used by create_llm_provider() when no custom registry
|
|
222
|
+
is specified.
|
|
223
|
+
"""
|
|
224
|
+
global _default_registry
|
|
225
|
+
if _default_registry is None:
|
|
226
|
+
_default_registry = LLMProviderRegistry()
|
|
227
|
+
_register_builtin_providers(_default_registry)
|
|
228
|
+
return _default_registry
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def _register_builtin_providers(registry: LLMProviderRegistry) -> None:
|
|
232
|
+
"""
|
|
233
|
+
Register built-in providers to a registry.
|
|
234
|
+
|
|
235
|
+
Uses lazy loading to avoid importing heavy dependencies at module load time.
|
|
236
|
+
"""
|
|
237
|
+
# Note: In Python, the actual LLM providers are in praisonaiagents.llm
|
|
238
|
+
# which uses LiteLLM. This registry is for custom provider extensions.
|
|
239
|
+
# Built-in providers are handled by LiteLLM automatically.
|
|
240
|
+
pass
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def register_llm_provider(
|
|
244
|
+
name: str,
|
|
245
|
+
provider: ProviderType,
|
|
246
|
+
*,
|
|
247
|
+
override: bool = False,
|
|
248
|
+
aliases: Optional[List[str]] = None
|
|
249
|
+
) -> None:
|
|
250
|
+
"""
|
|
251
|
+
Register a provider to the default global registry.
|
|
252
|
+
|
|
253
|
+
Example:
|
|
254
|
+
from praisonai.llm import register_llm_provider
|
|
255
|
+
|
|
256
|
+
class CloudflareProvider:
|
|
257
|
+
provider_id = "cloudflare"
|
|
258
|
+
def __init__(self, model_id, config=None):
|
|
259
|
+
self.model_id = model_id
|
|
260
|
+
self.config = config or {}
|
|
261
|
+
|
|
262
|
+
register_llm_provider("cloudflare", CloudflareProvider)
|
|
263
|
+
"""
|
|
264
|
+
get_default_llm_registry().register(name, provider, override=override, aliases=aliases)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def unregister_llm_provider(name: str) -> bool:
|
|
268
|
+
"""Unregister a provider from the default global registry."""
|
|
269
|
+
return get_default_llm_registry().unregister(name)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def has_llm_provider(name: str) -> bool:
|
|
273
|
+
"""Check if a provider is registered in the default registry."""
|
|
274
|
+
return get_default_llm_registry().has(name)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def list_llm_providers() -> List[str]:
|
|
278
|
+
"""List all providers in the default registry."""
|
|
279
|
+
return get_default_llm_registry().list()
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
# ============================================================================
|
|
283
|
+
# Provider Creation
|
|
284
|
+
# ============================================================================
|
|
285
|
+
|
|
286
|
+
def parse_model_string(model: str) -> Dict[str, str]:
|
|
287
|
+
"""
|
|
288
|
+
Parse model string into provider and model ID.
|
|
289
|
+
|
|
290
|
+
Supports formats:
|
|
291
|
+
- "provider/model" (e.g., "openai/gpt-4o")
|
|
292
|
+
- "model" (defaults based on prefix)
|
|
293
|
+
|
|
294
|
+
Args:
|
|
295
|
+
model: Model string
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
Dict with 'provider_id' and 'model_id' keys
|
|
299
|
+
"""
|
|
300
|
+
if "/" in model:
|
|
301
|
+
parts = model.split("/", 1)
|
|
302
|
+
return {"provider_id": parts[0].lower(), "model_id": parts[1]}
|
|
303
|
+
|
|
304
|
+
# Default based on model prefix
|
|
305
|
+
model_lower = model.lower()
|
|
306
|
+
if model_lower.startswith("gpt-") or model_lower.startswith("o1") or model_lower.startswith("o3"):
|
|
307
|
+
return {"provider_id": "openai", "model_id": model}
|
|
308
|
+
if model_lower.startswith("claude-"):
|
|
309
|
+
return {"provider_id": "anthropic", "model_id": model}
|
|
310
|
+
if model_lower.startswith("gemini-"):
|
|
311
|
+
return {"provider_id": "google", "model_id": model}
|
|
312
|
+
|
|
313
|
+
# Default to openai
|
|
314
|
+
return {"provider_id": "openai", "model_id": model}
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def create_llm_provider(
|
|
318
|
+
input_value: Union[str, Dict[str, Any], Any],
|
|
319
|
+
*,
|
|
320
|
+
registry: Optional[LLMProviderRegistry] = None,
|
|
321
|
+
config: Optional[Dict[str, Any]] = None
|
|
322
|
+
) -> Any:
|
|
323
|
+
"""
|
|
324
|
+
Create a provider instance from various input types.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
input_value: One of:
|
|
328
|
+
- String: "provider/model" or "model"
|
|
329
|
+
- Dict: {"name": "provider", "model_id": "model", "config": {...}}
|
|
330
|
+
- Provider instance: passed through
|
|
331
|
+
registry: Optional custom registry (defaults to global)
|
|
332
|
+
config: Optional provider config
|
|
333
|
+
|
|
334
|
+
Returns:
|
|
335
|
+
Provider instance
|
|
336
|
+
|
|
337
|
+
Example:
|
|
338
|
+
# String input
|
|
339
|
+
provider = create_llm_provider("openai/gpt-4o")
|
|
340
|
+
|
|
341
|
+
# Custom provider (after registration)
|
|
342
|
+
register_llm_provider("cloudflare", CloudflareProvider)
|
|
343
|
+
provider = create_llm_provider("cloudflare/workers-ai")
|
|
344
|
+
|
|
345
|
+
# Provider instance (pass-through)
|
|
346
|
+
provider = create_llm_provider(existing_provider)
|
|
347
|
+
|
|
348
|
+
# Spec dict
|
|
349
|
+
provider = create_llm_provider({
|
|
350
|
+
"name": "openai",
|
|
351
|
+
"model_id": "gpt-4o",
|
|
352
|
+
"config": {"timeout": 5000}
|
|
353
|
+
})
|
|
354
|
+
"""
|
|
355
|
+
reg = registry or get_default_llm_registry()
|
|
356
|
+
|
|
357
|
+
# Case 1: Already a provider instance (has provider_id and model_id)
|
|
358
|
+
if hasattr(input_value, "provider_id") and hasattr(input_value, "model_id"):
|
|
359
|
+
return input_value
|
|
360
|
+
|
|
361
|
+
# Case 2: Spec dict
|
|
362
|
+
if isinstance(input_value, dict) and "name" in input_value:
|
|
363
|
+
name = input_value["name"]
|
|
364
|
+
model_id = input_value.get("model_id", "default")
|
|
365
|
+
provider_config = input_value.get("config") or config
|
|
366
|
+
return reg.resolve(name, model_id, provider_config)
|
|
367
|
+
|
|
368
|
+
# Case 3: String - parse and resolve
|
|
369
|
+
if isinstance(input_value, str):
|
|
370
|
+
parsed = parse_model_string(input_value)
|
|
371
|
+
return reg.resolve(parsed["provider_id"], parsed["model_id"], config)
|
|
372
|
+
|
|
373
|
+
raise ValueError(
|
|
374
|
+
f"Invalid provider input. Expected string, provider instance, or spec dict. "
|
|
375
|
+
f"Got: {type(input_value).__name__}"
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
def _reset_default_registry() -> None:
|
|
380
|
+
"""Reset the default registry (mainly for testing)."""
|
|
381
|
+
global _default_registry
|
|
382
|
+
_default_registry = None
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PraisonAI MCP Server Module
|
|
3
|
+
|
|
4
|
+
Exposes PraisonAI capabilities as an MCP server that any MCP client can connect to.
|
|
5
|
+
|
|
6
|
+
MCP Protocol Version: 2025-11-25
|
|
7
|
+
|
|
8
|
+
Supports:
|
|
9
|
+
- STDIO transport (default, for Claude Desktop, Cursor, etc.)
|
|
10
|
+
- HTTP Stream transport (MCP 2025-11-25 spec)
|
|
11
|
+
- Recipe-to-MCP server bridge
|
|
12
|
+
- Tasks API (experimental)
|
|
13
|
+
- Elicitation (form and URL modes)
|
|
14
|
+
- OAuth 2.1 / OpenID Connect authentication
|
|
15
|
+
- Icons and rich metadata
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
# STDIO mode (for Claude Desktop config)
|
|
19
|
+
praisonai mcp serve --transport stdio
|
|
20
|
+
|
|
21
|
+
# HTTP Stream mode
|
|
22
|
+
praisonai mcp serve --transport http-stream --port 8080
|
|
23
|
+
|
|
24
|
+
# Serve a recipe as MCP server
|
|
25
|
+
praisonai mcp serve-recipe support-reply --transport stdio
|
|
26
|
+
|
|
27
|
+
# Programmatic usage
|
|
28
|
+
from praisonai.mcp_server import MCPServer, RecipeMCPAdapter
|
|
29
|
+
|
|
30
|
+
server = MCPServer()
|
|
31
|
+
server.run(transport="stdio")
|
|
32
|
+
|
|
33
|
+
# Recipe as MCP server
|
|
34
|
+
adapter = RecipeMCPAdapter("support-reply")
|
|
35
|
+
adapter.load()
|
|
36
|
+
server = adapter.to_mcp_server()
|
|
37
|
+
server.run(transport="stdio")
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
# Core server
|
|
42
|
+
"MCPServer",
|
|
43
|
+
"MCPToolRegistry",
|
|
44
|
+
"MCPResourceRegistry",
|
|
45
|
+
"MCPPromptRegistry",
|
|
46
|
+
"register_tool",
|
|
47
|
+
"register_resource",
|
|
48
|
+
"register_prompt",
|
|
49
|
+
# Recipe adapter
|
|
50
|
+
"RecipeMCPAdapter",
|
|
51
|
+
"RecipeMCPConfig",
|
|
52
|
+
"create_recipe_mcp_server",
|
|
53
|
+
# Tasks API
|
|
54
|
+
"TaskManager",
|
|
55
|
+
"TaskStore",
|
|
56
|
+
"Task",
|
|
57
|
+
"TaskState",
|
|
58
|
+
# Elicitation
|
|
59
|
+
"ElicitationHandler",
|
|
60
|
+
"ElicitationRequest",
|
|
61
|
+
"ElicitationResult",
|
|
62
|
+
# Sampling
|
|
63
|
+
"SamplingHandler",
|
|
64
|
+
"SamplingRequest",
|
|
65
|
+
"SamplingResponse",
|
|
66
|
+
# Icons
|
|
67
|
+
"IconMetadata",
|
|
68
|
+
"RichMetadata",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def __getattr__(name):
|
|
73
|
+
"""Lazy load server components."""
|
|
74
|
+
# Core server
|
|
75
|
+
if name == "MCPServer":
|
|
76
|
+
from .server import MCPServer
|
|
77
|
+
return MCPServer
|
|
78
|
+
elif name == "MCPToolRegistry":
|
|
79
|
+
from .registry import MCPToolRegistry
|
|
80
|
+
return MCPToolRegistry
|
|
81
|
+
elif name == "MCPResourceRegistry":
|
|
82
|
+
from .registry import MCPResourceRegistry
|
|
83
|
+
return MCPResourceRegistry
|
|
84
|
+
elif name == "MCPPromptRegistry":
|
|
85
|
+
from .registry import MCPPromptRegistry
|
|
86
|
+
return MCPPromptRegistry
|
|
87
|
+
elif name == "register_tool":
|
|
88
|
+
from .registry import register_tool
|
|
89
|
+
return register_tool
|
|
90
|
+
elif name == "register_resource":
|
|
91
|
+
from .registry import register_resource
|
|
92
|
+
return register_resource
|
|
93
|
+
elif name == "register_prompt":
|
|
94
|
+
from .registry import register_prompt
|
|
95
|
+
return register_prompt
|
|
96
|
+
|
|
97
|
+
# Recipe adapter
|
|
98
|
+
elif name == "RecipeMCPAdapter":
|
|
99
|
+
from .recipe_adapter import RecipeMCPAdapter
|
|
100
|
+
return RecipeMCPAdapter
|
|
101
|
+
elif name == "RecipeMCPConfig":
|
|
102
|
+
from .recipe_adapter import RecipeMCPConfig
|
|
103
|
+
return RecipeMCPConfig
|
|
104
|
+
elif name == "create_recipe_mcp_server":
|
|
105
|
+
from .recipe_adapter import create_recipe_mcp_server
|
|
106
|
+
return create_recipe_mcp_server
|
|
107
|
+
|
|
108
|
+
# Tasks API
|
|
109
|
+
elif name == "TaskManager":
|
|
110
|
+
from .tasks import TaskManager
|
|
111
|
+
return TaskManager
|
|
112
|
+
elif name == "TaskStore":
|
|
113
|
+
from .tasks import TaskStore
|
|
114
|
+
return TaskStore
|
|
115
|
+
elif name == "Task":
|
|
116
|
+
from .tasks import Task
|
|
117
|
+
return Task
|
|
118
|
+
elif name == "TaskState":
|
|
119
|
+
from .tasks import TaskState
|
|
120
|
+
return TaskState
|
|
121
|
+
|
|
122
|
+
# Elicitation
|
|
123
|
+
elif name == "ElicitationHandler":
|
|
124
|
+
from .elicitation import ElicitationHandler
|
|
125
|
+
return ElicitationHandler
|
|
126
|
+
elif name == "ElicitationRequest":
|
|
127
|
+
from .elicitation import ElicitationRequest
|
|
128
|
+
return ElicitationRequest
|
|
129
|
+
elif name == "ElicitationResult":
|
|
130
|
+
from .elicitation import ElicitationResult
|
|
131
|
+
return ElicitationResult
|
|
132
|
+
|
|
133
|
+
# Sampling
|
|
134
|
+
elif name == "SamplingHandler":
|
|
135
|
+
from .sampling import SamplingHandler
|
|
136
|
+
return SamplingHandler
|
|
137
|
+
elif name == "SamplingRequest":
|
|
138
|
+
from .sampling import SamplingRequest
|
|
139
|
+
return SamplingRequest
|
|
140
|
+
elif name == "SamplingResponse":
|
|
141
|
+
from .sampling import SamplingResponse
|
|
142
|
+
return SamplingResponse
|
|
143
|
+
|
|
144
|
+
# Icons
|
|
145
|
+
elif name == "IconMetadata":
|
|
146
|
+
from .icons import IconMetadata
|
|
147
|
+
return IconMetadata
|
|
148
|
+
elif name == "RichMetadata":
|
|
149
|
+
from .icons import RichMetadata
|
|
150
|
+
return RichMetadata
|
|
151
|
+
|
|
152
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MCP Adapters
|
|
3
|
+
|
|
4
|
+
Adapters that convert PraisonAI capabilities, CLI features, and agent operations
|
|
5
|
+
into MCP tools, resources, and prompts.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"register_all",
|
|
10
|
+
"register_all_tools",
|
|
11
|
+
"register_capability_tools",
|
|
12
|
+
"register_extended_capability_tools",
|
|
13
|
+
"register_agent_tools",
|
|
14
|
+
"register_memory_tools",
|
|
15
|
+
"register_knowledge_tools",
|
|
16
|
+
"register_cli_tools",
|
|
17
|
+
"register_mcp_resources",
|
|
18
|
+
"register_mcp_prompts",
|
|
19
|
+
"register_praisonai_tools",
|
|
20
|
+
"is_bridge_available",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def __getattr__(name):
|
|
25
|
+
"""Lazy load adapters."""
|
|
26
|
+
if name == "register_all":
|
|
27
|
+
from .capabilities import register_all_tools
|
|
28
|
+
from .extended_capabilities import register_extended_capability_tools
|
|
29
|
+
from .cli_tools import register_cli_tools
|
|
30
|
+
from .resources import register_mcp_resources
|
|
31
|
+
from .prompts import register_mcp_prompts
|
|
32
|
+
|
|
33
|
+
def _register_all():
|
|
34
|
+
register_all_tools()
|
|
35
|
+
register_extended_capability_tools()
|
|
36
|
+
register_cli_tools()
|
|
37
|
+
register_mcp_resources()
|
|
38
|
+
register_mcp_prompts()
|
|
39
|
+
|
|
40
|
+
return _register_all
|
|
41
|
+
elif name == "register_all_tools":
|
|
42
|
+
from .capabilities import register_all_tools
|
|
43
|
+
return register_all_tools
|
|
44
|
+
elif name == "register_capability_tools":
|
|
45
|
+
from .capabilities import register_capability_tools
|
|
46
|
+
return register_capability_tools
|
|
47
|
+
elif name == "register_extended_capability_tools":
|
|
48
|
+
from .extended_capabilities import register_extended_capability_tools
|
|
49
|
+
return register_extended_capability_tools
|
|
50
|
+
elif name == "register_agent_tools":
|
|
51
|
+
from .agents import register_agent_tools
|
|
52
|
+
return register_agent_tools
|
|
53
|
+
elif name == "register_memory_tools":
|
|
54
|
+
from .memory import register_memory_tools
|
|
55
|
+
return register_memory_tools
|
|
56
|
+
elif name == "register_knowledge_tools":
|
|
57
|
+
from .knowledge import register_knowledge_tools
|
|
58
|
+
return register_knowledge_tools
|
|
59
|
+
elif name == "register_cli_tools":
|
|
60
|
+
from .cli_tools import register_cli_tools
|
|
61
|
+
return register_cli_tools
|
|
62
|
+
elif name == "register_mcp_resources":
|
|
63
|
+
from .resources import register_mcp_resources
|
|
64
|
+
return register_mcp_resources
|
|
65
|
+
elif name == "register_mcp_prompts":
|
|
66
|
+
from .prompts import register_mcp_prompts
|
|
67
|
+
return register_mcp_prompts
|
|
68
|
+
elif name == "register_praisonai_tools":
|
|
69
|
+
from .tools_bridge import register_praisonai_tools
|
|
70
|
+
return register_praisonai_tools
|
|
71
|
+
elif name == "is_bridge_available":
|
|
72
|
+
from .tools_bridge import is_bridge_available
|
|
73
|
+
return is_bridge_available
|
|
74
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|