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,462 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Extended Capabilities Adapter
|
|
3
|
+
|
|
4
|
+
Maps additional PraisonAI capabilities to MCP tools:
|
|
5
|
+
- Videos
|
|
6
|
+
- Files
|
|
7
|
+
- Batches
|
|
8
|
+
- Vector Stores
|
|
9
|
+
- OCR
|
|
10
|
+
- Assistants
|
|
11
|
+
- Fine-tuning
|
|
12
|
+
- A2A
|
|
13
|
+
- Containers
|
|
14
|
+
- Skills
|
|
15
|
+
- Realtime
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import logging
|
|
19
|
+
from typing import List, Optional
|
|
20
|
+
|
|
21
|
+
from ..registry import register_tool
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def register_extended_capability_tools() -> None:
|
|
27
|
+
"""Register extended capability-based MCP tools."""
|
|
28
|
+
|
|
29
|
+
# Video tools
|
|
30
|
+
@register_tool("praisonai.videos.generate")
|
|
31
|
+
def videos_generate(
|
|
32
|
+
prompt: str,
|
|
33
|
+
model: str = "runway-gen3",
|
|
34
|
+
duration: int = 4,
|
|
35
|
+
) -> str:
|
|
36
|
+
"""Generate video from text prompt."""
|
|
37
|
+
try:
|
|
38
|
+
from praisonai.capabilities import video_generate
|
|
39
|
+
result = video_generate(prompt=prompt, model=model, duration=duration)
|
|
40
|
+
return str(result)
|
|
41
|
+
except ImportError:
|
|
42
|
+
return "Error: Video generation not available"
|
|
43
|
+
except Exception as e:
|
|
44
|
+
return f"Error: {e}"
|
|
45
|
+
|
|
46
|
+
# File tools
|
|
47
|
+
@register_tool("praisonai.files.create")
|
|
48
|
+
def files_create(
|
|
49
|
+
file_path: str,
|
|
50
|
+
purpose: str = "assistants",
|
|
51
|
+
) -> str:
|
|
52
|
+
"""Upload a file."""
|
|
53
|
+
try:
|
|
54
|
+
from praisonai.capabilities import file_create
|
|
55
|
+
result = file_create(file=file_path, purpose=purpose)
|
|
56
|
+
if hasattr(result, "id"):
|
|
57
|
+
return f"File created: {result.id}"
|
|
58
|
+
return str(result)
|
|
59
|
+
except ImportError:
|
|
60
|
+
return "Error: File operations not available"
|
|
61
|
+
except Exception as e:
|
|
62
|
+
return f"Error: {e}"
|
|
63
|
+
|
|
64
|
+
@register_tool("praisonai.files.list")
|
|
65
|
+
def files_list(purpose: Optional[str] = None) -> str:
|
|
66
|
+
"""List uploaded files."""
|
|
67
|
+
try:
|
|
68
|
+
from praisonai.capabilities import file_list
|
|
69
|
+
result = file_list(purpose=purpose)
|
|
70
|
+
if hasattr(result, "data"):
|
|
71
|
+
files = [{"id": f.id, "filename": f.filename} for f in result.data]
|
|
72
|
+
return str(files)
|
|
73
|
+
return str(result)
|
|
74
|
+
except ImportError:
|
|
75
|
+
return "Error: File operations not available"
|
|
76
|
+
except Exception as e:
|
|
77
|
+
return f"Error: {e}"
|
|
78
|
+
|
|
79
|
+
@register_tool("praisonai.files.retrieve")
|
|
80
|
+
def files_retrieve(file_id: str) -> str:
|
|
81
|
+
"""Retrieve file metadata."""
|
|
82
|
+
try:
|
|
83
|
+
from praisonai.capabilities import file_retrieve
|
|
84
|
+
result = file_retrieve(file_id=file_id)
|
|
85
|
+
return str(result)
|
|
86
|
+
except ImportError:
|
|
87
|
+
return "Error: File operations not available"
|
|
88
|
+
except Exception as e:
|
|
89
|
+
return f"Error: {e}"
|
|
90
|
+
|
|
91
|
+
@register_tool("praisonai.files.delete")
|
|
92
|
+
def files_delete(file_id: str) -> str:
|
|
93
|
+
"""Delete a file."""
|
|
94
|
+
try:
|
|
95
|
+
from praisonai.capabilities import file_delete
|
|
96
|
+
file_delete(file_id=file_id)
|
|
97
|
+
return f"File deleted: {file_id}"
|
|
98
|
+
except ImportError:
|
|
99
|
+
return "Error: File operations not available"
|
|
100
|
+
except Exception as e:
|
|
101
|
+
return f"Error: {e}"
|
|
102
|
+
|
|
103
|
+
@register_tool("praisonai.files.content")
|
|
104
|
+
def files_content(file_id: str) -> str:
|
|
105
|
+
"""Get file content."""
|
|
106
|
+
try:
|
|
107
|
+
from praisonai.capabilities import file_content
|
|
108
|
+
result = file_content(file_id=file_id)
|
|
109
|
+
return str(result)
|
|
110
|
+
except ImportError:
|
|
111
|
+
return "Error: File operations not available"
|
|
112
|
+
except Exception as e:
|
|
113
|
+
return f"Error: {e}"
|
|
114
|
+
|
|
115
|
+
# Batch tools
|
|
116
|
+
@register_tool("praisonai.batches.create")
|
|
117
|
+
def batches_create(
|
|
118
|
+
input_file_id: str,
|
|
119
|
+
endpoint: str = "/v1/chat/completions",
|
|
120
|
+
completion_window: str = "24h",
|
|
121
|
+
) -> str:
|
|
122
|
+
"""Create a batch processing job."""
|
|
123
|
+
try:
|
|
124
|
+
from praisonai.capabilities import batch_create
|
|
125
|
+
result = batch_create(
|
|
126
|
+
input_file_id=input_file_id,
|
|
127
|
+
endpoint=endpoint,
|
|
128
|
+
completion_window=completion_window,
|
|
129
|
+
)
|
|
130
|
+
if hasattr(result, "id"):
|
|
131
|
+
return f"Batch created: {result.id}"
|
|
132
|
+
return str(result)
|
|
133
|
+
except ImportError:
|
|
134
|
+
return "Error: Batch operations not available"
|
|
135
|
+
except Exception as e:
|
|
136
|
+
return f"Error: {e}"
|
|
137
|
+
|
|
138
|
+
@register_tool("praisonai.batches.list")
|
|
139
|
+
def batches_list() -> str:
|
|
140
|
+
"""List batch jobs."""
|
|
141
|
+
try:
|
|
142
|
+
from praisonai.capabilities import batch_list
|
|
143
|
+
result = batch_list()
|
|
144
|
+
return str(result)
|
|
145
|
+
except ImportError:
|
|
146
|
+
return "Error: Batch operations not available"
|
|
147
|
+
except Exception as e:
|
|
148
|
+
return f"Error: {e}"
|
|
149
|
+
|
|
150
|
+
@register_tool("praisonai.batches.retrieve")
|
|
151
|
+
def batches_retrieve(batch_id: str) -> str:
|
|
152
|
+
"""Retrieve batch job status."""
|
|
153
|
+
try:
|
|
154
|
+
from praisonai.capabilities import batch_retrieve
|
|
155
|
+
result = batch_retrieve(batch_id=batch_id)
|
|
156
|
+
return str(result)
|
|
157
|
+
except ImportError:
|
|
158
|
+
return "Error: Batch operations not available"
|
|
159
|
+
except Exception as e:
|
|
160
|
+
return f"Error: {e}"
|
|
161
|
+
|
|
162
|
+
@register_tool("praisonai.batches.cancel")
|
|
163
|
+
def batches_cancel(batch_id: str) -> str:
|
|
164
|
+
"""Cancel a batch job."""
|
|
165
|
+
try:
|
|
166
|
+
from praisonai.capabilities import batch_cancel
|
|
167
|
+
batch_cancel(batch_id=batch_id)
|
|
168
|
+
return f"Batch cancelled: {batch_id}"
|
|
169
|
+
except ImportError:
|
|
170
|
+
return "Error: Batch operations not available"
|
|
171
|
+
except Exception as e:
|
|
172
|
+
return f"Error: {e}"
|
|
173
|
+
|
|
174
|
+
# Vector Store tools
|
|
175
|
+
@register_tool("praisonai.vector_stores.create")
|
|
176
|
+
def vector_stores_create(
|
|
177
|
+
name: str,
|
|
178
|
+
file_ids: Optional[List[str]] = None,
|
|
179
|
+
) -> str:
|
|
180
|
+
"""Create a vector store."""
|
|
181
|
+
try:
|
|
182
|
+
from praisonai.capabilities import vector_store_create
|
|
183
|
+
result = vector_store_create(name=name, file_ids=file_ids or [])
|
|
184
|
+
if hasattr(result, "id"):
|
|
185
|
+
return f"Vector store created: {result.id}"
|
|
186
|
+
return str(result)
|
|
187
|
+
except ImportError:
|
|
188
|
+
return "Error: Vector store operations not available"
|
|
189
|
+
except Exception as e:
|
|
190
|
+
return f"Error: {e}"
|
|
191
|
+
|
|
192
|
+
@register_tool("praisonai.vector_stores.search")
|
|
193
|
+
def vector_stores_search(
|
|
194
|
+
vector_store_id: str,
|
|
195
|
+
query: str,
|
|
196
|
+
max_results: int = 10,
|
|
197
|
+
) -> str:
|
|
198
|
+
"""Search a vector store."""
|
|
199
|
+
try:
|
|
200
|
+
from praisonai.capabilities import vector_store_search
|
|
201
|
+
result = vector_store_search(
|
|
202
|
+
vector_store_id=vector_store_id,
|
|
203
|
+
query=query,
|
|
204
|
+
max_num_results=max_results,
|
|
205
|
+
)
|
|
206
|
+
return str(result)
|
|
207
|
+
except ImportError:
|
|
208
|
+
return "Error: Vector store operations not available"
|
|
209
|
+
except Exception as e:
|
|
210
|
+
return f"Error: {e}"
|
|
211
|
+
|
|
212
|
+
@register_tool("praisonai.vector_stores.file_create")
|
|
213
|
+
def vector_stores_file_create(
|
|
214
|
+
vector_store_id: str,
|
|
215
|
+
file_id: str,
|
|
216
|
+
) -> str:
|
|
217
|
+
"""Add a file to a vector store."""
|
|
218
|
+
try:
|
|
219
|
+
from praisonai.capabilities import vector_store_file_create
|
|
220
|
+
vector_store_file_create(
|
|
221
|
+
vector_store_id=vector_store_id,
|
|
222
|
+
file_id=file_id,
|
|
223
|
+
)
|
|
224
|
+
return f"File {file_id} added to vector store {vector_store_id}"
|
|
225
|
+
except ImportError:
|
|
226
|
+
return "Error: Vector store operations not available"
|
|
227
|
+
except Exception as e:
|
|
228
|
+
return f"Error: {e}"
|
|
229
|
+
|
|
230
|
+
@register_tool("praisonai.vector_stores.file_list")
|
|
231
|
+
def vector_stores_file_list(vector_store_id: str) -> str:
|
|
232
|
+
"""List files in a vector store."""
|
|
233
|
+
try:
|
|
234
|
+
from praisonai.capabilities import vector_store_file_list
|
|
235
|
+
result = vector_store_file_list(vector_store_id=vector_store_id)
|
|
236
|
+
return str(result)
|
|
237
|
+
except ImportError:
|
|
238
|
+
return "Error: Vector store operations not available"
|
|
239
|
+
except Exception as e:
|
|
240
|
+
return f"Error: {e}"
|
|
241
|
+
|
|
242
|
+
# OCR tools
|
|
243
|
+
@register_tool("praisonai.ocr")
|
|
244
|
+
def ocr_extract(
|
|
245
|
+
image_path: str,
|
|
246
|
+
model: str = "gpt-4o",
|
|
247
|
+
) -> str:
|
|
248
|
+
"""Extract text from image using OCR."""
|
|
249
|
+
try:
|
|
250
|
+
from praisonai.capabilities import ocr
|
|
251
|
+
result = ocr(file=image_path, model=model)
|
|
252
|
+
return str(result)
|
|
253
|
+
except ImportError:
|
|
254
|
+
return "Error: OCR not available"
|
|
255
|
+
except Exception as e:
|
|
256
|
+
return f"Error: {e}"
|
|
257
|
+
|
|
258
|
+
# Assistant tools
|
|
259
|
+
@register_tool("praisonai.assistants.create")
|
|
260
|
+
def assistants_create(
|
|
261
|
+
name: str,
|
|
262
|
+
instructions: str,
|
|
263
|
+
model: str = "gpt-4o",
|
|
264
|
+
tools: Optional[List[str]] = None,
|
|
265
|
+
) -> str:
|
|
266
|
+
"""Create an OpenAI-style assistant."""
|
|
267
|
+
try:
|
|
268
|
+
from praisonai.capabilities import assistant_create
|
|
269
|
+
result = assistant_create(
|
|
270
|
+
name=name,
|
|
271
|
+
instructions=instructions,
|
|
272
|
+
model=model,
|
|
273
|
+
tools=tools or [],
|
|
274
|
+
)
|
|
275
|
+
if hasattr(result, "id"):
|
|
276
|
+
return f"Assistant created: {result.id}"
|
|
277
|
+
return str(result)
|
|
278
|
+
except ImportError:
|
|
279
|
+
return "Error: Assistants not available"
|
|
280
|
+
except Exception as e:
|
|
281
|
+
return f"Error: {e}"
|
|
282
|
+
|
|
283
|
+
@register_tool("praisonai.assistants.list")
|
|
284
|
+
def assistants_list() -> str:
|
|
285
|
+
"""List assistants."""
|
|
286
|
+
try:
|
|
287
|
+
from praisonai.capabilities import assistant_list
|
|
288
|
+
result = assistant_list()
|
|
289
|
+
return str(result)
|
|
290
|
+
except ImportError:
|
|
291
|
+
return "Error: Assistants not available"
|
|
292
|
+
except Exception as e:
|
|
293
|
+
return f"Error: {e}"
|
|
294
|
+
|
|
295
|
+
# Fine-tuning tools
|
|
296
|
+
@register_tool("praisonai.fine_tuning.create")
|
|
297
|
+
def fine_tuning_create(
|
|
298
|
+
training_file: str,
|
|
299
|
+
model: str = "gpt-4o-mini",
|
|
300
|
+
suffix: Optional[str] = None,
|
|
301
|
+
) -> str:
|
|
302
|
+
"""Create a fine-tuning job."""
|
|
303
|
+
try:
|
|
304
|
+
from praisonai.capabilities import fine_tuning_create
|
|
305
|
+
result = fine_tuning_create(
|
|
306
|
+
training_file=training_file,
|
|
307
|
+
model=model,
|
|
308
|
+
suffix=suffix,
|
|
309
|
+
)
|
|
310
|
+
if hasattr(result, "id"):
|
|
311
|
+
return f"Fine-tuning job created: {result.id}"
|
|
312
|
+
return str(result)
|
|
313
|
+
except ImportError:
|
|
314
|
+
return "Error: Fine-tuning not available"
|
|
315
|
+
except Exception as e:
|
|
316
|
+
return f"Error: {e}"
|
|
317
|
+
|
|
318
|
+
@register_tool("praisonai.fine_tuning.list")
|
|
319
|
+
def fine_tuning_list() -> str:
|
|
320
|
+
"""List fine-tuning jobs."""
|
|
321
|
+
try:
|
|
322
|
+
from praisonai.capabilities import fine_tuning_list
|
|
323
|
+
result = fine_tuning_list()
|
|
324
|
+
return str(result)
|
|
325
|
+
except ImportError:
|
|
326
|
+
return "Error: Fine-tuning not available"
|
|
327
|
+
except Exception as e:
|
|
328
|
+
return f"Error: {e}"
|
|
329
|
+
|
|
330
|
+
# A2A tools
|
|
331
|
+
@register_tool("praisonai.a2a.send")
|
|
332
|
+
def a2a_send(
|
|
333
|
+
agent_url: str,
|
|
334
|
+
message: str,
|
|
335
|
+
task_id: Optional[str] = None,
|
|
336
|
+
) -> str:
|
|
337
|
+
"""Send message to another agent via A2A protocol."""
|
|
338
|
+
try:
|
|
339
|
+
from praisonai.capabilities import a2a_send
|
|
340
|
+
result = a2a_send(
|
|
341
|
+
agent_url=agent_url,
|
|
342
|
+
message=message,
|
|
343
|
+
task_id=task_id,
|
|
344
|
+
)
|
|
345
|
+
return str(result)
|
|
346
|
+
except ImportError:
|
|
347
|
+
return "Error: A2A not available"
|
|
348
|
+
except Exception as e:
|
|
349
|
+
return f"Error: {e}"
|
|
350
|
+
|
|
351
|
+
# Container tools
|
|
352
|
+
@register_tool("praisonai.containers.create")
|
|
353
|
+
def containers_create(
|
|
354
|
+
name: str,
|
|
355
|
+
image: str = "python:3.11",
|
|
356
|
+
) -> str:
|
|
357
|
+
"""Create a container for code execution."""
|
|
358
|
+
try:
|
|
359
|
+
from praisonai.capabilities import container_create
|
|
360
|
+
result = container_create(name=name, image=image)
|
|
361
|
+
if hasattr(result, "id"):
|
|
362
|
+
return f"Container created: {result.id}"
|
|
363
|
+
return str(result)
|
|
364
|
+
except ImportError:
|
|
365
|
+
return "Error: Containers not available"
|
|
366
|
+
except Exception as e:
|
|
367
|
+
return f"Error: {e}"
|
|
368
|
+
|
|
369
|
+
@register_tool("praisonai.containers.file_read")
|
|
370
|
+
def containers_file_read(
|
|
371
|
+
container_id: str,
|
|
372
|
+
file_path: str,
|
|
373
|
+
) -> str:
|
|
374
|
+
"""Read a file from a container."""
|
|
375
|
+
try:
|
|
376
|
+
from praisonai.capabilities import container_file_read
|
|
377
|
+
result = container_file_read(
|
|
378
|
+
container_id=container_id,
|
|
379
|
+
file_path=file_path,
|
|
380
|
+
)
|
|
381
|
+
return str(result)
|
|
382
|
+
except ImportError:
|
|
383
|
+
return "Error: Containers not available"
|
|
384
|
+
except Exception as e:
|
|
385
|
+
return f"Error: {e}"
|
|
386
|
+
|
|
387
|
+
@register_tool("praisonai.containers.file_write")
|
|
388
|
+
def containers_file_write(
|
|
389
|
+
container_id: str,
|
|
390
|
+
file_path: str,
|
|
391
|
+
content: str,
|
|
392
|
+
) -> str:
|
|
393
|
+
"""Write a file to a container."""
|
|
394
|
+
try:
|
|
395
|
+
from praisonai.capabilities import container_file_write
|
|
396
|
+
container_file_write(
|
|
397
|
+
container_id=container_id,
|
|
398
|
+
file_path=file_path,
|
|
399
|
+
content=content,
|
|
400
|
+
)
|
|
401
|
+
return f"File {file_path} written to container {container_id}"
|
|
402
|
+
except ImportError:
|
|
403
|
+
return "Error: Containers not available"
|
|
404
|
+
except Exception as e:
|
|
405
|
+
return f"Error: {e}"
|
|
406
|
+
|
|
407
|
+
# Skills tools
|
|
408
|
+
@register_tool("praisonai.skills.list")
|
|
409
|
+
def skills_list() -> str:
|
|
410
|
+
"""List available skills."""
|
|
411
|
+
try:
|
|
412
|
+
from praisonai.capabilities import skill_list
|
|
413
|
+
result = skill_list()
|
|
414
|
+
return str(result)
|
|
415
|
+
except ImportError:
|
|
416
|
+
return "Error: Skills not available"
|
|
417
|
+
except Exception as e:
|
|
418
|
+
return f"Error: {e}"
|
|
419
|
+
|
|
420
|
+
@register_tool("praisonai.skills.load")
|
|
421
|
+
def skills_load(skill_path: str) -> str:
|
|
422
|
+
"""Load a skill from path."""
|
|
423
|
+
try:
|
|
424
|
+
from praisonai.capabilities import skill_load
|
|
425
|
+
result = skill_load(skill_path=skill_path)
|
|
426
|
+
return str(result)
|
|
427
|
+
except ImportError:
|
|
428
|
+
return "Error: Skills not available"
|
|
429
|
+
except Exception as e:
|
|
430
|
+
return f"Error: {e}"
|
|
431
|
+
|
|
432
|
+
# Realtime tools
|
|
433
|
+
@register_tool("praisonai.realtime.connect")
|
|
434
|
+
def realtime_connect(
|
|
435
|
+
model: str = "gpt-4o-realtime-preview",
|
|
436
|
+
) -> str:
|
|
437
|
+
"""Connect to realtime API."""
|
|
438
|
+
try:
|
|
439
|
+
from praisonai.capabilities import realtime_connect
|
|
440
|
+
result = realtime_connect(model=model)
|
|
441
|
+
return str(result)
|
|
442
|
+
except ImportError:
|
|
443
|
+
return "Error: Realtime not available"
|
|
444
|
+
except Exception as e:
|
|
445
|
+
return f"Error: {e}"
|
|
446
|
+
|
|
447
|
+
@register_tool("praisonai.realtime.send")
|
|
448
|
+
def realtime_send(
|
|
449
|
+
session_id: str,
|
|
450
|
+
message: str,
|
|
451
|
+
) -> str:
|
|
452
|
+
"""Send message to realtime session."""
|
|
453
|
+
try:
|
|
454
|
+
from praisonai.capabilities import realtime_send
|
|
455
|
+
result = realtime_send(session_id=session_id, message=message)
|
|
456
|
+
return str(result)
|
|
457
|
+
except ImportError:
|
|
458
|
+
return "Error: Realtime not available"
|
|
459
|
+
except Exception as e:
|
|
460
|
+
return f"Error: {e}"
|
|
461
|
+
|
|
462
|
+
logger.info("Registered extended capability MCP tools")
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Knowledge Adapter
|
|
3
|
+
|
|
4
|
+
Maps PraisonAI knowledge operations to MCP tools.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
|
|
9
|
+
from ..registry import register_tool
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def register_knowledge_tools() -> None:
|
|
15
|
+
"""Register knowledge-related MCP tools."""
|
|
16
|
+
|
|
17
|
+
@register_tool("praisonai.knowledge.add")
|
|
18
|
+
def knowledge_add(
|
|
19
|
+
source: str,
|
|
20
|
+
source_type: str = "text",
|
|
21
|
+
) -> str:
|
|
22
|
+
"""Add a knowledge source (text, file, or URL)."""
|
|
23
|
+
try:
|
|
24
|
+
from praisonaiagents.knowledge import Knowledge
|
|
25
|
+
|
|
26
|
+
knowledge = Knowledge()
|
|
27
|
+
knowledge.add(source, source_type=source_type)
|
|
28
|
+
return f"Knowledge added from {source_type}"
|
|
29
|
+
except ImportError:
|
|
30
|
+
return "Error: Knowledge module not available"
|
|
31
|
+
except Exception as e:
|
|
32
|
+
return f"Error: {e}"
|
|
33
|
+
|
|
34
|
+
@register_tool("praisonai.knowledge.query")
|
|
35
|
+
def knowledge_query(
|
|
36
|
+
query: str,
|
|
37
|
+
limit: int = 5,
|
|
38
|
+
) -> str:
|
|
39
|
+
"""Query the knowledge base."""
|
|
40
|
+
try:
|
|
41
|
+
from praisonaiagents.knowledge import Knowledge
|
|
42
|
+
|
|
43
|
+
knowledge = Knowledge()
|
|
44
|
+
results = knowledge.query(query, limit=limit)
|
|
45
|
+
return str(results)
|
|
46
|
+
except ImportError:
|
|
47
|
+
return "Error: Knowledge module not available"
|
|
48
|
+
except Exception as e:
|
|
49
|
+
return f"Error: {e}"
|
|
50
|
+
|
|
51
|
+
@register_tool("praisonai.knowledge.list")
|
|
52
|
+
def knowledge_list() -> str:
|
|
53
|
+
"""List all knowledge sources."""
|
|
54
|
+
try:
|
|
55
|
+
from praisonaiagents.knowledge import Knowledge
|
|
56
|
+
|
|
57
|
+
knowledge = Knowledge()
|
|
58
|
+
sources = knowledge.list_sources()
|
|
59
|
+
return str(sources)
|
|
60
|
+
except ImportError:
|
|
61
|
+
return "Error: Knowledge module not available"
|
|
62
|
+
except Exception as e:
|
|
63
|
+
return f"Error: {e}"
|
|
64
|
+
|
|
65
|
+
@register_tool("praisonai.knowledge.clear")
|
|
66
|
+
def knowledge_clear() -> str:
|
|
67
|
+
"""Clear all knowledge."""
|
|
68
|
+
try:
|
|
69
|
+
from praisonaiagents.knowledge import Knowledge
|
|
70
|
+
|
|
71
|
+
knowledge = Knowledge()
|
|
72
|
+
knowledge.clear()
|
|
73
|
+
return "Knowledge cleared"
|
|
74
|
+
except ImportError:
|
|
75
|
+
return "Error: Knowledge module not available"
|
|
76
|
+
except Exception as e:
|
|
77
|
+
return f"Error: {e}"
|
|
78
|
+
|
|
79
|
+
@register_tool("praisonai.knowledge.stats")
|
|
80
|
+
def knowledge_stats() -> str:
|
|
81
|
+
"""Get knowledge base statistics."""
|
|
82
|
+
try:
|
|
83
|
+
from praisonaiagents.knowledge import Knowledge
|
|
84
|
+
|
|
85
|
+
knowledge = Knowledge()
|
|
86
|
+
stats = knowledge.stats()
|
|
87
|
+
return str(stats)
|
|
88
|
+
except ImportError:
|
|
89
|
+
return "Error: Knowledge module not available"
|
|
90
|
+
except Exception as e:
|
|
91
|
+
return f"Error: {e}"
|
|
92
|
+
|
|
93
|
+
logger.info("Registered knowledge MCP tools")
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Memory Adapter
|
|
3
|
+
|
|
4
|
+
Maps PraisonAI memory operations to MCP tools.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
from ..registry import register_tool
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def register_memory_tools() -> None:
|
|
16
|
+
"""Register memory-related MCP tools."""
|
|
17
|
+
|
|
18
|
+
@register_tool("praisonai.memory.show")
|
|
19
|
+
def memory_show(session_id: Optional[str] = None) -> str:
|
|
20
|
+
"""Show memory contents for a session."""
|
|
21
|
+
try:
|
|
22
|
+
from praisonaiagents.memory import Memory
|
|
23
|
+
|
|
24
|
+
memory = Memory()
|
|
25
|
+
if session_id:
|
|
26
|
+
data = memory.get_session(session_id)
|
|
27
|
+
else:
|
|
28
|
+
data = memory.get_all()
|
|
29
|
+
return str(data)
|
|
30
|
+
except ImportError:
|
|
31
|
+
return "Error: Memory module not available"
|
|
32
|
+
except Exception as e:
|
|
33
|
+
return f"Error: {e}"
|
|
34
|
+
|
|
35
|
+
@register_tool("praisonai.memory.add")
|
|
36
|
+
def memory_add(
|
|
37
|
+
content: str,
|
|
38
|
+
session_id: Optional[str] = None,
|
|
39
|
+
metadata: Optional[str] = None,
|
|
40
|
+
) -> str:
|
|
41
|
+
"""Add content to memory."""
|
|
42
|
+
try:
|
|
43
|
+
from praisonaiagents.memory import Memory
|
|
44
|
+
import json
|
|
45
|
+
|
|
46
|
+
memory = Memory()
|
|
47
|
+
meta = json.loads(metadata) if metadata else {}
|
|
48
|
+
memory.add(content, session_id=session_id, metadata=meta)
|
|
49
|
+
return "Memory added successfully"
|
|
50
|
+
except ImportError:
|
|
51
|
+
return "Error: Memory module not available"
|
|
52
|
+
except Exception as e:
|
|
53
|
+
return f"Error: {e}"
|
|
54
|
+
|
|
55
|
+
@register_tool("praisonai.memory.search")
|
|
56
|
+
def memory_search(
|
|
57
|
+
query: str,
|
|
58
|
+
limit: int = 10,
|
|
59
|
+
) -> str:
|
|
60
|
+
"""Search memory for relevant content."""
|
|
61
|
+
try:
|
|
62
|
+
from praisonaiagents.memory import Memory
|
|
63
|
+
|
|
64
|
+
memory = Memory()
|
|
65
|
+
results = memory.search(query, limit=limit)
|
|
66
|
+
return str(results)
|
|
67
|
+
except ImportError:
|
|
68
|
+
return "Error: Memory module not available"
|
|
69
|
+
except Exception as e:
|
|
70
|
+
return f"Error: {e}"
|
|
71
|
+
|
|
72
|
+
@register_tool("praisonai.memory.clear")
|
|
73
|
+
def memory_clear(session_id: Optional[str] = None) -> str:
|
|
74
|
+
"""Clear memory contents."""
|
|
75
|
+
try:
|
|
76
|
+
from praisonaiagents.memory import Memory
|
|
77
|
+
|
|
78
|
+
memory = Memory()
|
|
79
|
+
if session_id:
|
|
80
|
+
memory.clear_session(session_id)
|
|
81
|
+
return f"Session {session_id} cleared"
|
|
82
|
+
else:
|
|
83
|
+
memory.clear_all()
|
|
84
|
+
return "All memory cleared"
|
|
85
|
+
except ImportError:
|
|
86
|
+
return "Error: Memory module not available"
|
|
87
|
+
except Exception as e:
|
|
88
|
+
return f"Error: {e}"
|
|
89
|
+
|
|
90
|
+
@register_tool("praisonai.memory.sessions")
|
|
91
|
+
def memory_sessions() -> str:
|
|
92
|
+
"""List all memory sessions."""
|
|
93
|
+
try:
|
|
94
|
+
from praisonaiagents.memory import Memory
|
|
95
|
+
|
|
96
|
+
memory = Memory()
|
|
97
|
+
sessions = memory.list_sessions()
|
|
98
|
+
return str(sessions)
|
|
99
|
+
except ImportError:
|
|
100
|
+
return "Error: Memory module not available"
|
|
101
|
+
except Exception as e:
|
|
102
|
+
return f"Error: {e}"
|
|
103
|
+
|
|
104
|
+
logger.info("Registered memory MCP tools")
|