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,450 @@
|
|
|
1
|
+
"""Models for agent configuration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence # noqa: TC003
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal, assert_never
|
|
8
|
+
from uuid import UUID
|
|
9
|
+
|
|
10
|
+
from exxec.configs import ExecutionEnvironmentConfig # noqa: TC002
|
|
11
|
+
from llmling_models.configs import AnyModelConfig # noqa: TC002
|
|
12
|
+
from pydantic import ConfigDict, Field, model_validator
|
|
13
|
+
from pydantic_ai import UsageLimits # noqa: TC002
|
|
14
|
+
from schemez import InlineSchemaDef
|
|
15
|
+
from tokonomics.model_names import ModelId # noqa: TC002
|
|
16
|
+
from toprompt import render_prompt
|
|
17
|
+
|
|
18
|
+
from agentpool import log
|
|
19
|
+
from agentpool.common_types import EndStrategy # noqa: TC001
|
|
20
|
+
from agentpool.prompts.prompts import PromptMessage, StaticPrompt
|
|
21
|
+
from agentpool.resource_providers import StaticResourceProvider
|
|
22
|
+
from agentpool_config.hooks import HooksConfig # noqa: TC001
|
|
23
|
+
from agentpool_config.knowledge import Knowledge # noqa: TC001
|
|
24
|
+
from agentpool_config.nodes import BaseAgentConfig
|
|
25
|
+
from agentpool_config.output_types import StructuredResponseConfig # noqa: TC001
|
|
26
|
+
from agentpool_config.session import MemoryConfig, SessionQuery
|
|
27
|
+
from agentpool_config.system_prompts import PromptConfig # noqa: TC001
|
|
28
|
+
from agentpool_config.tools import BaseToolConfig, ToolConfig # noqa: TC001
|
|
29
|
+
from agentpool_config.toolsets import ToolsetConfig # noqa: TC001
|
|
30
|
+
from agentpool_config.workers import WorkerConfig # noqa: TC001
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if TYPE_CHECKING:
|
|
34
|
+
from agentpool.prompts.prompts import BasePrompt
|
|
35
|
+
from agentpool.resource_providers import ResourceProvider
|
|
36
|
+
from agentpool.tools.base import Tool
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
ToolMode = Literal["codemode"]
|
|
40
|
+
AutoCache = Literal["off", "5m", "1h"]
|
|
41
|
+
|
|
42
|
+
logger = log.get_logger(__name__)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class NativeAgentConfig(BaseAgentConfig):
|
|
46
|
+
"""Configuration for a single agent in the system.
|
|
47
|
+
|
|
48
|
+
Defines an agent's complete configuration including its model, environment,
|
|
49
|
+
and behavior settings.
|
|
50
|
+
|
|
51
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/agent_configuration/
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
model_config = ConfigDict(
|
|
55
|
+
json_schema_extra={
|
|
56
|
+
"x-icon": "octicon:hubot-16",
|
|
57
|
+
"x-doc-title": "Agent Configuration",
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
type: Literal["native"] = Field(default="native", init=False)
|
|
62
|
+
"""Top-level discriminator for agent type."""
|
|
63
|
+
|
|
64
|
+
inherits: str | None = Field(default=None, title="Inheritance source")
|
|
65
|
+
"""Name of agent config to inherit from"""
|
|
66
|
+
|
|
67
|
+
model: AnyModelConfig | ModelId | str | None = Field(
|
|
68
|
+
default=None,
|
|
69
|
+
examples=["openai:gpt-5-nano"],
|
|
70
|
+
title="Model configuration or name",
|
|
71
|
+
json_schema_extra={
|
|
72
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/model_configuration/"
|
|
73
|
+
},
|
|
74
|
+
)
|
|
75
|
+
"""The model to use for this agent. Can be either a simple model name
|
|
76
|
+
string (e.g. 'openai:gpt-5') or a structured model definition.
|
|
77
|
+
|
|
78
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/model_configuration/
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
tools: list[ToolConfig | str] = Field(
|
|
82
|
+
default_factory=list,
|
|
83
|
+
examples=[
|
|
84
|
+
["webbrowser:open", "builtins:print"],
|
|
85
|
+
[
|
|
86
|
+
{
|
|
87
|
+
"type": "import",
|
|
88
|
+
"import_path": "webbrowser:open",
|
|
89
|
+
"name": "web_browser",
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
],
|
|
93
|
+
title="Tool configurations",
|
|
94
|
+
json_schema_extra={
|
|
95
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/tool_configuration/"
|
|
96
|
+
},
|
|
97
|
+
)
|
|
98
|
+
"""A list of tools to register with this agent.
|
|
99
|
+
|
|
100
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/tool_configuration/
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
toolsets: list[ToolsetConfig] = Field(
|
|
104
|
+
default_factory=list,
|
|
105
|
+
examples=[
|
|
106
|
+
[
|
|
107
|
+
{
|
|
108
|
+
"type": "openapi",
|
|
109
|
+
"spec": "https://api.example.com/openapi.json",
|
|
110
|
+
"namespace": "api",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"type": "file_access",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": "composio",
|
|
117
|
+
"user_id": "user123@example.com",
|
|
118
|
+
"toolsets": ["github", "slack"],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
],
|
|
122
|
+
title="Toolset configurations",
|
|
123
|
+
json_schema_extra={
|
|
124
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/toolset_configuration/"
|
|
125
|
+
},
|
|
126
|
+
)
|
|
127
|
+
"""Toolset configurations for extensible tool collections.
|
|
128
|
+
|
|
129
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/toolset_configuration/
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
session: str | SessionQuery | MemoryConfig | None = Field(
|
|
133
|
+
default=None,
|
|
134
|
+
examples=["main_session", "user_123"],
|
|
135
|
+
title="Session configuration",
|
|
136
|
+
json_schema_extra={
|
|
137
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/session_configuration/"
|
|
138
|
+
},
|
|
139
|
+
)
|
|
140
|
+
"""Session configuration for conversation recovery.
|
|
141
|
+
|
|
142
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/session_configuration/
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
output_type: str | StructuredResponseConfig | None = Field(
|
|
146
|
+
default=None,
|
|
147
|
+
examples=["json_response", "code_output"],
|
|
148
|
+
title="Response type",
|
|
149
|
+
json_schema_extra={
|
|
150
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/response_configuration/"
|
|
151
|
+
},
|
|
152
|
+
)
|
|
153
|
+
"""Name of the response definition to use.
|
|
154
|
+
|
|
155
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/response_configuration/
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
retries: int = Field(default=1, ge=0, examples=[1, 3], title="Model retries")
|
|
159
|
+
"""Number of retries for failed operations (maps to pydantic-ai's retries)"""
|
|
160
|
+
|
|
161
|
+
output_retries: int | None = Field(default=None, examples=[1, 3], title="Output retries")
|
|
162
|
+
"""Max retries for result validation"""
|
|
163
|
+
|
|
164
|
+
end_strategy: EndStrategy = Field(
|
|
165
|
+
default="early",
|
|
166
|
+
examples=["early", "exhaust"],
|
|
167
|
+
title="Tool execution strategy",
|
|
168
|
+
)
|
|
169
|
+
"""The strategy for handling multiple tool calls when a final result is found"""
|
|
170
|
+
|
|
171
|
+
avatar: str | None = Field(
|
|
172
|
+
default=None,
|
|
173
|
+
examples=["https://example.com/avatar.png", "/assets/robot.jpg"],
|
|
174
|
+
title="Avatar image",
|
|
175
|
+
)
|
|
176
|
+
"""URL or path to agent's avatar image"""
|
|
177
|
+
|
|
178
|
+
system_prompt: str | Sequence[str | PromptConfig] | None = Field(
|
|
179
|
+
default=None,
|
|
180
|
+
title="System Prompt",
|
|
181
|
+
examples=[
|
|
182
|
+
"You are a helpful assistant.",
|
|
183
|
+
["You are an AI assistant.", "Always be concise."],
|
|
184
|
+
],
|
|
185
|
+
json_schema_extra={
|
|
186
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/system_prompts_configuration/"
|
|
187
|
+
},
|
|
188
|
+
)
|
|
189
|
+
"""System prompt for the agent. Can be a string or list of strings/prompt configs.
|
|
190
|
+
|
|
191
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/system_prompts_configuration/
|
|
192
|
+
"""
|
|
193
|
+
|
|
194
|
+
# context_sources: list[ContextSource] = Field(default_factory=list)
|
|
195
|
+
# """Initial context sources to load"""
|
|
196
|
+
|
|
197
|
+
knowledge: Knowledge | None = Field(
|
|
198
|
+
default=None,
|
|
199
|
+
title="Knowledge sources",
|
|
200
|
+
json_schema_extra={
|
|
201
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/knowledge_configuration/"
|
|
202
|
+
},
|
|
203
|
+
)
|
|
204
|
+
"""Knowledge sources for this agent.
|
|
205
|
+
|
|
206
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/knowledge_configuration/
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
workers: list[WorkerConfig] = Field(
|
|
210
|
+
default_factory=list,
|
|
211
|
+
examples=[
|
|
212
|
+
[{"type": "agent", "name": "web_agent", "reset_history_on_run": True}],
|
|
213
|
+
[{"type": "team", "name": "analysis_team"}],
|
|
214
|
+
],
|
|
215
|
+
title="Worker agents",
|
|
216
|
+
json_schema_extra={
|
|
217
|
+
"documentation_url": "https://phil65.github.io/agentpool/YAML%20Configuration/worker_configuration/"
|
|
218
|
+
},
|
|
219
|
+
)
|
|
220
|
+
"""Worker agents which will be available as tools.
|
|
221
|
+
|
|
222
|
+
Docs: https://phil65.github.io/agentpool/YAML%20Configuration/worker_configuration/
|
|
223
|
+
"""
|
|
224
|
+
|
|
225
|
+
environment: ExecutionEnvironmentConfig | None = Field(
|
|
226
|
+
default=None, title="Execution environment"
|
|
227
|
+
)
|
|
228
|
+
"""Execution environment configuration for this agent."""
|
|
229
|
+
|
|
230
|
+
usage_limits: UsageLimits | None = Field(default=None, title="Usage limits")
|
|
231
|
+
"""Usage limits for this agent."""
|
|
232
|
+
|
|
233
|
+
tool_mode: ToolMode | None = Field(
|
|
234
|
+
default=None,
|
|
235
|
+
examples=["codemode"],
|
|
236
|
+
title="Tool execution mode",
|
|
237
|
+
)
|
|
238
|
+
"""Tool execution mode:
|
|
239
|
+
- None: Default mode - tools are called directly
|
|
240
|
+
- "codemode": Tools are wrapped in a Python execution environment
|
|
241
|
+
"""
|
|
242
|
+
|
|
243
|
+
auto_cache: AutoCache = Field(
|
|
244
|
+
default="off",
|
|
245
|
+
examples=["off", "5m", "1h"],
|
|
246
|
+
title="Automatic caching",
|
|
247
|
+
)
|
|
248
|
+
"""Automatic prompt caching configuration:
|
|
249
|
+
- "off": No automatic caching
|
|
250
|
+
- "5m": Add cache point with 5 minute TTL
|
|
251
|
+
- "1h": Add cache point with 1 hour TTL
|
|
252
|
+
"""
|
|
253
|
+
|
|
254
|
+
hooks: HooksConfig | None = Field(
|
|
255
|
+
default=None,
|
|
256
|
+
title="Lifecycle hooks",
|
|
257
|
+
)
|
|
258
|
+
"""Hooks for intercepting and customizing agent behavior at key lifecycle points.
|
|
259
|
+
|
|
260
|
+
Allows adding context, blocking operations, modifying inputs, or triggering
|
|
261
|
+
side effects during session start/end, run execution, tool usage, and delegation.
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
@model_validator(mode="before")
|
|
265
|
+
@classmethod
|
|
266
|
+
def validate_output_type(cls, data: dict[str, Any]) -> dict[str, Any]:
|
|
267
|
+
"""Convert result type and apply its settings."""
|
|
268
|
+
output_type = data.get("output_type")
|
|
269
|
+
if isinstance(output_type, dict):
|
|
270
|
+
# Extract response-specific settings
|
|
271
|
+
tool_name = output_type.pop("result_tool_name", None)
|
|
272
|
+
tool_description = output_type.pop("result_tool_description", None)
|
|
273
|
+
retries = output_type.pop("output_retries", None)
|
|
274
|
+
|
|
275
|
+
# Convert remaining dict to ResponseDefinition
|
|
276
|
+
if "type" not in output_type["response_schema"]:
|
|
277
|
+
output_type["response_schema"]["type"] = "inline"
|
|
278
|
+
data["output_type"]["response_schema"] = InlineSchemaDef(**output_type)
|
|
279
|
+
|
|
280
|
+
# Apply extracted settings to agent config
|
|
281
|
+
if tool_name:
|
|
282
|
+
data["result_tool_name"] = tool_name
|
|
283
|
+
if tool_description:
|
|
284
|
+
data["result_tool_description"] = tool_description
|
|
285
|
+
if retries is not None:
|
|
286
|
+
data["output_retries"] = retries
|
|
287
|
+
|
|
288
|
+
return data
|
|
289
|
+
|
|
290
|
+
@model_validator(mode="before")
|
|
291
|
+
@classmethod
|
|
292
|
+
def handle_model_types(cls, data: dict[str, Any]) -> dict[str, Any]:
|
|
293
|
+
"""Convert model inputs to appropriate format."""
|
|
294
|
+
if isinstance((model := data.get("model")), str):
|
|
295
|
+
data["model"] = {"type": "string", "identifier": model}
|
|
296
|
+
return data
|
|
297
|
+
|
|
298
|
+
def get_toolsets(self) -> list[ResourceProvider]:
|
|
299
|
+
"""Get all resource providers for this agent."""
|
|
300
|
+
providers: list[ResourceProvider] = []
|
|
301
|
+
|
|
302
|
+
# Add providers from toolsets
|
|
303
|
+
for toolset_config in self.toolsets:
|
|
304
|
+
try:
|
|
305
|
+
provider = toolset_config.get_provider()
|
|
306
|
+
providers.append(provider)
|
|
307
|
+
except Exception as e:
|
|
308
|
+
msg = "Failed to create provider for toolset"
|
|
309
|
+
logger.exception(msg, toolset_config)
|
|
310
|
+
raise ValueError(msg) from e
|
|
311
|
+
|
|
312
|
+
return providers
|
|
313
|
+
|
|
314
|
+
def get_tool_provider(self) -> ResourceProvider | None:
|
|
315
|
+
"""Get tool provider for this agent."""
|
|
316
|
+
from agentpool.tools.base import Tool
|
|
317
|
+
|
|
318
|
+
# Create provider for static tools
|
|
319
|
+
if not self.tools:
|
|
320
|
+
return None
|
|
321
|
+
static_tools: list[Tool] = []
|
|
322
|
+
for tool_config in self.tools:
|
|
323
|
+
try:
|
|
324
|
+
match tool_config:
|
|
325
|
+
case str():
|
|
326
|
+
tool = Tool.from_callable(tool_config)
|
|
327
|
+
static_tools.append(tool)
|
|
328
|
+
case BaseToolConfig():
|
|
329
|
+
static_tools.append(tool_config.get_tool())
|
|
330
|
+
except Exception:
|
|
331
|
+
logger.exception("Failed to load tool", config=tool_config)
|
|
332
|
+
continue
|
|
333
|
+
|
|
334
|
+
return StaticResourceProvider(name="builtin", tools=static_tools)
|
|
335
|
+
|
|
336
|
+
def get_session_config(self) -> MemoryConfig:
|
|
337
|
+
"""Get resolved memory configuration."""
|
|
338
|
+
match self.session:
|
|
339
|
+
case str() | UUID():
|
|
340
|
+
return MemoryConfig(session=SessionQuery(name=str(self.session)))
|
|
341
|
+
case SessionQuery():
|
|
342
|
+
return MemoryConfig(session=self.session)
|
|
343
|
+
case MemoryConfig():
|
|
344
|
+
return self.session
|
|
345
|
+
case None:
|
|
346
|
+
return MemoryConfig()
|
|
347
|
+
case _ as unreachable:
|
|
348
|
+
assert_never(unreachable)
|
|
349
|
+
|
|
350
|
+
def get_system_prompts(self) -> list[BasePrompt]:
|
|
351
|
+
"""Get all system prompts as BasePrompts."""
|
|
352
|
+
from agentpool_config.system_prompts import (
|
|
353
|
+
FilePromptConfig,
|
|
354
|
+
FunctionPromptConfig,
|
|
355
|
+
LibraryPromptConfig,
|
|
356
|
+
StaticPromptConfig,
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
prompts: list[BasePrompt] = []
|
|
360
|
+
# Normalize system_prompt to a list
|
|
361
|
+
if self.system_prompt is None:
|
|
362
|
+
return prompts
|
|
363
|
+
prompt_list = (
|
|
364
|
+
[self.system_prompt] if isinstance(self.system_prompt, str) else self.system_prompt
|
|
365
|
+
)
|
|
366
|
+
for prompt in prompt_list:
|
|
367
|
+
match prompt:
|
|
368
|
+
case (str() as content) | StaticPromptConfig(content=content):
|
|
369
|
+
# Convert string to StaticPrompt
|
|
370
|
+
msgs = [PromptMessage(role="system", content=content)]
|
|
371
|
+
static = StaticPrompt(name="system", description="System prompt", messages=msgs)
|
|
372
|
+
prompts.append(static)
|
|
373
|
+
case FilePromptConfig(path=path):
|
|
374
|
+
template_path = Path(path)
|
|
375
|
+
if not template_path.is_absolute() and self.config_file_path:
|
|
376
|
+
base_path = Path(self.config_file_path).parent
|
|
377
|
+
template_path = base_path / path
|
|
378
|
+
template_content = template_path.read_text("utf-8")
|
|
379
|
+
# Create a template-based prompt (for now as StaticPrompt with placeholder)
|
|
380
|
+
static_prompt = StaticPrompt(
|
|
381
|
+
name="system",
|
|
382
|
+
description=f"File prompt: {path}",
|
|
383
|
+
messages=[PromptMessage(role="system", content=template_content)],
|
|
384
|
+
)
|
|
385
|
+
prompts.append(static_prompt)
|
|
386
|
+
case LibraryPromptConfig(reference=ref):
|
|
387
|
+
# Create placeholder for library prompts (resolved by manifest)
|
|
388
|
+
msg = PromptMessage(role="system", content=f"[LIBRARY:{ref}]")
|
|
389
|
+
static = StaticPrompt(name="system", description=f"Ref: {ref}", messages=[msg])
|
|
390
|
+
prompts.append(static)
|
|
391
|
+
case FunctionPromptConfig(arguments=arguments, function=function):
|
|
392
|
+
# Import and call the function to get prompt content
|
|
393
|
+
content = function(**arguments)
|
|
394
|
+
static_prompt = StaticPrompt(
|
|
395
|
+
name="system",
|
|
396
|
+
description=f"Function prompt: {function}",
|
|
397
|
+
messages=[PromptMessage(role="system", content=content)],
|
|
398
|
+
)
|
|
399
|
+
prompts.append(static_prompt)
|
|
400
|
+
case _ as unreachable:
|
|
401
|
+
assert_never(unreachable)
|
|
402
|
+
return prompts
|
|
403
|
+
|
|
404
|
+
def render_system_prompts(self, context: dict[str, Any] | None = None) -> list[str]:
|
|
405
|
+
"""Render system prompts with context."""
|
|
406
|
+
from agentpool_config.system_prompts import (
|
|
407
|
+
FilePromptConfig,
|
|
408
|
+
FunctionPromptConfig,
|
|
409
|
+
LibraryPromptConfig,
|
|
410
|
+
StaticPromptConfig,
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
context = context or {"name": self.name, "id": 1, "model": self.model}
|
|
414
|
+
rendered_prompts: list[str] = []
|
|
415
|
+
# Normalize system_prompt to a list
|
|
416
|
+
if self.system_prompt is None:
|
|
417
|
+
return rendered_prompts
|
|
418
|
+
prompt_list = (
|
|
419
|
+
[self.system_prompt] if isinstance(self.system_prompt, str) else self.system_prompt
|
|
420
|
+
)
|
|
421
|
+
for prompt in prompt_list:
|
|
422
|
+
match prompt:
|
|
423
|
+
case (str() as content) | StaticPromptConfig(content=content):
|
|
424
|
+
rendered_prompts.append(render_prompt(content, {"agent": context}))
|
|
425
|
+
case FilePromptConfig(path=path, variables=variables):
|
|
426
|
+
# Load and render Jinja template from file
|
|
427
|
+
template_path = Path(path)
|
|
428
|
+
if not template_path.is_absolute() and self.config_file_path:
|
|
429
|
+
base_path = Path(self.config_file_path).parent
|
|
430
|
+
template_path = base_path / path
|
|
431
|
+
|
|
432
|
+
template_content = template_path.read_text("utf-8")
|
|
433
|
+
template_ctx = {"agent": context, **variables}
|
|
434
|
+
rendered_prompts.append(render_prompt(template_content, template_ctx))
|
|
435
|
+
case LibraryPromptConfig(reference=reference):
|
|
436
|
+
# This will be handled by the manifest's get_agent method
|
|
437
|
+
# For now, just add a placeholder
|
|
438
|
+
rendered_prompts.append(f"[LIBRARY:{reference}]")
|
|
439
|
+
case FunctionPromptConfig(function=function, arguments=arguments):
|
|
440
|
+
# Import and call the function to get prompt content
|
|
441
|
+
content = function(**arguments)
|
|
442
|
+
rendered_prompts.append(render_prompt(content, {"agent": context}))
|
|
443
|
+
|
|
444
|
+
return rendered_prompts
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
if __name__ == "__main__":
|
|
448
|
+
model = "openai:gpt-5-nano"
|
|
449
|
+
agent_cfg = NativeAgentConfig(name="test_agent", model=model)
|
|
450
|
+
print(agent_cfg)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""Configuration models for AG-UI agents."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import ConfigDict, Field
|
|
8
|
+
|
|
9
|
+
from agentpool_config.nodes import BaseAgentConfig
|
|
10
|
+
from agentpool_config.tools import ToolConfig # noqa: TC001
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AGUIAgentConfig(BaseAgentConfig):
|
|
14
|
+
"""Configuration for AG-UI protocol agents.
|
|
15
|
+
|
|
16
|
+
AG-UI agents connect to remote HTTP endpoints that implement the AG-UI protocol,
|
|
17
|
+
enabling integration of any AG-UI compatible server into the agentpool pool.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
```yaml
|
|
21
|
+
agents:
|
|
22
|
+
remote_assistant:
|
|
23
|
+
type: agui
|
|
24
|
+
endpoint: http://localhost:8000/agent/run
|
|
25
|
+
timeout: 30.0
|
|
26
|
+
headers:
|
|
27
|
+
X-API-Key: ${API_KEY}
|
|
28
|
+
tools:
|
|
29
|
+
- import_path: mymodule.my_tool_function
|
|
30
|
+
|
|
31
|
+
managed_agent:
|
|
32
|
+
endpoint: http://localhost:8765/agent/run
|
|
33
|
+
startup_command: "uv run ag-ui-server config.yml"
|
|
34
|
+
startup_delay: 3.0
|
|
35
|
+
tools:
|
|
36
|
+
- import_path: package.tool_one
|
|
37
|
+
- import_path: package.tool_two
|
|
38
|
+
```
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
model_config = ConfigDict(
|
|
42
|
+
json_schema_extra={"title": "AG-UI Agent Configuration", "x-icon": "mdi:api"}
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
type: Literal["agui"] = Field(default="agui", init=False)
|
|
46
|
+
"""Top-level discriminator for agent type."""
|
|
47
|
+
|
|
48
|
+
endpoint: str = Field(
|
|
49
|
+
...,
|
|
50
|
+
examples=["http://localhost:8000/agent/run", "https://api.example.com/v1/agent/run"],
|
|
51
|
+
)
|
|
52
|
+
"""HTTP endpoint for the AG-UI agent server."""
|
|
53
|
+
|
|
54
|
+
timeout: float = Field(default=60.0, ge=0.1, examples=[30.0, 60.0, 120.0])
|
|
55
|
+
"""Request timeout in seconds."""
|
|
56
|
+
|
|
57
|
+
headers: dict[str, str] = Field(default_factory=dict)
|
|
58
|
+
"""Additional HTTP headers to send with requests.
|
|
59
|
+
|
|
60
|
+
Useful for authentication or custom routing.
|
|
61
|
+
Environment variables can be used: ${VAR_NAME}
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
startup_command: str | None = Field(
|
|
65
|
+
default=None,
|
|
66
|
+
examples=[
|
|
67
|
+
"uv run ag-ui-server config.yml",
|
|
68
|
+
"python -m my_agui_server --port 8000",
|
|
69
|
+
],
|
|
70
|
+
)
|
|
71
|
+
"""Optional shell command to start the AG-UI server automatically.
|
|
72
|
+
|
|
73
|
+
When provided, the agent will spawn this command on context entry
|
|
74
|
+
and terminate it on exit. Useful for testing or self-contained deployments.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
startup_delay: float = Field(default=2.0, ge=0.0, examples=[1.0, 2.0, 5.0])
|
|
78
|
+
"""Seconds to wait after starting server before connecting.
|
|
79
|
+
|
|
80
|
+
Only relevant when startup_command is provided.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
tools: list[ToolConfig] = Field(default_factory=list)
|
|
84
|
+
"""Tools to expose to the remote agent for client-side execution.
|
|
85
|
+
|
|
86
|
+
When the remote AG-UI agent requests a tool call, these tools are executed
|
|
87
|
+
locally and the result is sent back. This enables human-in-the-loop workflows
|
|
88
|
+
and local capability exposure to remote agents.
|
|
89
|
+
"""
|