agentpool 2.1.9__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.
Potentially problematic release.
This version of agentpool might be problematic. Click here for more details.
- acp/README.md +64 -0
- acp/__init__.py +172 -0
- acp/__main__.py +10 -0
- acp/acp_requests.py +285 -0
- acp/agent/__init__.py +6 -0
- acp/agent/connection.py +256 -0
- acp/agent/implementations/__init__.py +6 -0
- acp/agent/implementations/debug_server/__init__.py +1 -0
- acp/agent/implementations/debug_server/cli.py +79 -0
- acp/agent/implementations/debug_server/debug.html +234 -0
- acp/agent/implementations/debug_server/debug_server.py +496 -0
- acp/agent/implementations/testing.py +91 -0
- acp/agent/protocol.py +65 -0
- acp/bridge/README.md +162 -0
- acp/bridge/__init__.py +6 -0
- acp/bridge/__main__.py +91 -0
- acp/bridge/bridge.py +246 -0
- acp/bridge/py.typed +0 -0
- acp/bridge/settings.py +15 -0
- acp/client/__init__.py +7 -0
- acp/client/connection.py +251 -0
- acp/client/implementations/__init__.py +7 -0
- acp/client/implementations/default_client.py +185 -0
- acp/client/implementations/headless_client.py +266 -0
- acp/client/implementations/noop_client.py +110 -0
- acp/client/protocol.py +61 -0
- acp/connection.py +280 -0
- acp/exceptions.py +46 -0
- acp/filesystem.py +524 -0
- acp/notifications.py +832 -0
- acp/py.typed +0 -0
- acp/schema/__init__.py +265 -0
- acp/schema/agent_plan.py +30 -0
- acp/schema/agent_requests.py +126 -0
- acp/schema/agent_responses.py +256 -0
- acp/schema/base.py +39 -0
- acp/schema/capabilities.py +230 -0
- acp/schema/client_requests.py +247 -0
- acp/schema/client_responses.py +96 -0
- acp/schema/common.py +81 -0
- acp/schema/content_blocks.py +188 -0
- acp/schema/mcp.py +82 -0
- acp/schema/messages.py +171 -0
- acp/schema/notifications.py +82 -0
- acp/schema/protocol_stuff.md +3 -0
- acp/schema/session_state.py +160 -0
- acp/schema/session_updates.py +419 -0
- acp/schema/slash_commands.py +51 -0
- acp/schema/terminal.py +15 -0
- acp/schema/tool_call.py +347 -0
- acp/stdio.py +250 -0
- acp/task/__init__.py +53 -0
- acp/task/debug.py +197 -0
- acp/task/dispatcher.py +93 -0
- acp/task/queue.py +69 -0
- acp/task/sender.py +82 -0
- acp/task/state.py +87 -0
- acp/task/supervisor.py +93 -0
- acp/terminal_handle.py +30 -0
- acp/tool_call_reporter.py +199 -0
- acp/tool_call_state.py +178 -0
- acp/transports.py +104 -0
- acp/utils.py +240 -0
- agentpool/__init__.py +63 -0
- agentpool/__main__.py +7 -0
- agentpool/agents/__init__.py +30 -0
- agentpool/agents/acp_agent/__init__.py +5 -0
- agentpool/agents/acp_agent/acp_agent.py +837 -0
- agentpool/agents/acp_agent/acp_converters.py +294 -0
- agentpool/agents/acp_agent/client_handler.py +317 -0
- agentpool/agents/acp_agent/session_state.py +44 -0
- agentpool/agents/agent.py +1264 -0
- agentpool/agents/agui_agent/__init__.py +19 -0
- agentpool/agents/agui_agent/agui_agent.py +677 -0
- agentpool/agents/agui_agent/agui_converters.py +423 -0
- agentpool/agents/agui_agent/chunk_transformer.py +204 -0
- agentpool/agents/agui_agent/event_types.py +83 -0
- agentpool/agents/agui_agent/helpers.py +192 -0
- agentpool/agents/architect.py +71 -0
- agentpool/agents/base_agent.py +177 -0
- agentpool/agents/claude_code_agent/__init__.py +11 -0
- agentpool/agents/claude_code_agent/claude_code_agent.py +1021 -0
- agentpool/agents/claude_code_agent/converters.py +243 -0
- agentpool/agents/context.py +105 -0
- agentpool/agents/events/__init__.py +61 -0
- agentpool/agents/events/builtin_handlers.py +129 -0
- agentpool/agents/events/event_emitter.py +320 -0
- agentpool/agents/events/events.py +561 -0
- agentpool/agents/events/tts_handlers.py +186 -0
- agentpool/agents/interactions.py +419 -0
- agentpool/agents/slashed_agent.py +244 -0
- agentpool/agents/sys_prompts.py +178 -0
- agentpool/agents/tool_wrapping.py +184 -0
- agentpool/base_provider.py +28 -0
- agentpool/common_types.py +226 -0
- agentpool/config_resources/__init__.py +16 -0
- agentpool/config_resources/acp_assistant.yml +24 -0
- agentpool/config_resources/agents.yml +109 -0
- agentpool/config_resources/agents_template.yml +18 -0
- agentpool/config_resources/agui_test.yml +18 -0
- agentpool/config_resources/claude_code_agent.yml +16 -0
- agentpool/config_resources/claude_style_subagent.md +30 -0
- agentpool/config_resources/external_acp_agents.yml +77 -0
- agentpool/config_resources/opencode_style_subagent.md +19 -0
- agentpool/config_resources/tts_test_agents.yml +78 -0
- agentpool/delegation/__init__.py +8 -0
- agentpool/delegation/base_team.py +504 -0
- agentpool/delegation/message_flow_tracker.py +39 -0
- agentpool/delegation/pool.py +1129 -0
- agentpool/delegation/team.py +325 -0
- agentpool/delegation/teamrun.py +343 -0
- agentpool/docs/__init__.py +5 -0
- agentpool/docs/gen_examples.py +42 -0
- agentpool/docs/utils.py +370 -0
- agentpool/functional/__init__.py +20 -0
- agentpool/functional/py.typed +0 -0
- agentpool/functional/run.py +80 -0
- agentpool/functional/structure.py +136 -0
- agentpool/hooks/__init__.py +20 -0
- agentpool/hooks/agent_hooks.py +247 -0
- agentpool/hooks/base.py +119 -0
- agentpool/hooks/callable.py +140 -0
- agentpool/hooks/command.py +180 -0
- agentpool/hooks/prompt.py +122 -0
- agentpool/jinja_filters.py +132 -0
- agentpool/log.py +224 -0
- agentpool/mcp_server/__init__.py +17 -0
- agentpool/mcp_server/client.py +429 -0
- agentpool/mcp_server/constants.py +32 -0
- agentpool/mcp_server/conversions.py +172 -0
- agentpool/mcp_server/helpers.py +47 -0
- agentpool/mcp_server/manager.py +232 -0
- agentpool/mcp_server/message_handler.py +164 -0
- agentpool/mcp_server/registries/__init__.py +1 -0
- agentpool/mcp_server/registries/official_registry_client.py +345 -0
- agentpool/mcp_server/registries/pulsemcp_client.py +88 -0
- agentpool/mcp_server/tool_bridge.py +548 -0
- agentpool/messaging/__init__.py +58 -0
- agentpool/messaging/compaction.py +928 -0
- agentpool/messaging/connection_manager.py +319 -0
- agentpool/messaging/context.py +66 -0
- agentpool/messaging/event_manager.py +426 -0
- agentpool/messaging/events.py +39 -0
- agentpool/messaging/message_container.py +209 -0
- agentpool/messaging/message_history.py +491 -0
- agentpool/messaging/messagenode.py +377 -0
- agentpool/messaging/messages.py +655 -0
- agentpool/messaging/processing.py +76 -0
- agentpool/mime_utils.py +95 -0
- agentpool/models/__init__.py +21 -0
- agentpool/models/acp_agents/__init__.py +22 -0
- agentpool/models/acp_agents/base.py +308 -0
- agentpool/models/acp_agents/mcp_capable.py +790 -0
- agentpool/models/acp_agents/non_mcp.py +842 -0
- agentpool/models/agents.py +450 -0
- agentpool/models/agui_agents.py +89 -0
- agentpool/models/claude_code_agents.py +238 -0
- agentpool/models/file_agents.py +116 -0
- agentpool/models/file_parsing.py +367 -0
- agentpool/models/manifest.py +658 -0
- agentpool/observability/__init__.py +9 -0
- agentpool/observability/observability_registry.py +97 -0
- agentpool/prompts/__init__.py +1 -0
- agentpool/prompts/base.py +27 -0
- agentpool/prompts/builtin_provider.py +75 -0
- agentpool/prompts/conversion_manager.py +95 -0
- agentpool/prompts/convert.py +96 -0
- agentpool/prompts/manager.py +204 -0
- agentpool/prompts/parts/zed.md +33 -0
- agentpool/prompts/prompts.py +581 -0
- agentpool/py.typed +0 -0
- agentpool/queries/tree-sitter-language-pack/README.md +7 -0
- agentpool/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
- agentpool/queries/tree-sitter-language-pack/c-tags.scm +9 -0
- agentpool/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
- agentpool/queries/tree-sitter-language-pack/clojure-tags.scm +7 -0
- agentpool/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
- agentpool/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
- agentpool/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
- agentpool/queries/tree-sitter-language-pack/d-tags.scm +26 -0
- agentpool/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
- agentpool/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
- agentpool/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
- agentpool/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
- agentpool/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
- agentpool/queries/tree-sitter-language-pack/go-tags.scm +42 -0
- agentpool/queries/tree-sitter-language-pack/java-tags.scm +20 -0
- agentpool/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
- agentpool/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
- agentpool/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
- agentpool/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
- agentpool/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
- agentpool/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
- agentpool/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
- agentpool/queries/tree-sitter-language-pack/python-tags.scm +14 -0
- agentpool/queries/tree-sitter-language-pack/r-tags.scm +21 -0
- agentpool/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
- agentpool/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
- agentpool/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
- agentpool/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
- agentpool/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
- agentpool/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
- agentpool/queries/tree-sitter-languages/README.md +24 -0
- agentpool/queries/tree-sitter-languages/c-tags.scm +9 -0
- agentpool/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
- agentpool/queries/tree-sitter-languages/cpp-tags.scm +15 -0
- agentpool/queries/tree-sitter-languages/dart-tags.scm +91 -0
- agentpool/queries/tree-sitter-languages/elisp-tags.scm +8 -0
- agentpool/queries/tree-sitter-languages/elixir-tags.scm +54 -0
- agentpool/queries/tree-sitter-languages/elm-tags.scm +19 -0
- agentpool/queries/tree-sitter-languages/fortran-tags.scm +15 -0
- agentpool/queries/tree-sitter-languages/go-tags.scm +30 -0
- agentpool/queries/tree-sitter-languages/haskell-tags.scm +3 -0
- agentpool/queries/tree-sitter-languages/hcl-tags.scm +77 -0
- agentpool/queries/tree-sitter-languages/java-tags.scm +20 -0
- agentpool/queries/tree-sitter-languages/javascript-tags.scm +88 -0
- agentpool/queries/tree-sitter-languages/julia-tags.scm +60 -0
- agentpool/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
- agentpool/queries/tree-sitter-languages/matlab-tags.scm +10 -0
- agentpool/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
- agentpool/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
- agentpool/queries/tree-sitter-languages/php-tags.scm +26 -0
- agentpool/queries/tree-sitter-languages/python-tags.scm +12 -0
- agentpool/queries/tree-sitter-languages/ql-tags.scm +26 -0
- agentpool/queries/tree-sitter-languages/ruby-tags.scm +64 -0
- agentpool/queries/tree-sitter-languages/rust-tags.scm +60 -0
- agentpool/queries/tree-sitter-languages/scala-tags.scm +65 -0
- agentpool/queries/tree-sitter-languages/typescript-tags.scm +41 -0
- agentpool/queries/tree-sitter-languages/zig-tags.scm +3 -0
- agentpool/repomap.py +1231 -0
- agentpool/resource_providers/__init__.py +17 -0
- agentpool/resource_providers/aggregating.py +54 -0
- agentpool/resource_providers/base.py +172 -0
- agentpool/resource_providers/codemode/__init__.py +9 -0
- agentpool/resource_providers/codemode/code_executor.py +215 -0
- agentpool/resource_providers/codemode/default_prompt.py +19 -0
- agentpool/resource_providers/codemode/helpers.py +83 -0
- agentpool/resource_providers/codemode/progress_executor.py +212 -0
- agentpool/resource_providers/codemode/provider.py +150 -0
- agentpool/resource_providers/codemode/remote_mcp_execution.py +143 -0
- agentpool/resource_providers/codemode/remote_provider.py +171 -0
- agentpool/resource_providers/filtering.py +42 -0
- agentpool/resource_providers/mcp_provider.py +246 -0
- agentpool/resource_providers/plan_provider.py +196 -0
- agentpool/resource_providers/pool.py +69 -0
- agentpool/resource_providers/static.py +289 -0
- agentpool/running/__init__.py +20 -0
- agentpool/running/decorators.py +56 -0
- agentpool/running/discovery.py +101 -0
- agentpool/running/executor.py +284 -0
- agentpool/running/injection.py +111 -0
- agentpool/running/py.typed +0 -0
- agentpool/running/run_nodes.py +87 -0
- agentpool/server.py +122 -0
- agentpool/sessions/__init__.py +13 -0
- agentpool/sessions/manager.py +302 -0
- agentpool/sessions/models.py +71 -0
- agentpool/sessions/session.py +239 -0
- agentpool/sessions/store.py +163 -0
- agentpool/skills/__init__.py +5 -0
- agentpool/skills/manager.py +120 -0
- agentpool/skills/registry.py +210 -0
- agentpool/skills/skill.py +36 -0
- agentpool/storage/__init__.py +17 -0
- agentpool/storage/manager.py +419 -0
- agentpool/storage/serialization.py +136 -0
- agentpool/talk/__init__.py +13 -0
- agentpool/talk/registry.py +128 -0
- agentpool/talk/stats.py +159 -0
- agentpool/talk/talk.py +604 -0
- agentpool/tasks/__init__.py +20 -0
- agentpool/tasks/exceptions.py +25 -0
- agentpool/tasks/registry.py +33 -0
- agentpool/testing.py +129 -0
- agentpool/text_templates/__init__.py +39 -0
- agentpool/text_templates/system_prompt.jinja +30 -0
- agentpool/text_templates/tool_call_default.jinja +13 -0
- agentpool/text_templates/tool_call_markdown.jinja +25 -0
- agentpool/text_templates/tool_call_simple.jinja +5 -0
- agentpool/tools/__init__.py +16 -0
- agentpool/tools/base.py +269 -0
- agentpool/tools/exceptions.py +9 -0
- agentpool/tools/manager.py +255 -0
- agentpool/tools/tool_call_info.py +87 -0
- agentpool/ui/__init__.py +2 -0
- agentpool/ui/base.py +89 -0
- agentpool/ui/mock_provider.py +81 -0
- agentpool/ui/stdlib_provider.py +150 -0
- agentpool/utils/__init__.py +44 -0
- agentpool/utils/baseregistry.py +185 -0
- agentpool/utils/count_tokens.py +62 -0
- agentpool/utils/dag.py +184 -0
- agentpool/utils/importing.py +206 -0
- agentpool/utils/inspection.py +334 -0
- agentpool/utils/model_capabilities.py +25 -0
- agentpool/utils/network.py +28 -0
- agentpool/utils/now.py +22 -0
- agentpool/utils/parse_time.py +87 -0
- agentpool/utils/result_utils.py +35 -0
- agentpool/utils/signatures.py +305 -0
- agentpool/utils/streams.py +112 -0
- agentpool/utils/tasks.py +186 -0
- agentpool/vfs_registry.py +250 -0
- agentpool-2.1.9.dist-info/METADATA +336 -0
- agentpool-2.1.9.dist-info/RECORD +474 -0
- agentpool-2.1.9.dist-info/WHEEL +4 -0
- agentpool-2.1.9.dist-info/entry_points.txt +14 -0
- agentpool-2.1.9.dist-info/licenses/LICENSE +22 -0
- agentpool_cli/__init__.py +34 -0
- agentpool_cli/__main__.py +66 -0
- agentpool_cli/agent.py +175 -0
- agentpool_cli/cli_types.py +23 -0
- agentpool_cli/common.py +163 -0
- agentpool_cli/create.py +175 -0
- agentpool_cli/history.py +217 -0
- agentpool_cli/log.py +78 -0
- agentpool_cli/py.typed +0 -0
- agentpool_cli/run.py +84 -0
- agentpool_cli/serve_acp.py +177 -0
- agentpool_cli/serve_api.py +69 -0
- agentpool_cli/serve_mcp.py +74 -0
- agentpool_cli/serve_vercel.py +233 -0
- agentpool_cli/store.py +171 -0
- agentpool_cli/task.py +84 -0
- agentpool_cli/utils.py +104 -0
- agentpool_cli/watch.py +54 -0
- agentpool_commands/__init__.py +180 -0
- agentpool_commands/agents.py +199 -0
- agentpool_commands/base.py +45 -0
- agentpool_commands/commands.py +58 -0
- agentpool_commands/completers.py +110 -0
- agentpool_commands/connections.py +175 -0
- agentpool_commands/markdown_utils.py +31 -0
- agentpool_commands/models.py +62 -0
- agentpool_commands/prompts.py +78 -0
- agentpool_commands/py.typed +0 -0
- agentpool_commands/read.py +77 -0
- agentpool_commands/resources.py +210 -0
- agentpool_commands/session.py +48 -0
- agentpool_commands/tools.py +269 -0
- agentpool_commands/utils.py +189 -0
- agentpool_commands/workers.py +163 -0
- agentpool_config/__init__.py +53 -0
- agentpool_config/builtin_tools.py +265 -0
- agentpool_config/commands.py +237 -0
- agentpool_config/conditions.py +301 -0
- agentpool_config/converters.py +30 -0
- agentpool_config/durable.py +331 -0
- agentpool_config/event_handlers.py +600 -0
- agentpool_config/events.py +153 -0
- agentpool_config/forward_targets.py +251 -0
- agentpool_config/hook_conditions.py +331 -0
- agentpool_config/hooks.py +241 -0
- agentpool_config/jinja.py +206 -0
- agentpool_config/knowledge.py +41 -0
- agentpool_config/loaders.py +350 -0
- agentpool_config/mcp_server.py +243 -0
- agentpool_config/nodes.py +202 -0
- agentpool_config/observability.py +191 -0
- agentpool_config/output_types.py +55 -0
- agentpool_config/pool_server.py +267 -0
- agentpool_config/prompt_hubs.py +105 -0
- agentpool_config/prompts.py +185 -0
- agentpool_config/py.typed +0 -0
- agentpool_config/resources.py +33 -0
- agentpool_config/session.py +119 -0
- agentpool_config/skills.py +17 -0
- agentpool_config/storage.py +288 -0
- agentpool_config/system_prompts.py +190 -0
- agentpool_config/task.py +162 -0
- agentpool_config/teams.py +52 -0
- agentpool_config/tools.py +112 -0
- agentpool_config/toolsets.py +1033 -0
- agentpool_config/workers.py +86 -0
- agentpool_prompts/__init__.py +1 -0
- agentpool_prompts/braintrust_hub.py +235 -0
- agentpool_prompts/fabric.py +75 -0
- agentpool_prompts/langfuse_hub.py +79 -0
- agentpool_prompts/promptlayer_provider.py +59 -0
- agentpool_prompts/py.typed +0 -0
- agentpool_server/__init__.py +9 -0
- agentpool_server/a2a_server/__init__.py +5 -0
- agentpool_server/a2a_server/a2a_types.py +41 -0
- agentpool_server/a2a_server/server.py +190 -0
- agentpool_server/a2a_server/storage.py +81 -0
- agentpool_server/acp_server/__init__.py +22 -0
- agentpool_server/acp_server/acp_agent.py +786 -0
- agentpool_server/acp_server/acp_tools.py +43 -0
- agentpool_server/acp_server/commands/__init__.py +18 -0
- agentpool_server/acp_server/commands/acp_commands.py +594 -0
- agentpool_server/acp_server/commands/debug_commands.py +376 -0
- agentpool_server/acp_server/commands/docs_commands/__init__.py +39 -0
- agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +169 -0
- agentpool_server/acp_server/commands/docs_commands/get_schema.py +176 -0
- agentpool_server/acp_server/commands/docs_commands/get_source.py +110 -0
- agentpool_server/acp_server/commands/docs_commands/git_diff.py +111 -0
- agentpool_server/acp_server/commands/docs_commands/helpers.py +33 -0
- agentpool_server/acp_server/commands/docs_commands/url_to_markdown.py +90 -0
- agentpool_server/acp_server/commands/spawn.py +210 -0
- agentpool_server/acp_server/converters.py +235 -0
- agentpool_server/acp_server/input_provider.py +338 -0
- agentpool_server/acp_server/server.py +288 -0
- agentpool_server/acp_server/session.py +969 -0
- agentpool_server/acp_server/session_manager.py +313 -0
- agentpool_server/acp_server/syntax_detection.py +250 -0
- agentpool_server/acp_server/zed_tools.md +90 -0
- agentpool_server/aggregating_server.py +309 -0
- agentpool_server/agui_server/__init__.py +11 -0
- agentpool_server/agui_server/server.py +128 -0
- agentpool_server/base.py +189 -0
- agentpool_server/http_server.py +164 -0
- agentpool_server/mcp_server/__init__.py +6 -0
- agentpool_server/mcp_server/server.py +314 -0
- agentpool_server/mcp_server/zed_wrapper.py +110 -0
- agentpool_server/openai_api_server/__init__.py +5 -0
- agentpool_server/openai_api_server/completions/__init__.py +1 -0
- agentpool_server/openai_api_server/completions/helpers.py +81 -0
- agentpool_server/openai_api_server/completions/models.py +98 -0
- agentpool_server/openai_api_server/responses/__init__.py +1 -0
- agentpool_server/openai_api_server/responses/helpers.py +74 -0
- agentpool_server/openai_api_server/responses/models.py +96 -0
- agentpool_server/openai_api_server/server.py +242 -0
- agentpool_server/py.typed +0 -0
- agentpool_storage/__init__.py +9 -0
- agentpool_storage/base.py +310 -0
- agentpool_storage/file_provider.py +378 -0
- agentpool_storage/formatters.py +129 -0
- agentpool_storage/memory_provider.py +396 -0
- agentpool_storage/models.py +108 -0
- agentpool_storage/py.typed +0 -0
- agentpool_storage/session_store.py +262 -0
- agentpool_storage/sql_provider/__init__.py +21 -0
- agentpool_storage/sql_provider/cli.py +146 -0
- agentpool_storage/sql_provider/models.py +249 -0
- agentpool_storage/sql_provider/queries.py +15 -0
- agentpool_storage/sql_provider/sql_provider.py +444 -0
- agentpool_storage/sql_provider/utils.py +234 -0
- agentpool_storage/text_log_provider.py +275 -0
- agentpool_toolsets/__init__.py +15 -0
- agentpool_toolsets/builtin/__init__.py +33 -0
- agentpool_toolsets/builtin/agent_management.py +239 -0
- agentpool_toolsets/builtin/chain.py +288 -0
- agentpool_toolsets/builtin/code.py +398 -0
- agentpool_toolsets/builtin/debug.py +291 -0
- agentpool_toolsets/builtin/execution_environment.py +381 -0
- agentpool_toolsets/builtin/file_edit/__init__.py +11 -0
- agentpool_toolsets/builtin/file_edit/file_edit.py +747 -0
- agentpool_toolsets/builtin/file_edit/fuzzy_matcher/__init__.py +5 -0
- agentpool_toolsets/builtin/file_edit/fuzzy_matcher/example_usage.py +311 -0
- agentpool_toolsets/builtin/file_edit/fuzzy_matcher/streaming_fuzzy_matcher.py +443 -0
- agentpool_toolsets/builtin/history.py +36 -0
- agentpool_toolsets/builtin/integration.py +85 -0
- agentpool_toolsets/builtin/skills.py +77 -0
- agentpool_toolsets/builtin/subagent_tools.py +324 -0
- agentpool_toolsets/builtin/tool_management.py +90 -0
- agentpool_toolsets/builtin/user_interaction.py +52 -0
- agentpool_toolsets/builtin/workers.py +128 -0
- agentpool_toolsets/composio_toolset.py +96 -0
- agentpool_toolsets/config_creation.py +192 -0
- agentpool_toolsets/entry_points.py +47 -0
- agentpool_toolsets/fsspec_toolset/__init__.py +7 -0
- agentpool_toolsets/fsspec_toolset/diagnostics.py +115 -0
- agentpool_toolsets/fsspec_toolset/grep.py +450 -0
- agentpool_toolsets/fsspec_toolset/helpers.py +631 -0
- agentpool_toolsets/fsspec_toolset/streaming_diff_parser.py +249 -0
- agentpool_toolsets/fsspec_toolset/toolset.py +1384 -0
- agentpool_toolsets/mcp_run_toolset.py +61 -0
- agentpool_toolsets/notifications.py +146 -0
- agentpool_toolsets/openapi.py +118 -0
- agentpool_toolsets/py.typed +0 -0
- agentpool_toolsets/search_toolset.py +202 -0
- agentpool_toolsets/semantic_memory_toolset.py +536 -0
- agentpool_toolsets/streaming_tools.py +265 -0
- agentpool_toolsets/vfs_toolset.py +124 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"""Pool server configuration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Annotated, Literal, assert_never
|
|
6
|
+
|
|
7
|
+
from pydantic import ConfigDict, Field, SecretStr
|
|
8
|
+
from schemez import Schema
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
TransportType = Literal["stdio", "sse", "streamable-http"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BasePoolServerConfig(Schema):
|
|
15
|
+
"""Base configuration for pool servers."""
|
|
16
|
+
|
|
17
|
+
type: str = Field(title="Server type")
|
|
18
|
+
"""Type discriminator for server configurations."""
|
|
19
|
+
|
|
20
|
+
enabled: bool = Field(default=False, title="Server enabled")
|
|
21
|
+
"""Whether this server is currently enabled."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class MCPPoolServerConfig(BasePoolServerConfig):
|
|
25
|
+
"""Configuration for pool-based MCP server."""
|
|
26
|
+
|
|
27
|
+
type: Literal["mcp"] = Field("mcp", init=False)
|
|
28
|
+
"""MCP server type."""
|
|
29
|
+
|
|
30
|
+
# Resource exposure control
|
|
31
|
+
serve_nodes: list[str] | bool = Field(
|
|
32
|
+
default=True,
|
|
33
|
+
title="Serve nodes",
|
|
34
|
+
examples=[["node1", "node2"], ["analysis", "transform"]],
|
|
35
|
+
)
|
|
36
|
+
"""Which nodes to expose as tools:
|
|
37
|
+
- True: All nodes
|
|
38
|
+
- False: No nodes
|
|
39
|
+
- list[str]: Specific node names
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
serve_prompts: list[str] | bool = Field(
|
|
43
|
+
default=True,
|
|
44
|
+
title="Serve prompts",
|
|
45
|
+
examples=[["prompt1", "prompt2"], ["system", "user"]],
|
|
46
|
+
)
|
|
47
|
+
"""Which prompts to expose:
|
|
48
|
+
- True: All prompts from manifest
|
|
49
|
+
- False: No prompts
|
|
50
|
+
- list[str]: Specific prompt names
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
transport: TransportType = Field(
|
|
54
|
+
default="stdio",
|
|
55
|
+
title="Transport type",
|
|
56
|
+
examples=["stdio", "sse", "streamable-http"],
|
|
57
|
+
)
|
|
58
|
+
"""Transport type to use."""
|
|
59
|
+
|
|
60
|
+
host: str = Field(
|
|
61
|
+
default="localhost",
|
|
62
|
+
title="Server host",
|
|
63
|
+
examples=["localhost", "0.0.0.0", "127.0.0.1"],
|
|
64
|
+
)
|
|
65
|
+
"""Host to bind server to (SSE / Streamable-HTTP only)."""
|
|
66
|
+
|
|
67
|
+
port: int = Field(
|
|
68
|
+
default=3001,
|
|
69
|
+
gt=0,
|
|
70
|
+
title="Server port",
|
|
71
|
+
examples=[3001, 8080, 9000],
|
|
72
|
+
)
|
|
73
|
+
"""Port to listen on (SSE / Streamable-HTTP only)."""
|
|
74
|
+
|
|
75
|
+
cors_origins: list[str] = Field(
|
|
76
|
+
default_factory=lambda: ["*"],
|
|
77
|
+
title="CORS origins",
|
|
78
|
+
examples=[["*"], ["https://example.com", "https://app.com"]],
|
|
79
|
+
)
|
|
80
|
+
"""Allowed CORS origins (SSE / Streamable-HTTP only)."""
|
|
81
|
+
|
|
82
|
+
zed_mode: bool = Field(default=False, title="Zed editor mode")
|
|
83
|
+
"""Enable Zed editor compatibility mode."""
|
|
84
|
+
|
|
85
|
+
model_config = ConfigDict(frozen=True)
|
|
86
|
+
|
|
87
|
+
def should_serve_node(self, name: str) -> bool:
|
|
88
|
+
"""Check if a node should be exposed."""
|
|
89
|
+
match self.serve_nodes:
|
|
90
|
+
case True:
|
|
91
|
+
return True
|
|
92
|
+
case False:
|
|
93
|
+
return False
|
|
94
|
+
case list():
|
|
95
|
+
return name in self.serve_nodes
|
|
96
|
+
case _ as unreachable:
|
|
97
|
+
assert_never(unreachable)
|
|
98
|
+
|
|
99
|
+
def should_serve_prompt(self, name: str) -> bool:
|
|
100
|
+
"""Check if a prompt should be exposed."""
|
|
101
|
+
match self.serve_prompts:
|
|
102
|
+
case True:
|
|
103
|
+
return True
|
|
104
|
+
case False:
|
|
105
|
+
return False
|
|
106
|
+
case list():
|
|
107
|
+
return name in self.serve_prompts
|
|
108
|
+
case _ as unreachable:
|
|
109
|
+
assert_never(unreachable)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class A2APoolServerConfig(BasePoolServerConfig):
|
|
113
|
+
"""Configuration for A2A (Agent-to-Agent) server."""
|
|
114
|
+
|
|
115
|
+
type: Literal["a2a"] = Field("a2a", init=False)
|
|
116
|
+
"""A2A server type."""
|
|
117
|
+
|
|
118
|
+
host: str = Field(
|
|
119
|
+
default="localhost",
|
|
120
|
+
title="Server host",
|
|
121
|
+
examples=["localhost", "0.0.0.0", "127.0.0.1"],
|
|
122
|
+
)
|
|
123
|
+
"""Host to bind server to."""
|
|
124
|
+
|
|
125
|
+
port: int = Field(
|
|
126
|
+
default=8001,
|
|
127
|
+
gt=0,
|
|
128
|
+
title="Server port",
|
|
129
|
+
examples=[8001, 8080, 9000],
|
|
130
|
+
)
|
|
131
|
+
"""Port to listen on."""
|
|
132
|
+
|
|
133
|
+
raise_exceptions: bool = Field(
|
|
134
|
+
default=False,
|
|
135
|
+
title="Raise exceptions",
|
|
136
|
+
)
|
|
137
|
+
"""Whether to raise exceptions during server start."""
|
|
138
|
+
|
|
139
|
+
cors_origins: list[str] = Field(
|
|
140
|
+
default_factory=lambda: ["*"],
|
|
141
|
+
title="CORS origins",
|
|
142
|
+
examples=[["*"], ["https://example.com", "https://app.com"]],
|
|
143
|
+
)
|
|
144
|
+
"""Allowed CORS origins."""
|
|
145
|
+
|
|
146
|
+
serve_docs: bool = Field(default=True, title="Serve documentation")
|
|
147
|
+
"""Whether to serve API documentation endpoints."""
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class ACPPoolServerConfig(BasePoolServerConfig):
|
|
151
|
+
"""Configuration for ACP (Agent Client Protocol) server."""
|
|
152
|
+
|
|
153
|
+
type: Literal["acp"] = Field("acp", init=False)
|
|
154
|
+
"""ACP server type."""
|
|
155
|
+
|
|
156
|
+
file_access: bool = Field(
|
|
157
|
+
default=True,
|
|
158
|
+
title="File access",
|
|
159
|
+
)
|
|
160
|
+
"""Whether to allow file system access."""
|
|
161
|
+
|
|
162
|
+
terminal_access: bool = Field(
|
|
163
|
+
default=True,
|
|
164
|
+
title="Terminal access",
|
|
165
|
+
)
|
|
166
|
+
"""Whether to allow terminal/shell access."""
|
|
167
|
+
|
|
168
|
+
raise_exceptions: bool = Field(
|
|
169
|
+
default=False,
|
|
170
|
+
title="Raise exceptions",
|
|
171
|
+
)
|
|
172
|
+
"""Whether to raise exceptions during server start."""
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class AGUIPoolServerConfig(BasePoolServerConfig):
|
|
176
|
+
"""Configuration for AGUI (AG-UI) server."""
|
|
177
|
+
|
|
178
|
+
type: Literal["agui"] = Field("agui", init=False)
|
|
179
|
+
"""AGUI server type."""
|
|
180
|
+
|
|
181
|
+
host: str = Field(
|
|
182
|
+
default="localhost",
|
|
183
|
+
title="Server host",
|
|
184
|
+
examples=["localhost", "0.0.0.0", "127.0.0.1"],
|
|
185
|
+
)
|
|
186
|
+
"""Host to bind server to."""
|
|
187
|
+
|
|
188
|
+
port: int = Field(
|
|
189
|
+
default=8002,
|
|
190
|
+
gt=0,
|
|
191
|
+
title="Server port",
|
|
192
|
+
examples=[8002, 8080, 9000],
|
|
193
|
+
)
|
|
194
|
+
"""Port to listen on."""
|
|
195
|
+
|
|
196
|
+
raise_exceptions: bool = Field(
|
|
197
|
+
default=False,
|
|
198
|
+
title="Raise exceptions",
|
|
199
|
+
)
|
|
200
|
+
"""Whether to raise exceptions during server start."""
|
|
201
|
+
|
|
202
|
+
cors_origins: list[str] = Field(
|
|
203
|
+
default_factory=lambda: ["*"],
|
|
204
|
+
title="CORS origins",
|
|
205
|
+
examples=[["*"], ["https://example.com", "https://app.com"]],
|
|
206
|
+
)
|
|
207
|
+
"""Allowed CORS origins."""
|
|
208
|
+
|
|
209
|
+
serve_docs: bool = Field(default=True, title="Serve documentation")
|
|
210
|
+
"""Whether to serve API documentation endpoints."""
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class OpenAIAPIPoolServerConfig(BasePoolServerConfig):
|
|
214
|
+
"""Configuration for OpenAI-compatible API server."""
|
|
215
|
+
|
|
216
|
+
type: Literal["openai-api"] = Field("openai-api", init=False)
|
|
217
|
+
"""OpenAI API server type."""
|
|
218
|
+
|
|
219
|
+
host: str = Field(
|
|
220
|
+
default="0.0.0.0",
|
|
221
|
+
title="Server host",
|
|
222
|
+
examples=["localhost", "0.0.0.0", "127.0.0.1"],
|
|
223
|
+
)
|
|
224
|
+
"""Host to bind server to."""
|
|
225
|
+
|
|
226
|
+
port: int = Field(
|
|
227
|
+
default=8000,
|
|
228
|
+
gt=0,
|
|
229
|
+
title="Server port",
|
|
230
|
+
examples=[8000, 8080, 9000],
|
|
231
|
+
)
|
|
232
|
+
"""Port to listen on."""
|
|
233
|
+
|
|
234
|
+
cors: bool = Field(default=True, title="Enable CORS")
|
|
235
|
+
"""Whether to enable CORS middleware."""
|
|
236
|
+
|
|
237
|
+
docs: bool = Field(default=True, title="Enable API docs")
|
|
238
|
+
"""Whether to enable API documentation endpoints."""
|
|
239
|
+
|
|
240
|
+
api_key: SecretStr | None = Field(
|
|
241
|
+
default=None,
|
|
242
|
+
title="API key",
|
|
243
|
+
)
|
|
244
|
+
"""Optional API key for authentication."""
|
|
245
|
+
|
|
246
|
+
raise_exceptions: bool = Field(
|
|
247
|
+
default=False,
|
|
248
|
+
title="Raise exceptions",
|
|
249
|
+
)
|
|
250
|
+
"""Whether to raise exceptions during server start."""
|
|
251
|
+
|
|
252
|
+
cors_origins: list[str] = Field(
|
|
253
|
+
default_factory=lambda: ["*"],
|
|
254
|
+
title="CORS origins",
|
|
255
|
+
examples=[["*"], ["https://example.com", "https://app.com"]],
|
|
256
|
+
)
|
|
257
|
+
"""Allowed CORS origins."""
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
PoolServerConfig = Annotated[
|
|
261
|
+
MCPPoolServerConfig
|
|
262
|
+
| A2APoolServerConfig
|
|
263
|
+
| ACPPoolServerConfig
|
|
264
|
+
| AGUIPoolServerConfig
|
|
265
|
+
| OpenAIAPIPoolServerConfig,
|
|
266
|
+
Field(discriminator="type"),
|
|
267
|
+
]
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""Prompt models for agent configuration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Annotated, Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import ConfigDict, Field, SecretStr # noqa: TC002
|
|
8
|
+
from pydantic.networks import HttpUrl
|
|
9
|
+
from schemez.schema import Schema
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class BasePromptHubConfig(Schema):
|
|
13
|
+
"""Configuration for prompt providers."""
|
|
14
|
+
|
|
15
|
+
type: str = Field(init=False, title="Prompt hub type")
|
|
16
|
+
"""Base prompt configuration."""
|
|
17
|
+
|
|
18
|
+
model_config = ConfigDict(frozen=True, use_attribute_docstrings=True, extra="forbid")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class PromptLayerConfig(BasePromptHubConfig):
|
|
22
|
+
"""Configuration for PromptLayer prompt provider."""
|
|
23
|
+
|
|
24
|
+
model_config = ConfigDict(json_schema_extra={"x-doc-title": "PromptLayer"})
|
|
25
|
+
|
|
26
|
+
type: Literal["promptlayer"] = Field("promptlayer", init=False)
|
|
27
|
+
"""Configuration for PromptLayer prompt provider."""
|
|
28
|
+
|
|
29
|
+
api_key: SecretStr = Field(title="PromptLayer API key")
|
|
30
|
+
"""API key for the PromptLayer API."""
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class LangfuseConfig(BasePromptHubConfig):
|
|
34
|
+
"""Configuration for Langfuse prompt provider."""
|
|
35
|
+
|
|
36
|
+
model_config = ConfigDict(json_schema_extra={"x-doc-title": "Langfuse"})
|
|
37
|
+
|
|
38
|
+
type: Literal["langfuse"] = Field("langfuse", init=False)
|
|
39
|
+
"""Configuration for Langfuse prompt provider."""
|
|
40
|
+
|
|
41
|
+
secret_key: SecretStr = Field(title="Langfuse secret key")
|
|
42
|
+
"""Secret key for the Langfuse API."""
|
|
43
|
+
|
|
44
|
+
public_key: SecretStr = Field(title="Langfuse public key")
|
|
45
|
+
"""Public key for the Langfuse API."""
|
|
46
|
+
|
|
47
|
+
host: HttpUrl = Field(
|
|
48
|
+
default=HttpUrl("https://cloud.langfuse.com"),
|
|
49
|
+
examples=["https://cloud.langfuse.com", "https://langfuse.example.com"],
|
|
50
|
+
title="Langfuse host",
|
|
51
|
+
)
|
|
52
|
+
"""Langfuse host address."""
|
|
53
|
+
|
|
54
|
+
cache_ttl_seconds: int = Field(
|
|
55
|
+
default=60,
|
|
56
|
+
ge=0,
|
|
57
|
+
examples=[60, 300, 3600],
|
|
58
|
+
title="Cache TTL seconds",
|
|
59
|
+
)
|
|
60
|
+
"""Cache TTL for responses in seconds."""
|
|
61
|
+
|
|
62
|
+
max_retries: int = Field(default=2, ge=0, examples=[1, 2, 5], title="Maximum retries")
|
|
63
|
+
"""Maximum number of retries for failed requests."""
|
|
64
|
+
|
|
65
|
+
fetch_timeout_seconds: int = Field(
|
|
66
|
+
default=20,
|
|
67
|
+
ge=0,
|
|
68
|
+
examples=[10, 20, 60],
|
|
69
|
+
title="Fetch timeout seconds",
|
|
70
|
+
)
|
|
71
|
+
"""Timeout for fetching responses in seconds."""
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class BraintrustConfig(BasePromptHubConfig):
|
|
75
|
+
"""Configuration for Braintrust prompt provider."""
|
|
76
|
+
|
|
77
|
+
model_config = ConfigDict(json_schema_extra={"x-doc-title": "Braintrust"})
|
|
78
|
+
|
|
79
|
+
type: Literal["braintrust"] = Field("braintrust", init=False)
|
|
80
|
+
"""Configuration for Braintrust prompt provider."""
|
|
81
|
+
|
|
82
|
+
api_key: SecretStr | None = Field(default=None, title="Braintrust API key")
|
|
83
|
+
"""API key for the Braintrust API. Defaults to BRAINTRUST_API_KEY env var"""
|
|
84
|
+
|
|
85
|
+
project: str | None = Field(
|
|
86
|
+
default=None,
|
|
87
|
+
examples=["my_project", "ai_agents", "production"],
|
|
88
|
+
title="Braintrust project",
|
|
89
|
+
)
|
|
90
|
+
"""Braintrust Project name."""
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class FabricConfig(BasePromptHubConfig):
|
|
94
|
+
"""Configuration for Fabric GitHub prompt provider."""
|
|
95
|
+
|
|
96
|
+
model_config = ConfigDict(json_schema_extra={"x-doc-title": "Fabric"})
|
|
97
|
+
|
|
98
|
+
type: Literal["fabric"] = Field("fabric", init=False)
|
|
99
|
+
"""Configuration for Fabric GitHub prompt provider."""
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
PromptHubConfig = Annotated[
|
|
103
|
+
PromptLayerConfig | LangfuseConfig | FabricConfig | BraintrustConfig,
|
|
104
|
+
Field(discriminator="type"),
|
|
105
|
+
]
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"""Prompt models for AgentPool."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
import os
|
|
7
|
+
from typing import Annotated, Any, Literal
|
|
8
|
+
|
|
9
|
+
from pydantic import ConfigDict, Field, ImportString
|
|
10
|
+
from schemez import Schema
|
|
11
|
+
from upathtools import UPath
|
|
12
|
+
|
|
13
|
+
from agentpool.log import get_logger
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
logger = get_logger(__name__)
|
|
17
|
+
|
|
18
|
+
MessageContentType = Literal["text", "resource", "image_url", "image_base64"]
|
|
19
|
+
# Our internal role type (could include more roles)
|
|
20
|
+
MessageRole = Literal["system", "user", "assistant", "tool"]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class MessageContent(Schema):
|
|
24
|
+
"""Content item in a message."""
|
|
25
|
+
|
|
26
|
+
type: MessageContentType = Field(
|
|
27
|
+
title="Content type",
|
|
28
|
+
examples=["text", "resource", "image_url"],
|
|
29
|
+
)
|
|
30
|
+
"""Message content type."""
|
|
31
|
+
|
|
32
|
+
content: str = Field(
|
|
33
|
+
title="Content value",
|
|
34
|
+
examples=["Hello world", "file:///path/to/file.txt", "data:image/png;base64,..."],
|
|
35
|
+
) # The actual content (text/uri/url/base64)
|
|
36
|
+
"""The actual content (text/uri/url/base64)."""
|
|
37
|
+
|
|
38
|
+
alt_text: str | None = Field(
|
|
39
|
+
default=None,
|
|
40
|
+
title="Alternative text",
|
|
41
|
+
examples=["Image description", "Resource summary"],
|
|
42
|
+
)
|
|
43
|
+
"""Alternative text for the content."""
|
|
44
|
+
|
|
45
|
+
model_config = ConfigDict(frozen=True)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class PromptParameter(Schema):
|
|
49
|
+
"""Prompt argument with validation information."""
|
|
50
|
+
|
|
51
|
+
name: str = Field(
|
|
52
|
+
title="Parameter name",
|
|
53
|
+
examples=["user_name", "task_description", "max_tokens"],
|
|
54
|
+
)
|
|
55
|
+
"""Name of the argument as used in the prompt."""
|
|
56
|
+
|
|
57
|
+
description: str | None = Field(
|
|
58
|
+
default=None,
|
|
59
|
+
title="Parameter description",
|
|
60
|
+
examples=["Name of the user", "Description of the task to perform"],
|
|
61
|
+
)
|
|
62
|
+
"""Human-readable description of the argument."""
|
|
63
|
+
|
|
64
|
+
required: bool = Field(default=False, title="Required parameter")
|
|
65
|
+
"""Whether this argument must be provided when formatting the prompt."""
|
|
66
|
+
|
|
67
|
+
type_hint: ImportString[Any] = Field(
|
|
68
|
+
default="str",
|
|
69
|
+
title="Type hint",
|
|
70
|
+
examples=["str", "int", "bool", "list[str]"],
|
|
71
|
+
)
|
|
72
|
+
"""Type annotation for the argument, defaults to str."""
|
|
73
|
+
|
|
74
|
+
default: Any | None = Field(default=None, title="Default value")
|
|
75
|
+
"""Default value if argument is optional."""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class PromptMessage(Schema):
|
|
79
|
+
"""A message in a prompt template."""
|
|
80
|
+
|
|
81
|
+
role: MessageRole = Field(title="Message role", examples=["system", "user", "assistant"])
|
|
82
|
+
"""Role of the message."""
|
|
83
|
+
|
|
84
|
+
content: str | MessageContent | list[MessageContent] = Field(
|
|
85
|
+
default="",
|
|
86
|
+
title="Message content",
|
|
87
|
+
examples=["You are a helpful assistant", "What is the weather like?"],
|
|
88
|
+
)
|
|
89
|
+
"""Content of the message."""
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class BasePromptConfig(Schema):
|
|
93
|
+
"""Base class for all prompts."""
|
|
94
|
+
|
|
95
|
+
name: str = Field(title="Prompt name", examples=["greeting", "code_review", "summarize_text"])
|
|
96
|
+
"""Technical identifier (automatically set from config key during registration)."""
|
|
97
|
+
|
|
98
|
+
title: str | None = Field(
|
|
99
|
+
default=None,
|
|
100
|
+
title="Prompt title",
|
|
101
|
+
examples=["Greeting Assistant", "Code Review Helper", "Text Summarizer"],
|
|
102
|
+
)
|
|
103
|
+
"""Title of the prompt."""
|
|
104
|
+
|
|
105
|
+
description: str = Field(
|
|
106
|
+
title="Prompt description",
|
|
107
|
+
examples=["A friendly greeting prompt", "Reviews code for best practices"],
|
|
108
|
+
)
|
|
109
|
+
"""Human-readable description of what this prompt does."""
|
|
110
|
+
|
|
111
|
+
arguments: list[PromptParameter] = Field(default_factory=list, title="Prompt arguments")
|
|
112
|
+
"""List of arguments that this prompt accepts."""
|
|
113
|
+
|
|
114
|
+
metadata: dict[str, Any] = Field(default_factory=dict, title="Prompt metadata")
|
|
115
|
+
"""Additional metadata for storing custom prompt information."""
|
|
116
|
+
# messages: list[PromptMessage]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class StaticPromptConfig(BasePromptConfig):
|
|
120
|
+
"""Static prompt defined by message list."""
|
|
121
|
+
|
|
122
|
+
messages: list[PromptMessage] = Field(title="Prompt messages")
|
|
123
|
+
"""List of messages that make up this prompt."""
|
|
124
|
+
|
|
125
|
+
type: Literal["text"] = Field(default="text", init=False, title="Prompt type")
|
|
126
|
+
"""Discriminator field identifying this as a static text prompt."""
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class DynamicPromptConfig(BasePromptConfig):
|
|
130
|
+
"""Dynamic prompt loaded from callable."""
|
|
131
|
+
|
|
132
|
+
import_path: str | Callable[..., Any] = Field(
|
|
133
|
+
title="Import path",
|
|
134
|
+
examples=["mymodule.create_prompt", "utils.prompts:generate_greeting"],
|
|
135
|
+
)
|
|
136
|
+
"""Dotted import path to the callable that generates the prompt."""
|
|
137
|
+
|
|
138
|
+
template: str | None = Field(
|
|
139
|
+
default=None,
|
|
140
|
+
title="Template string",
|
|
141
|
+
examples=["Hello {{ name }}!", "Task: {{ task }}\nInstructions: {{ instructions }}"],
|
|
142
|
+
)
|
|
143
|
+
"""Optional template string for formatting the callable's output."""
|
|
144
|
+
|
|
145
|
+
completions: dict[str, str] | None = Field(default=None, title="Completion mappings")
|
|
146
|
+
"""Optional mapping of argument names to completion functions."""
|
|
147
|
+
|
|
148
|
+
type: Literal["function"] = Field(default="function", init=False, title="Prompt type")
|
|
149
|
+
"""Discriminator field identifying this as a function-based prompt."""
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class FilePromptConfig(BasePromptConfig):
|
|
153
|
+
"""Prompt loaded from a file.
|
|
154
|
+
|
|
155
|
+
This type of prompt loads its content from a file, allowing for longer or more
|
|
156
|
+
complex prompts to be managed in separate files. The file content is loaded
|
|
157
|
+
and parsed according to the specified format.
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
path: str | os.PathLike[str] | UPath = Field(
|
|
161
|
+
title="File path",
|
|
162
|
+
examples=["prompts/greeting.txt", "/path/to/prompt.md", "templates/system.j2"],
|
|
163
|
+
)
|
|
164
|
+
"""Path to the file containing the prompt content."""
|
|
165
|
+
|
|
166
|
+
fmt: Literal["text", "markdown", "jinja2"] = Field(
|
|
167
|
+
default="text",
|
|
168
|
+
alias="format",
|
|
169
|
+
title="File format",
|
|
170
|
+
examples=["text", "markdown", "jinja2"],
|
|
171
|
+
)
|
|
172
|
+
"""Format of the file content (text, markdown, or jinja2 template)."""
|
|
173
|
+
|
|
174
|
+
type: Literal["file"] = Field(default="file", init=False, title="Prompt type")
|
|
175
|
+
"""Discriminator field identifying this as a file-based prompt."""
|
|
176
|
+
|
|
177
|
+
watch: bool = Field(default=False, title="Watch for changes")
|
|
178
|
+
"""Whether to watch the file for changes and reload automatically."""
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
# Type to use in configuration
|
|
182
|
+
PromptConfig = Annotated[
|
|
183
|
+
StaticPromptConfig | DynamicPromptConfig | FilePromptConfig,
|
|
184
|
+
Field(discriminator="type"),
|
|
185
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Models for resource information."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import TYPE_CHECKING, Self
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from mcp.types import Resource as MCPResource
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class ResourceInfo:
|
|
15
|
+
"""Information about an available resource.
|
|
16
|
+
|
|
17
|
+
This class provides essential information about a resource that can be loaded.
|
|
18
|
+
Use the resource name with load_resource() to access the actual content.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
name: str
|
|
22
|
+
"""Name of the resource, use this with load_resource()"""
|
|
23
|
+
|
|
24
|
+
uri: str
|
|
25
|
+
"""URI identifying the resource location"""
|
|
26
|
+
|
|
27
|
+
description: str | None = None
|
|
28
|
+
"""Optional description of the resource's content or purpose"""
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
async def from_mcp_resource(cls, resource: MCPResource) -> Self:
|
|
32
|
+
"""Create ResourceInfo from MCP resource."""
|
|
33
|
+
return cls(name=resource.name, uri=str(resource.uri), description=resource.description)
|