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.

Files changed (474) hide show
  1. acp/README.md +64 -0
  2. acp/__init__.py +172 -0
  3. acp/__main__.py +10 -0
  4. acp/acp_requests.py +285 -0
  5. acp/agent/__init__.py +6 -0
  6. acp/agent/connection.py +256 -0
  7. acp/agent/implementations/__init__.py +6 -0
  8. acp/agent/implementations/debug_server/__init__.py +1 -0
  9. acp/agent/implementations/debug_server/cli.py +79 -0
  10. acp/agent/implementations/debug_server/debug.html +234 -0
  11. acp/agent/implementations/debug_server/debug_server.py +496 -0
  12. acp/agent/implementations/testing.py +91 -0
  13. acp/agent/protocol.py +65 -0
  14. acp/bridge/README.md +162 -0
  15. acp/bridge/__init__.py +6 -0
  16. acp/bridge/__main__.py +91 -0
  17. acp/bridge/bridge.py +246 -0
  18. acp/bridge/py.typed +0 -0
  19. acp/bridge/settings.py +15 -0
  20. acp/client/__init__.py +7 -0
  21. acp/client/connection.py +251 -0
  22. acp/client/implementations/__init__.py +7 -0
  23. acp/client/implementations/default_client.py +185 -0
  24. acp/client/implementations/headless_client.py +266 -0
  25. acp/client/implementations/noop_client.py +110 -0
  26. acp/client/protocol.py +61 -0
  27. acp/connection.py +280 -0
  28. acp/exceptions.py +46 -0
  29. acp/filesystem.py +524 -0
  30. acp/notifications.py +832 -0
  31. acp/py.typed +0 -0
  32. acp/schema/__init__.py +265 -0
  33. acp/schema/agent_plan.py +30 -0
  34. acp/schema/agent_requests.py +126 -0
  35. acp/schema/agent_responses.py +256 -0
  36. acp/schema/base.py +39 -0
  37. acp/schema/capabilities.py +230 -0
  38. acp/schema/client_requests.py +247 -0
  39. acp/schema/client_responses.py +96 -0
  40. acp/schema/common.py +81 -0
  41. acp/schema/content_blocks.py +188 -0
  42. acp/schema/mcp.py +82 -0
  43. acp/schema/messages.py +171 -0
  44. acp/schema/notifications.py +82 -0
  45. acp/schema/protocol_stuff.md +3 -0
  46. acp/schema/session_state.py +160 -0
  47. acp/schema/session_updates.py +419 -0
  48. acp/schema/slash_commands.py +51 -0
  49. acp/schema/terminal.py +15 -0
  50. acp/schema/tool_call.py +347 -0
  51. acp/stdio.py +250 -0
  52. acp/task/__init__.py +53 -0
  53. acp/task/debug.py +197 -0
  54. acp/task/dispatcher.py +93 -0
  55. acp/task/queue.py +69 -0
  56. acp/task/sender.py +82 -0
  57. acp/task/state.py +87 -0
  58. acp/task/supervisor.py +93 -0
  59. acp/terminal_handle.py +30 -0
  60. acp/tool_call_reporter.py +199 -0
  61. acp/tool_call_state.py +178 -0
  62. acp/transports.py +104 -0
  63. acp/utils.py +240 -0
  64. agentpool/__init__.py +63 -0
  65. agentpool/__main__.py +7 -0
  66. agentpool/agents/__init__.py +30 -0
  67. agentpool/agents/acp_agent/__init__.py +5 -0
  68. agentpool/agents/acp_agent/acp_agent.py +837 -0
  69. agentpool/agents/acp_agent/acp_converters.py +294 -0
  70. agentpool/agents/acp_agent/client_handler.py +317 -0
  71. agentpool/agents/acp_agent/session_state.py +44 -0
  72. agentpool/agents/agent.py +1264 -0
  73. agentpool/agents/agui_agent/__init__.py +19 -0
  74. agentpool/agents/agui_agent/agui_agent.py +677 -0
  75. agentpool/agents/agui_agent/agui_converters.py +423 -0
  76. agentpool/agents/agui_agent/chunk_transformer.py +204 -0
  77. agentpool/agents/agui_agent/event_types.py +83 -0
  78. agentpool/agents/agui_agent/helpers.py +192 -0
  79. agentpool/agents/architect.py +71 -0
  80. agentpool/agents/base_agent.py +177 -0
  81. agentpool/agents/claude_code_agent/__init__.py +11 -0
  82. agentpool/agents/claude_code_agent/claude_code_agent.py +1021 -0
  83. agentpool/agents/claude_code_agent/converters.py +243 -0
  84. agentpool/agents/context.py +105 -0
  85. agentpool/agents/events/__init__.py +61 -0
  86. agentpool/agents/events/builtin_handlers.py +129 -0
  87. agentpool/agents/events/event_emitter.py +320 -0
  88. agentpool/agents/events/events.py +561 -0
  89. agentpool/agents/events/tts_handlers.py +186 -0
  90. agentpool/agents/interactions.py +419 -0
  91. agentpool/agents/slashed_agent.py +244 -0
  92. agentpool/agents/sys_prompts.py +178 -0
  93. agentpool/agents/tool_wrapping.py +184 -0
  94. agentpool/base_provider.py +28 -0
  95. agentpool/common_types.py +226 -0
  96. agentpool/config_resources/__init__.py +16 -0
  97. agentpool/config_resources/acp_assistant.yml +24 -0
  98. agentpool/config_resources/agents.yml +109 -0
  99. agentpool/config_resources/agents_template.yml +18 -0
  100. agentpool/config_resources/agui_test.yml +18 -0
  101. agentpool/config_resources/claude_code_agent.yml +16 -0
  102. agentpool/config_resources/claude_style_subagent.md +30 -0
  103. agentpool/config_resources/external_acp_agents.yml +77 -0
  104. agentpool/config_resources/opencode_style_subagent.md +19 -0
  105. agentpool/config_resources/tts_test_agents.yml +78 -0
  106. agentpool/delegation/__init__.py +8 -0
  107. agentpool/delegation/base_team.py +504 -0
  108. agentpool/delegation/message_flow_tracker.py +39 -0
  109. agentpool/delegation/pool.py +1129 -0
  110. agentpool/delegation/team.py +325 -0
  111. agentpool/delegation/teamrun.py +343 -0
  112. agentpool/docs/__init__.py +5 -0
  113. agentpool/docs/gen_examples.py +42 -0
  114. agentpool/docs/utils.py +370 -0
  115. agentpool/functional/__init__.py +20 -0
  116. agentpool/functional/py.typed +0 -0
  117. agentpool/functional/run.py +80 -0
  118. agentpool/functional/structure.py +136 -0
  119. agentpool/hooks/__init__.py +20 -0
  120. agentpool/hooks/agent_hooks.py +247 -0
  121. agentpool/hooks/base.py +119 -0
  122. agentpool/hooks/callable.py +140 -0
  123. agentpool/hooks/command.py +180 -0
  124. agentpool/hooks/prompt.py +122 -0
  125. agentpool/jinja_filters.py +132 -0
  126. agentpool/log.py +224 -0
  127. agentpool/mcp_server/__init__.py +17 -0
  128. agentpool/mcp_server/client.py +429 -0
  129. agentpool/mcp_server/constants.py +32 -0
  130. agentpool/mcp_server/conversions.py +172 -0
  131. agentpool/mcp_server/helpers.py +47 -0
  132. agentpool/mcp_server/manager.py +232 -0
  133. agentpool/mcp_server/message_handler.py +164 -0
  134. agentpool/mcp_server/registries/__init__.py +1 -0
  135. agentpool/mcp_server/registries/official_registry_client.py +345 -0
  136. agentpool/mcp_server/registries/pulsemcp_client.py +88 -0
  137. agentpool/mcp_server/tool_bridge.py +548 -0
  138. agentpool/messaging/__init__.py +58 -0
  139. agentpool/messaging/compaction.py +928 -0
  140. agentpool/messaging/connection_manager.py +319 -0
  141. agentpool/messaging/context.py +66 -0
  142. agentpool/messaging/event_manager.py +426 -0
  143. agentpool/messaging/events.py +39 -0
  144. agentpool/messaging/message_container.py +209 -0
  145. agentpool/messaging/message_history.py +491 -0
  146. agentpool/messaging/messagenode.py +377 -0
  147. agentpool/messaging/messages.py +655 -0
  148. agentpool/messaging/processing.py +76 -0
  149. agentpool/mime_utils.py +95 -0
  150. agentpool/models/__init__.py +21 -0
  151. agentpool/models/acp_agents/__init__.py +22 -0
  152. agentpool/models/acp_agents/base.py +308 -0
  153. agentpool/models/acp_agents/mcp_capable.py +790 -0
  154. agentpool/models/acp_agents/non_mcp.py +842 -0
  155. agentpool/models/agents.py +450 -0
  156. agentpool/models/agui_agents.py +89 -0
  157. agentpool/models/claude_code_agents.py +238 -0
  158. agentpool/models/file_agents.py +116 -0
  159. agentpool/models/file_parsing.py +367 -0
  160. agentpool/models/manifest.py +658 -0
  161. agentpool/observability/__init__.py +9 -0
  162. agentpool/observability/observability_registry.py +97 -0
  163. agentpool/prompts/__init__.py +1 -0
  164. agentpool/prompts/base.py +27 -0
  165. agentpool/prompts/builtin_provider.py +75 -0
  166. agentpool/prompts/conversion_manager.py +95 -0
  167. agentpool/prompts/convert.py +96 -0
  168. agentpool/prompts/manager.py +204 -0
  169. agentpool/prompts/parts/zed.md +33 -0
  170. agentpool/prompts/prompts.py +581 -0
  171. agentpool/py.typed +0 -0
  172. agentpool/queries/tree-sitter-language-pack/README.md +7 -0
  173. agentpool/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
  174. agentpool/queries/tree-sitter-language-pack/c-tags.scm +9 -0
  175. agentpool/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
  176. agentpool/queries/tree-sitter-language-pack/clojure-tags.scm +7 -0
  177. agentpool/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
  178. agentpool/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
  179. agentpool/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
  180. agentpool/queries/tree-sitter-language-pack/d-tags.scm +26 -0
  181. agentpool/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
  182. agentpool/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
  183. agentpool/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
  184. agentpool/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
  185. agentpool/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
  186. agentpool/queries/tree-sitter-language-pack/go-tags.scm +42 -0
  187. agentpool/queries/tree-sitter-language-pack/java-tags.scm +20 -0
  188. agentpool/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
  189. agentpool/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
  190. agentpool/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
  191. agentpool/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
  192. agentpool/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
  193. agentpool/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
  194. agentpool/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
  195. agentpool/queries/tree-sitter-language-pack/python-tags.scm +14 -0
  196. agentpool/queries/tree-sitter-language-pack/r-tags.scm +21 -0
  197. agentpool/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
  198. agentpool/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
  199. agentpool/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
  200. agentpool/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
  201. agentpool/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
  202. agentpool/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
  203. agentpool/queries/tree-sitter-languages/README.md +24 -0
  204. agentpool/queries/tree-sitter-languages/c-tags.scm +9 -0
  205. agentpool/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
  206. agentpool/queries/tree-sitter-languages/cpp-tags.scm +15 -0
  207. agentpool/queries/tree-sitter-languages/dart-tags.scm +91 -0
  208. agentpool/queries/tree-sitter-languages/elisp-tags.scm +8 -0
  209. agentpool/queries/tree-sitter-languages/elixir-tags.scm +54 -0
  210. agentpool/queries/tree-sitter-languages/elm-tags.scm +19 -0
  211. agentpool/queries/tree-sitter-languages/fortran-tags.scm +15 -0
  212. agentpool/queries/tree-sitter-languages/go-tags.scm +30 -0
  213. agentpool/queries/tree-sitter-languages/haskell-tags.scm +3 -0
  214. agentpool/queries/tree-sitter-languages/hcl-tags.scm +77 -0
  215. agentpool/queries/tree-sitter-languages/java-tags.scm +20 -0
  216. agentpool/queries/tree-sitter-languages/javascript-tags.scm +88 -0
  217. agentpool/queries/tree-sitter-languages/julia-tags.scm +60 -0
  218. agentpool/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
  219. agentpool/queries/tree-sitter-languages/matlab-tags.scm +10 -0
  220. agentpool/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
  221. agentpool/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
  222. agentpool/queries/tree-sitter-languages/php-tags.scm +26 -0
  223. agentpool/queries/tree-sitter-languages/python-tags.scm +12 -0
  224. agentpool/queries/tree-sitter-languages/ql-tags.scm +26 -0
  225. agentpool/queries/tree-sitter-languages/ruby-tags.scm +64 -0
  226. agentpool/queries/tree-sitter-languages/rust-tags.scm +60 -0
  227. agentpool/queries/tree-sitter-languages/scala-tags.scm +65 -0
  228. agentpool/queries/tree-sitter-languages/typescript-tags.scm +41 -0
  229. agentpool/queries/tree-sitter-languages/zig-tags.scm +3 -0
  230. agentpool/repomap.py +1231 -0
  231. agentpool/resource_providers/__init__.py +17 -0
  232. agentpool/resource_providers/aggregating.py +54 -0
  233. agentpool/resource_providers/base.py +172 -0
  234. agentpool/resource_providers/codemode/__init__.py +9 -0
  235. agentpool/resource_providers/codemode/code_executor.py +215 -0
  236. agentpool/resource_providers/codemode/default_prompt.py +19 -0
  237. agentpool/resource_providers/codemode/helpers.py +83 -0
  238. agentpool/resource_providers/codemode/progress_executor.py +212 -0
  239. agentpool/resource_providers/codemode/provider.py +150 -0
  240. agentpool/resource_providers/codemode/remote_mcp_execution.py +143 -0
  241. agentpool/resource_providers/codemode/remote_provider.py +171 -0
  242. agentpool/resource_providers/filtering.py +42 -0
  243. agentpool/resource_providers/mcp_provider.py +246 -0
  244. agentpool/resource_providers/plan_provider.py +196 -0
  245. agentpool/resource_providers/pool.py +69 -0
  246. agentpool/resource_providers/static.py +289 -0
  247. agentpool/running/__init__.py +20 -0
  248. agentpool/running/decorators.py +56 -0
  249. agentpool/running/discovery.py +101 -0
  250. agentpool/running/executor.py +284 -0
  251. agentpool/running/injection.py +111 -0
  252. agentpool/running/py.typed +0 -0
  253. agentpool/running/run_nodes.py +87 -0
  254. agentpool/server.py +122 -0
  255. agentpool/sessions/__init__.py +13 -0
  256. agentpool/sessions/manager.py +302 -0
  257. agentpool/sessions/models.py +71 -0
  258. agentpool/sessions/session.py +239 -0
  259. agentpool/sessions/store.py +163 -0
  260. agentpool/skills/__init__.py +5 -0
  261. agentpool/skills/manager.py +120 -0
  262. agentpool/skills/registry.py +210 -0
  263. agentpool/skills/skill.py +36 -0
  264. agentpool/storage/__init__.py +17 -0
  265. agentpool/storage/manager.py +419 -0
  266. agentpool/storage/serialization.py +136 -0
  267. agentpool/talk/__init__.py +13 -0
  268. agentpool/talk/registry.py +128 -0
  269. agentpool/talk/stats.py +159 -0
  270. agentpool/talk/talk.py +604 -0
  271. agentpool/tasks/__init__.py +20 -0
  272. agentpool/tasks/exceptions.py +25 -0
  273. agentpool/tasks/registry.py +33 -0
  274. agentpool/testing.py +129 -0
  275. agentpool/text_templates/__init__.py +39 -0
  276. agentpool/text_templates/system_prompt.jinja +30 -0
  277. agentpool/text_templates/tool_call_default.jinja +13 -0
  278. agentpool/text_templates/tool_call_markdown.jinja +25 -0
  279. agentpool/text_templates/tool_call_simple.jinja +5 -0
  280. agentpool/tools/__init__.py +16 -0
  281. agentpool/tools/base.py +269 -0
  282. agentpool/tools/exceptions.py +9 -0
  283. agentpool/tools/manager.py +255 -0
  284. agentpool/tools/tool_call_info.py +87 -0
  285. agentpool/ui/__init__.py +2 -0
  286. agentpool/ui/base.py +89 -0
  287. agentpool/ui/mock_provider.py +81 -0
  288. agentpool/ui/stdlib_provider.py +150 -0
  289. agentpool/utils/__init__.py +44 -0
  290. agentpool/utils/baseregistry.py +185 -0
  291. agentpool/utils/count_tokens.py +62 -0
  292. agentpool/utils/dag.py +184 -0
  293. agentpool/utils/importing.py +206 -0
  294. agentpool/utils/inspection.py +334 -0
  295. agentpool/utils/model_capabilities.py +25 -0
  296. agentpool/utils/network.py +28 -0
  297. agentpool/utils/now.py +22 -0
  298. agentpool/utils/parse_time.py +87 -0
  299. agentpool/utils/result_utils.py +35 -0
  300. agentpool/utils/signatures.py +305 -0
  301. agentpool/utils/streams.py +112 -0
  302. agentpool/utils/tasks.py +186 -0
  303. agentpool/vfs_registry.py +250 -0
  304. agentpool-2.1.9.dist-info/METADATA +336 -0
  305. agentpool-2.1.9.dist-info/RECORD +474 -0
  306. agentpool-2.1.9.dist-info/WHEEL +4 -0
  307. agentpool-2.1.9.dist-info/entry_points.txt +14 -0
  308. agentpool-2.1.9.dist-info/licenses/LICENSE +22 -0
  309. agentpool_cli/__init__.py +34 -0
  310. agentpool_cli/__main__.py +66 -0
  311. agentpool_cli/agent.py +175 -0
  312. agentpool_cli/cli_types.py +23 -0
  313. agentpool_cli/common.py +163 -0
  314. agentpool_cli/create.py +175 -0
  315. agentpool_cli/history.py +217 -0
  316. agentpool_cli/log.py +78 -0
  317. agentpool_cli/py.typed +0 -0
  318. agentpool_cli/run.py +84 -0
  319. agentpool_cli/serve_acp.py +177 -0
  320. agentpool_cli/serve_api.py +69 -0
  321. agentpool_cli/serve_mcp.py +74 -0
  322. agentpool_cli/serve_vercel.py +233 -0
  323. agentpool_cli/store.py +171 -0
  324. agentpool_cli/task.py +84 -0
  325. agentpool_cli/utils.py +104 -0
  326. agentpool_cli/watch.py +54 -0
  327. agentpool_commands/__init__.py +180 -0
  328. agentpool_commands/agents.py +199 -0
  329. agentpool_commands/base.py +45 -0
  330. agentpool_commands/commands.py +58 -0
  331. agentpool_commands/completers.py +110 -0
  332. agentpool_commands/connections.py +175 -0
  333. agentpool_commands/markdown_utils.py +31 -0
  334. agentpool_commands/models.py +62 -0
  335. agentpool_commands/prompts.py +78 -0
  336. agentpool_commands/py.typed +0 -0
  337. agentpool_commands/read.py +77 -0
  338. agentpool_commands/resources.py +210 -0
  339. agentpool_commands/session.py +48 -0
  340. agentpool_commands/tools.py +269 -0
  341. agentpool_commands/utils.py +189 -0
  342. agentpool_commands/workers.py +163 -0
  343. agentpool_config/__init__.py +53 -0
  344. agentpool_config/builtin_tools.py +265 -0
  345. agentpool_config/commands.py +237 -0
  346. agentpool_config/conditions.py +301 -0
  347. agentpool_config/converters.py +30 -0
  348. agentpool_config/durable.py +331 -0
  349. agentpool_config/event_handlers.py +600 -0
  350. agentpool_config/events.py +153 -0
  351. agentpool_config/forward_targets.py +251 -0
  352. agentpool_config/hook_conditions.py +331 -0
  353. agentpool_config/hooks.py +241 -0
  354. agentpool_config/jinja.py +206 -0
  355. agentpool_config/knowledge.py +41 -0
  356. agentpool_config/loaders.py +350 -0
  357. agentpool_config/mcp_server.py +243 -0
  358. agentpool_config/nodes.py +202 -0
  359. agentpool_config/observability.py +191 -0
  360. agentpool_config/output_types.py +55 -0
  361. agentpool_config/pool_server.py +267 -0
  362. agentpool_config/prompt_hubs.py +105 -0
  363. agentpool_config/prompts.py +185 -0
  364. agentpool_config/py.typed +0 -0
  365. agentpool_config/resources.py +33 -0
  366. agentpool_config/session.py +119 -0
  367. agentpool_config/skills.py +17 -0
  368. agentpool_config/storage.py +288 -0
  369. agentpool_config/system_prompts.py +190 -0
  370. agentpool_config/task.py +162 -0
  371. agentpool_config/teams.py +52 -0
  372. agentpool_config/tools.py +112 -0
  373. agentpool_config/toolsets.py +1033 -0
  374. agentpool_config/workers.py +86 -0
  375. agentpool_prompts/__init__.py +1 -0
  376. agentpool_prompts/braintrust_hub.py +235 -0
  377. agentpool_prompts/fabric.py +75 -0
  378. agentpool_prompts/langfuse_hub.py +79 -0
  379. agentpool_prompts/promptlayer_provider.py +59 -0
  380. agentpool_prompts/py.typed +0 -0
  381. agentpool_server/__init__.py +9 -0
  382. agentpool_server/a2a_server/__init__.py +5 -0
  383. agentpool_server/a2a_server/a2a_types.py +41 -0
  384. agentpool_server/a2a_server/server.py +190 -0
  385. agentpool_server/a2a_server/storage.py +81 -0
  386. agentpool_server/acp_server/__init__.py +22 -0
  387. agentpool_server/acp_server/acp_agent.py +786 -0
  388. agentpool_server/acp_server/acp_tools.py +43 -0
  389. agentpool_server/acp_server/commands/__init__.py +18 -0
  390. agentpool_server/acp_server/commands/acp_commands.py +594 -0
  391. agentpool_server/acp_server/commands/debug_commands.py +376 -0
  392. agentpool_server/acp_server/commands/docs_commands/__init__.py +39 -0
  393. agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +169 -0
  394. agentpool_server/acp_server/commands/docs_commands/get_schema.py +176 -0
  395. agentpool_server/acp_server/commands/docs_commands/get_source.py +110 -0
  396. agentpool_server/acp_server/commands/docs_commands/git_diff.py +111 -0
  397. agentpool_server/acp_server/commands/docs_commands/helpers.py +33 -0
  398. agentpool_server/acp_server/commands/docs_commands/url_to_markdown.py +90 -0
  399. agentpool_server/acp_server/commands/spawn.py +210 -0
  400. agentpool_server/acp_server/converters.py +235 -0
  401. agentpool_server/acp_server/input_provider.py +338 -0
  402. agentpool_server/acp_server/server.py +288 -0
  403. agentpool_server/acp_server/session.py +969 -0
  404. agentpool_server/acp_server/session_manager.py +313 -0
  405. agentpool_server/acp_server/syntax_detection.py +250 -0
  406. agentpool_server/acp_server/zed_tools.md +90 -0
  407. agentpool_server/aggregating_server.py +309 -0
  408. agentpool_server/agui_server/__init__.py +11 -0
  409. agentpool_server/agui_server/server.py +128 -0
  410. agentpool_server/base.py +189 -0
  411. agentpool_server/http_server.py +164 -0
  412. agentpool_server/mcp_server/__init__.py +6 -0
  413. agentpool_server/mcp_server/server.py +314 -0
  414. agentpool_server/mcp_server/zed_wrapper.py +110 -0
  415. agentpool_server/openai_api_server/__init__.py +5 -0
  416. agentpool_server/openai_api_server/completions/__init__.py +1 -0
  417. agentpool_server/openai_api_server/completions/helpers.py +81 -0
  418. agentpool_server/openai_api_server/completions/models.py +98 -0
  419. agentpool_server/openai_api_server/responses/__init__.py +1 -0
  420. agentpool_server/openai_api_server/responses/helpers.py +74 -0
  421. agentpool_server/openai_api_server/responses/models.py +96 -0
  422. agentpool_server/openai_api_server/server.py +242 -0
  423. agentpool_server/py.typed +0 -0
  424. agentpool_storage/__init__.py +9 -0
  425. agentpool_storage/base.py +310 -0
  426. agentpool_storage/file_provider.py +378 -0
  427. agentpool_storage/formatters.py +129 -0
  428. agentpool_storage/memory_provider.py +396 -0
  429. agentpool_storage/models.py +108 -0
  430. agentpool_storage/py.typed +0 -0
  431. agentpool_storage/session_store.py +262 -0
  432. agentpool_storage/sql_provider/__init__.py +21 -0
  433. agentpool_storage/sql_provider/cli.py +146 -0
  434. agentpool_storage/sql_provider/models.py +249 -0
  435. agentpool_storage/sql_provider/queries.py +15 -0
  436. agentpool_storage/sql_provider/sql_provider.py +444 -0
  437. agentpool_storage/sql_provider/utils.py +234 -0
  438. agentpool_storage/text_log_provider.py +275 -0
  439. agentpool_toolsets/__init__.py +15 -0
  440. agentpool_toolsets/builtin/__init__.py +33 -0
  441. agentpool_toolsets/builtin/agent_management.py +239 -0
  442. agentpool_toolsets/builtin/chain.py +288 -0
  443. agentpool_toolsets/builtin/code.py +398 -0
  444. agentpool_toolsets/builtin/debug.py +291 -0
  445. agentpool_toolsets/builtin/execution_environment.py +381 -0
  446. agentpool_toolsets/builtin/file_edit/__init__.py +11 -0
  447. agentpool_toolsets/builtin/file_edit/file_edit.py +747 -0
  448. agentpool_toolsets/builtin/file_edit/fuzzy_matcher/__init__.py +5 -0
  449. agentpool_toolsets/builtin/file_edit/fuzzy_matcher/example_usage.py +311 -0
  450. agentpool_toolsets/builtin/file_edit/fuzzy_matcher/streaming_fuzzy_matcher.py +443 -0
  451. agentpool_toolsets/builtin/history.py +36 -0
  452. agentpool_toolsets/builtin/integration.py +85 -0
  453. agentpool_toolsets/builtin/skills.py +77 -0
  454. agentpool_toolsets/builtin/subagent_tools.py +324 -0
  455. agentpool_toolsets/builtin/tool_management.py +90 -0
  456. agentpool_toolsets/builtin/user_interaction.py +52 -0
  457. agentpool_toolsets/builtin/workers.py +128 -0
  458. agentpool_toolsets/composio_toolset.py +96 -0
  459. agentpool_toolsets/config_creation.py +192 -0
  460. agentpool_toolsets/entry_points.py +47 -0
  461. agentpool_toolsets/fsspec_toolset/__init__.py +7 -0
  462. agentpool_toolsets/fsspec_toolset/diagnostics.py +115 -0
  463. agentpool_toolsets/fsspec_toolset/grep.py +450 -0
  464. agentpool_toolsets/fsspec_toolset/helpers.py +631 -0
  465. agentpool_toolsets/fsspec_toolset/streaming_diff_parser.py +249 -0
  466. agentpool_toolsets/fsspec_toolset/toolset.py +1384 -0
  467. agentpool_toolsets/mcp_run_toolset.py +61 -0
  468. agentpool_toolsets/notifications.py +146 -0
  469. agentpool_toolsets/openapi.py +118 -0
  470. agentpool_toolsets/py.typed +0 -0
  471. agentpool_toolsets/search_toolset.py +202 -0
  472. agentpool_toolsets/semantic_memory_toolset.py +536 -0
  473. agentpool_toolsets/streaming_tools.py +265 -0
  474. agentpool_toolsets/vfs_toolset.py +124 -0
@@ -0,0 +1,243 @@
1
+ """MCP server configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from typing import TYPE_CHECKING, Annotated, Literal, Self
7
+
8
+ from pydantic import ConfigDict, Field, HttpUrl
9
+ from schemez import Schema
10
+
11
+
12
+ if TYPE_CHECKING:
13
+ from pydantic_ai.mcp import MCPServer, MCPServerSSE, MCPServerStdio, MCPServerStreamableHTTP
14
+
15
+
16
+ class MCPServerAuthSettings(Schema):
17
+ """Represents authentication configuration for a server.
18
+
19
+ Minimal OAuth v2.1 support with sensible defaults.
20
+ """
21
+
22
+ oauth: bool = Field(default=False, title="Enable OAuth")
23
+
24
+ # Local callback server configuration
25
+ redirect_port: int = Field(
26
+ default=3030, ge=1, lt=65536, examples=[3030, 8080, 9000], title="Redirect port"
27
+ )
28
+ redirect_path: str = Field(
29
+ default="/callback",
30
+ examples=["/callback", "/auth/callback", "/oauth"],
31
+ title="Redirect path",
32
+ )
33
+
34
+ # Optional scope override. If set to a list, values are space-joined.
35
+ scope: str | list[str] | None = Field(
36
+ default=None,
37
+ examples=["read write", ["read", "write"], "admin"],
38
+ title="OAuth scope",
39
+ )
40
+
41
+ # Token persistence: use OS keychain via 'keyring' by default; fallback to 'memory'.
42
+ persist: Literal["keyring", "memory"] = Field(
43
+ default="keyring",
44
+ examples=["keyring", "memory"],
45
+ title="Token persistence",
46
+ )
47
+
48
+
49
+ class BaseMCPServerConfig(Schema):
50
+ """Base model for MCP server configuration."""
51
+
52
+ type: str = Field(title="Server type")
53
+ """Type discriminator for MCP server configurations."""
54
+
55
+ name: str | None = Field(
56
+ default=None,
57
+ examples=["my_server", "api_connector", "file_handler"],
58
+ title="Server name",
59
+ )
60
+ """Optional name for referencing the server."""
61
+
62
+ enabled: bool = Field(default=True, title="Server enabled")
63
+ """Whether this server is currently enabled."""
64
+
65
+ env: dict[str, str] | None = Field(default=None, title="Environment variables")
66
+ """Environment variables to pass to the server process."""
67
+
68
+ timeout: float = Field(
69
+ default=60.0,
70
+ gt=0,
71
+ examples=[30.0, 60.0, 120.0],
72
+ title="Server timeout",
73
+ )
74
+ """Timeout for the server process in seconds."""
75
+
76
+ def get_env_vars(self) -> dict[str, str]:
77
+ """Get environment variables for the server process."""
78
+ env = os.environ.copy()
79
+ if self.env:
80
+ env.update(self.env)
81
+ env["PYTHONIOENCODING"] = "utf-8"
82
+ return env
83
+
84
+ def to_pydantic_ai(self) -> MCPServer:
85
+ """Convert to pydantic-ai MCP server instance.
86
+
87
+ Returns:
88
+ A pydantic-ai MCP server instance
89
+ """
90
+ raise NotImplementedError
91
+
92
+ @property
93
+ def client_id(self) -> str:
94
+ """Generate a unique client ID for this server configuration."""
95
+ raise NotImplementedError
96
+
97
+ @classmethod
98
+ def from_string(cls, text: str) -> MCPServerConfig:
99
+ """Create a MCPServerConfig from a string."""
100
+ text = text.strip()
101
+ if text.startswith(("http://", "https://")) and text.endswith("/sse"):
102
+ return SSEMCPServerConfig(url=HttpUrl(text))
103
+ if text.startswith(("http://", "https://")):
104
+ return StreamableHTTPMCPServerConfig(url=HttpUrl(text))
105
+ return StdioMCPServerConfig.from_string(text)
106
+
107
+
108
+ class StdioMCPServerConfig(BaseMCPServerConfig):
109
+ """MCP server started via stdio.
110
+
111
+ Uses subprocess communication through standard input/output streams.
112
+ """
113
+
114
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Stdio MCP Server"})
115
+
116
+ type: Literal["stdio"] = Field("stdio", init=False)
117
+ """Stdio server coniguration."""
118
+
119
+ command: str = Field(
120
+ examples=["python", "node", "pipx", "uvx"],
121
+ title="Command to execute",
122
+ )
123
+ """Command to execute (e.g. "pipx", "python", "node")."""
124
+
125
+ args: list[str] = Field(
126
+ default_factory=list,
127
+ examples=[["run", "mcp-server"], ["-m", "my_mcp_server"], ["--debug"]],
128
+ title="Command arguments",
129
+ )
130
+ """Command arguments (e.g. ["run", "some-server", "--debug"])."""
131
+
132
+ @classmethod
133
+ def from_string(cls, command: str) -> Self:
134
+ """Create a MCP server from a command string."""
135
+ parts = command.split(maxsplit=1)
136
+ cmd = parts[0]
137
+ args = parts[1].split() if len(parts) > 1 else []
138
+ return cls(command=cmd, args=args)
139
+
140
+ @property
141
+ def client_id(self) -> str:
142
+ """Generate a unique client ID for this stdio server configuration."""
143
+ return f"{self.command}_{' '.join(self.args)}"
144
+
145
+ def to_pydantic_ai(self) -> MCPServerStdio:
146
+ """Convert to pydantic-ai MCPServerStdio instance."""
147
+ from pydantic_ai.mcp import MCPServerStdio
148
+
149
+ return MCPServerStdio(
150
+ command=self.command,
151
+ args=self.args,
152
+ env=self.get_env_vars() if self.env else None,
153
+ id=self.name,
154
+ timeout=self.timeout,
155
+ )
156
+
157
+
158
+ class SSEMCPServerConfig(BaseMCPServerConfig):
159
+ """MCP server using Server-Sent Events transport.
160
+
161
+ Connects to a server over HTTP with SSE for real-time communication.
162
+ """
163
+
164
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "SSE MCP Server"})
165
+
166
+ type: Literal["sse"] = Field("sse", init=False)
167
+ """SSE server configuration."""
168
+
169
+ url: HttpUrl = Field(
170
+ examples=["https://api.example.com/sse", "http://localhost:8080/events"],
171
+ title="SSE endpoint URL",
172
+ )
173
+ """URL of the SSE server endpoint."""
174
+
175
+ headers: dict[str, str] | None = Field(default=None, title="HTTP headers")
176
+ """Headers to send with the SSE request."""
177
+
178
+ auth: MCPServerAuthSettings = Field(
179
+ default_factory=MCPServerAuthSettings,
180
+ title="Authentication settings",
181
+ )
182
+ """OAuth settings for the SSE server."""
183
+
184
+ @property
185
+ def client_id(self) -> str:
186
+ """Generate a unique client ID for this SSE server configuration."""
187
+ return f"sse_{self.url}"
188
+
189
+ def to_pydantic_ai(self) -> MCPServerSSE:
190
+ """Convert to pydantic-ai MCPServerSSE instance."""
191
+ from pydantic_ai.mcp import MCPServerSSE
192
+
193
+ url = str(self.url)
194
+ return MCPServerSSE(url=url, headers=self.headers, id=self.name, timeout=self.timeout)
195
+
196
+
197
+ class StreamableHTTPMCPServerConfig(BaseMCPServerConfig):
198
+ """MCP server using StreamableHttp.
199
+
200
+ Connects to a server over HTTP with streamable HTTP.
201
+ """
202
+
203
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Streamable HTTP MCP Server"})
204
+
205
+ type: Literal["streamable-http"] = Field("streamable-http", init=False)
206
+ """HTTP server configuration."""
207
+
208
+ url: HttpUrl = Field(
209
+ examples=["https://api.example.com/mcp", "http://localhost:8080/stream"],
210
+ title="HTTP endpoint URL",
211
+ )
212
+ """URL of the HTTP server endpoint."""
213
+
214
+ headers: dict[str, str] | None = Field(default=None, title="HTTP headers")
215
+ """Headers to send with the HTTP request."""
216
+
217
+ auth: MCPServerAuthSettings = Field(
218
+ default_factory=MCPServerAuthSettings,
219
+ title="Authentication settings",
220
+ )
221
+ """OAuth settings for the HTTP server."""
222
+
223
+ @property
224
+ def client_id(self) -> str:
225
+ """Generate a unique client ID for this streamable HTTP server configuration."""
226
+ return f"streamable_http_{self.url}"
227
+
228
+ def to_pydantic_ai(self) -> MCPServerStreamableHTTP:
229
+ """Convert to pydantic-ai MCPServerStreamableHTTP instance."""
230
+ from pydantic_ai.mcp import MCPServerStreamableHTTP
231
+
232
+ return MCPServerStreamableHTTP(
233
+ url=str(self.url),
234
+ headers=self.headers,
235
+ id=self.name,
236
+ timeout=self.timeout,
237
+ )
238
+
239
+
240
+ MCPServerConfig = Annotated[
241
+ StdioMCPServerConfig | SSEMCPServerConfig | StreamableHTTPMCPServerConfig,
242
+ Field(discriminator="type"),
243
+ ]
@@ -0,0 +1,202 @@
1
+ """Team configuration models."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any, Literal
6
+
7
+ from evented.configs import EventConfig
8
+ from pydantic import ConfigDict, Field, ImportString
9
+ from schemez import Schema
10
+
11
+ from agentpool_config.event_handlers import EventHandlerConfig
12
+ from agentpool_config.forward_targets import ForwardingTarget
13
+ from agentpool_config.mcp_server import (
14
+ BaseMCPServerConfig,
15
+ MCPServerConfig,
16
+ StdioMCPServerConfig,
17
+ )
18
+
19
+
20
+ if TYPE_CHECKING:
21
+ from agentpool.common_types import IndividualEventHandler
22
+
23
+
24
+ ToolConfirmationMode = Literal["always", "never", "per_tool"]
25
+ """Controls how permission requests are handled:
26
+
27
+ - "always": Always prompt user for confirmation
28
+ - "never": Auto-grant all permissions (no prompts)
29
+ - "per_tool": Use individual tool settings (treated as "always" for ACP)
30
+ """
31
+
32
+
33
+ class NodeConfig(Schema):
34
+ """Configuration for a Node of the messaging system."""
35
+
36
+ model_config = ConfigDict(
37
+ frozen=True,
38
+ arbitrary_types_allowed=True,
39
+ json_schema_extra={
40
+ "x-icon": "octicon:workflow-16",
41
+ "x-doc-title": "Node Configuration",
42
+ },
43
+ )
44
+
45
+ name: str | None = Field(default=None)
46
+ """Identifier for the node. Set from dict key, not from YAML."""
47
+
48
+ config_file_path: str | None = Field(
49
+ default=None,
50
+ exclude=True,
51
+ examples=["/path/to/config.yml", "configs/agent.yaml"],
52
+ title="Configuration file path",
53
+ )
54
+ """Config file path for resolving relative paths."""
55
+
56
+ display_name: str | None = Field(
57
+ default=None,
58
+ examples=["Main Agent", "Web Searcher", "Code Assistant"],
59
+ title="Display name",
60
+ )
61
+ """Human-readable display name for the node."""
62
+
63
+ description: str | None = Field(
64
+ default=None,
65
+ examples=["Main conversation agent", "Handles web search requests"],
66
+ title="Node description",
67
+ )
68
+ """Optional description of the agent / team."""
69
+
70
+ triggers: list[EventConfig] = Field(
71
+ default_factory=list,
72
+ examples=[
73
+ [
74
+ {
75
+ "type": "time",
76
+ "name": "daily_check",
77
+ "schedule": "0 9 * * *",
78
+ "prompt": "Daily status update",
79
+ }
80
+ ],
81
+ [
82
+ {
83
+ "type": "file",
84
+ "name": "code_watcher",
85
+ "paths": ["./src"],
86
+ "extensions": [".py"],
87
+ }
88
+ ],
89
+ ],
90
+ title="Event triggers",
91
+ )
92
+ """Event sources that activate this agent / team"""
93
+
94
+ connections: list[ForwardingTarget] = Field(
95
+ default_factory=list,
96
+ examples=[
97
+ [
98
+ {
99
+ "type": "node",
100
+ "name": "output_agent",
101
+ "connection_type": "run",
102
+ "wait_for_completion": True,
103
+ }
104
+ ],
105
+ [
106
+ {
107
+ "type": "file",
108
+ "path": "logs/messages.txt",
109
+ "template": "{{ message.content }}",
110
+ }
111
+ ],
112
+ ],
113
+ title="Message forwarding targets",
114
+ )
115
+ """Targets to forward results to."""
116
+
117
+ mcp_servers: list[str | MCPServerConfig] = Field(
118
+ default_factory=list,
119
+ title="MCP servers",
120
+ examples=[
121
+ ["uvx some-server"],
122
+ [{"type": "streamable-http", "url": "http://mcp.example.com"}],
123
+ ],
124
+ )
125
+ """List of MCP server configurations:
126
+ - str entries are converted to StdioMCPServerConfig
127
+ - MCPServerConfig for full server configuration
128
+ """
129
+ # Any should be InputProvider, but this leads to circular import
130
+ input_provider: ImportString[Any] | None = Field(
131
+ default=None,
132
+ title="Input provider",
133
+ )
134
+ """Provider for human-input-handling."""
135
+
136
+ event_handlers: list[EventHandlerConfig] = Field(
137
+ default_factory=list,
138
+ title="Event handlers",
139
+ examples=[
140
+ [{"type": "builtin", "handler": "simple"}],
141
+ ],
142
+ )
143
+ """Event handlers for processing agent stream events.
144
+
145
+ Supports:
146
+ - builtin: Simple/detailed console output
147
+ - tts: Text-to-speech synthesis
148
+ - callback: Custom handler via import path
149
+ """
150
+
151
+ def get_event_handlers(self) -> list[IndividualEventHandler]:
152
+ """Get resolved event handlers from configuration.
153
+
154
+ Returns:
155
+ List of event handler callables.
156
+ """
157
+ from agentpool_config.event_handlers import resolve_handler_configs
158
+
159
+ return resolve_handler_configs(self.event_handlers)
160
+
161
+ def get_mcp_servers(self) -> list[MCPServerConfig]:
162
+ """Get processed MCP server configurations.
163
+
164
+ Converts string entries to StdioMCPServerConfigs by splitting
165
+ into command and arguments.
166
+
167
+ Returns:
168
+ List of MCPServerConfig instances
169
+
170
+ Raises:
171
+ ValueError: If string entry is empty
172
+ """
173
+ configs: list[MCPServerConfig] = []
174
+
175
+ for server in self.mcp_servers:
176
+ match server:
177
+ case str():
178
+ parts = server.split()
179
+ if not parts:
180
+ msg = "Empty MCP server command"
181
+ raise ValueError(msg)
182
+
183
+ configs.append(StdioMCPServerConfig(command=parts[0], args=parts[1:]))
184
+ case BaseMCPServerConfig():
185
+ configs.append(server)
186
+
187
+ return configs
188
+
189
+
190
+ class BaseAgentConfig(NodeConfig):
191
+ """Base configuration for agents."""
192
+
193
+ requires_tool_confirmation: ToolConfirmationMode = Field(
194
+ default="per_tool",
195
+ examples=["always", "never", "per_tool"],
196
+ title="Tool confirmation mode",
197
+ )
198
+ """How to handle tool confirmation:
199
+ - "always": Always require confirmation for all tools
200
+ - "never": Never require confirmation (ignore tool settings)
201
+ - "per_tool": Use individual tool settings
202
+ """
@@ -0,0 +1,191 @@
1
+ """Configuration models for observability providers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Annotated, Any, Literal
6
+
7
+ from pydantic import ConfigDict, Field, PrivateAttr, SecretStr
8
+ from schemez import Schema
9
+
10
+
11
+ class BaseObservabilityConfig(Schema):
12
+ """Base configuration for observability endpoints."""
13
+
14
+ type: str = Field(title="Observability provider type")
15
+ """Observability provider type."""
16
+
17
+ enabled: bool = Field(default=True, title="Provider enabled")
18
+ """Provider enabled state."""
19
+
20
+ service_name: str | None = Field(
21
+ default=None,
22
+ examples=["agentpool", "my-ai-service", "production-bot"],
23
+ title="Service name",
24
+ )
25
+ environment: str | None = Field(
26
+ default=None,
27
+ examples=["production", "staging", "development"],
28
+ title="Environment",
29
+ )
30
+ protocol: Literal["http/protobuf", "grpc", "http/json"] = Field(
31
+ default="http/protobuf",
32
+ examples=["http/protobuf", "grpc", "http/json"],
33
+ title="Protocol",
34
+ )
35
+
36
+
37
+ class LogfireObservabilityConfig(BaseObservabilityConfig):
38
+ """Configuration for Logfire endpoint."""
39
+
40
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Logfire"})
41
+
42
+ type: Literal["logfire"] = "logfire"
43
+ """Logfire endpoint type."""
44
+
45
+ token: SecretStr | None = Field(default=None, title="Logfire token")
46
+ """Logfire token."""
47
+
48
+ region: Literal["us", "eu"] = Field(default="us", examples=["us", "eu"], title="Region")
49
+ """Logfire region."""
50
+
51
+ # Private - computed from region
52
+ _endpoint: str = PrivateAttr()
53
+ _headers: dict[str, str] = PrivateAttr(default_factory=dict)
54
+
55
+ def model_post_init(self, __context: Any, /) -> None:
56
+ """Compute private attributes from user config."""
57
+ endpoint = (
58
+ "https://logfire-eu.pydantic.dev"
59
+ if self.region == "eu"
60
+ else "https://logfire-us.pydantic.dev"
61
+ )
62
+ object.__setattr__(self, "_endpoint", endpoint)
63
+
64
+ if self.token:
65
+ headers = {"Authorization": f"Bearer {self.token.get_secret_value()}"}
66
+ object.__setattr__(self, "_headers", headers)
67
+
68
+
69
+ class LangsmithObservabilityConfig(BaseObservabilityConfig):
70
+ """Configuration for Langsmith endpoint."""
71
+
72
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Langsmith"})
73
+
74
+ type: Literal["langsmith"] = "langsmith"
75
+ """Langsmith observability configuration."""
76
+
77
+ api_key: SecretStr | None = Field(default=None, title="Langsmith API key")
78
+ """Langsmith API key."""
79
+
80
+ project_name: str | None = Field(
81
+ default=None,
82
+ examples=["my-project", "ai-agents", "production"],
83
+ title="Project name",
84
+ )
85
+
86
+ _endpoint: str = PrivateAttr(default="https://api.smith.langchain.com")
87
+ _headers: dict[str, str] = PrivateAttr(default_factory=dict)
88
+
89
+ def model_post_init(self, __context: Any, /) -> None:
90
+ """Compute private attributes from user config."""
91
+ if self.api_key:
92
+ headers = {"x-api-key": self.api_key.get_secret_value()}
93
+ object.__setattr__(self, "_headers", headers)
94
+
95
+
96
+ class AgentOpsObservabilityConfig(BaseObservabilityConfig):
97
+ """Configuration for AgentOps endpoint."""
98
+
99
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "AgentOps"})
100
+
101
+ type: Literal["agentops"] = "agentops"
102
+ """AgentOps observability configuration."""
103
+
104
+ api_key: SecretStr | None = Field(default=None, title="AgentOps API key")
105
+ """AgentOps API key."""
106
+
107
+ _endpoint: str = PrivateAttr(default="https://api.agentops.ai")
108
+ _headers: dict[str, str] = PrivateAttr(default_factory=dict)
109
+
110
+ def model_post_init(self, __context: Any, /) -> None:
111
+ """Compute private attributes from user config."""
112
+ if self.api_key:
113
+ headers = {"Authorization": f"Bearer {self.api_key.get_secret_value()}"}
114
+ object.__setattr__(self, "_headers", headers)
115
+
116
+
117
+ class ArizePhoenixObservabilityConfig(BaseObservabilityConfig):
118
+ """Configuration for Arize Phoenix endpoint."""
119
+
120
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Arize Phoenix"})
121
+
122
+ type: Literal["arize"] = "arize"
123
+ """Arize observability configuration."""
124
+
125
+ api_key: SecretStr | None = Field(default=None, title="Arize API key")
126
+ """Arize API key."""
127
+
128
+ space_key: str | None = Field(
129
+ default=None,
130
+ examples=["default", "team-space", "production-space"],
131
+ title="Space key",
132
+ )
133
+ """Arize space key."""
134
+
135
+ model_id: str | None = Field(
136
+ default=None,
137
+ examples=["gpt-4", "claude-3", "my-model"],
138
+ title="Model ID",
139
+ )
140
+ """Arize model ID."""
141
+
142
+ _endpoint: str = PrivateAttr(default="https://api.arize.com")
143
+ _headers: dict[str, str] = PrivateAttr(default_factory=dict)
144
+
145
+ def model_post_init(self, __context: Any, /) -> None:
146
+ """Compute private attributes from user config."""
147
+ if self.api_key:
148
+ headers = {"Authorization": f"Bearer {self.api_key.get_secret_value()}"}
149
+ object.__setattr__(self, "_headers", headers)
150
+
151
+
152
+ class CustomObservabilityConfig(BaseObservabilityConfig):
153
+ """Configuration for custom OTEL endpoint."""
154
+
155
+ model_config = ConfigDict(json_schema_extra={"x-doc-title": "Custom OTEL"})
156
+
157
+ type: Literal["custom"] = "custom"
158
+ """Custom OTEL endpoint configuration."""
159
+
160
+ endpoint: str = Field(
161
+ examples=["https://otel.example.com", "http://localhost:4318"],
162
+ title="OTEL endpoint",
163
+ )
164
+ """Custom OTEL endpoint URL."""
165
+
166
+ headers: dict[str, str] = Field(default_factory=dict, title="Custom headers")
167
+ """Custom headers for the OTEL endpoint."""
168
+
169
+
170
+ # Union of all provider configs
171
+ ObservabilityProviderConfig = Annotated[
172
+ LogfireObservabilityConfig
173
+ | LangsmithObservabilityConfig
174
+ | AgentOpsObservabilityConfig
175
+ | ArizePhoenixObservabilityConfig
176
+ | CustomObservabilityConfig,
177
+ Field(discriminator="type"),
178
+ ]
179
+
180
+
181
+ class ObservabilityConfig(Schema):
182
+ """Global observability configuration - supports single backend only."""
183
+
184
+ enabled: bool = Field(default=True, title="Observability enabled")
185
+ """Whether observability is enabled."""
186
+
187
+ provider: ObservabilityProviderConfig | None = Field(
188
+ default=None,
189
+ title="Observability provider",
190
+ )
191
+ """Single observability provider configuration."""
@@ -0,0 +1,55 @@
1
+ """Models for response fields and definitions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pydantic import Field
6
+ from schemez import Schema, SchemaDef
7
+
8
+
9
+ class StructuredResponseConfig(Schema):
10
+ """Base class for response definitions.
11
+
12
+ Docs: https://phil65.github.io/agentpool/YAML%20Configuration/response_configuration/
13
+ """
14
+
15
+ response_schema: SchemaDef = Field(
16
+ examples=[
17
+ {
18
+ "type": "import",
19
+ "import_path": "pydantic_ai:BinaryImage",
20
+ },
21
+ {
22
+ "type": "inline",
23
+ "fields": {
24
+ "name": {"type": "str", "description": "User name"},
25
+ "age": {"type": "int", "description": "User age"},
26
+ },
27
+ },
28
+ ],
29
+ title="Response schema",
30
+ )
31
+ """A model describing the response schema."""
32
+
33
+ description: str | None = Field(
34
+ default=None,
35
+ examples=["User profile data", "Search results", "Code analysis output"],
36
+ title="Response description",
37
+ )
38
+ """A description for this response definition."""
39
+
40
+ result_tool_name: str = Field(
41
+ default="final_result",
42
+ examples=["final_result", "submit_answer", "return_data"],
43
+ title="Result tool name",
44
+ )
45
+ """The tool name for the Agent tool to create the structured response."""
46
+
47
+ result_tool_description: str | None = Field(
48
+ default=None,
49
+ examples=["Submit the final result", "Return structured data"],
50
+ title="Result tool description",
51
+ )
52
+ """The tool description for the Agent tool to create the structured response."""
53
+
54
+ output_retries: int | None = Field(default=None, examples=[1, 3, 5], title="Output retries")
55
+ """Retry override. How often the Agent should try to validate the response."""