fast-agent-mcp 0.2.55__tar.gz → 0.2.56__tar.gz

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 fast-agent-mcp might be problematic. Click here for more details.

Files changed (260) hide show
  1. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/PKG-INFO +3 -17
  2. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/pyproject.toml +3 -7
  3. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/base_agent.py +8 -5
  4. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/commands/go.py +3 -3
  5. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/enhanced_prompt.py +1 -0
  6. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +1 -0
  7. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_groq.py +58 -29
  8. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_openai.py +4 -5
  9. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/mcp_aggregator.py +6 -7
  10. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/.gitignore +0 -0
  11. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/LICENSE +0 -0
  12. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/README.md +0 -0
  13. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/azure-openai/fastagent.config.yaml +0 -0
  14. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/bedrock/fast-agent.config.yaml +0 -0
  15. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/custom-agents/agent.py +0 -0
  16. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/custom-agents/fastagent.config.yaml +0 -0
  17. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/data-analysis/analysis-campaign.py +0 -0
  18. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/data-analysis/analysis.py +0 -0
  19. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/data-analysis/fastagent.config.yaml +0 -0
  20. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  21. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  22. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  23. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  24. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  25. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  26. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/forms_demo.py +0 -0
  27. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/game_character.py +0 -0
  28. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/game_character_handler.py +0 -0
  29. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/elicitations/tool_call.py +0 -0
  30. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
  31. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
  32. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
  33. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
  34. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/state-transfer/agent_one.py +0 -0
  35. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/state-transfer/agent_two.py +0 -0
  36. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  37. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  38. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/vision-examples/cat.png +0 -0
  39. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/vision-examples/example1.py +0 -0
  40. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/vision-examples/example2.py +0 -0
  41. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/vision-examples/example3.py +0 -0
  42. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
  43. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/otel/agent.py +0 -0
  44. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/otel/agent2.py +0 -0
  45. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/otel/docker-compose.yaml +0 -0
  46. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/otel/fastagent.config.yaml +0 -0
  47. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/researcher/fastagent.config.yaml +0 -0
  48. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/researcher/researcher-eval.py +0 -0
  49. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/researcher/researcher-imp.py +0 -0
  50. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/researcher/researcher.py +0 -0
  51. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/.env.sample +0 -0
  52. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/Makefile +0 -0
  53. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/README.md +0 -0
  54. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/agent.py +0 -0
  55. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/demo_images/clam.jpg +0 -0
  56. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/demo_images/crab.png +0 -0
  57. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/demo_images/shrimp.png +0 -0
  58. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/docker-compose.yml +0 -0
  59. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/fastagent.config.yaml +0 -0
  60. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/image_demo.py +0 -0
  61. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/mcp_server/Dockerfile +0 -0
  62. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  63. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  64. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  65. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/simple_agent.py +0 -0
  66. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  67. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  68. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  69. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/chaining.py +0 -0
  70. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/evaluator.py +0 -0
  71. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/fastagent.config.yaml +0 -0
  72. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/graded_report.md +0 -0
  73. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/human_input.py +0 -0
  74. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/orchestrator.py +0 -0
  75. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/parallel.py +0 -0
  76. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/router.py +0 -0
  77. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/short_story.md +0 -0
  78. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/examples/workflows/short_story.txt +0 -0
  79. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/hatch_build.py +0 -0
  80. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/__init__.py +0 -0
  81. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/__init__.py +0 -0
  82. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/agent.py +0 -0
  83. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/__init__.py +0 -0
  84. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
  85. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
  86. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/iterative_planner.py +0 -0
  87. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
  88. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
  89. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
  90. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
  91. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
  92. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/app.py +0 -0
  93. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/__init__.py +0 -0
  94. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/__main__.py +0 -0
  95. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/commands/check_config.py +0 -0
  96. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/commands/quickstart.py +0 -0
  97. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
  98. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/commands/setup.py +0 -0
  99. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/commands/url_parser.py +0 -0
  100. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/constants.py +0 -0
  101. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/main.py +0 -0
  102. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/cli/terminal.py +0 -0
  103. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/config.py +0 -0
  104. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/console.py +0 -0
  105. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/context.py +0 -0
  106. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/context_dependent.py +0 -0
  107. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/__init__.py +0 -0
  108. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/agent_app.py +0 -0
  109. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/agent_types.py +0 -0
  110. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/direct_decorators.py +0 -0
  111. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/direct_factory.py +0 -0
  112. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/error_handling.py +0 -0
  113. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/exceptions.py +0 -0
  114. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/fastagent.py +0 -0
  115. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/interactive_prompt.py +0 -0
  116. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/mcp_content.py +0 -0
  117. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/mermaid_utils.py +0 -0
  118. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/prompt.py +0 -0
  119. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/request_params.py +0 -0
  120. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/usage_display.py +0 -0
  121. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/core/validation.py +0 -0
  122. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/event_progress.py +0 -0
  123. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/executor/__init__.py +0 -0
  124. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/executor/executor.py +0 -0
  125. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/executor/task_registry.py +0 -0
  126. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/executor/workflow_signal.py +0 -0
  127. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/__init__.py +0 -0
  128. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/elicitation_form.py +0 -0
  129. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
  130. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
  131. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/elicitation_state.py +0 -0
  132. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/form_fields.py +0 -0
  133. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/handler.py +0 -0
  134. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/simple_form.py +0 -0
  135. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/human_input/types.py +0 -0
  136. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/__init__.py +0 -0
  137. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/augmented_llm.py +0 -0
  138. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
  139. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
  140. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
  141. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
  142. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/memory.py +0 -0
  143. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/model_database.py +0 -0
  144. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/model_factory.py +0 -0
  145. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/prompt_utils.py +0 -0
  146. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/provider_key_manager.py +0 -0
  147. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/provider_types.py +0 -0
  148. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/__init__.py +0 -0
  149. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
  150. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
  151. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
  152. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
  153. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
  154. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
  155. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
  156. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
  157. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
  158. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_tensorzero_openai.py +0 -0
  159. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
  160. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/google_converter.py +0 -0
  161. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
  162. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
  163. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
  164. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
  165. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
  166. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
  167. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/sampling_converter.py +0 -0
  168. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
  169. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/llm/usage_tracking.py +0 -0
  170. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/__init__.py +0 -0
  171. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/events.py +0 -0
  172. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/json_serializer.py +0 -0
  173. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/listeners.py +0 -0
  174. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/logger.py +0 -0
  175. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/rich_progress.py +0 -0
  176. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/logging/transport.py +0 -0
  177. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/__init__.py +0 -0
  178. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/common.py +0 -0
  179. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
  180. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
  181. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/gen_client.py +0 -0
  182. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
  183. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
  184. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
  185. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/hf_auth.py +0 -0
  186. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/interfaces.py +0 -0
  187. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/logger_textio.py +0 -0
  188. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
  189. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  190. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/mime_utils.py +0 -0
  191. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
  192. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompt_render.py +0 -0
  193. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
  194. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
  195. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
  196. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
  197. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
  198. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
  199. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
  200. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
  201. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/resource_utils.py +0 -0
  202. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp/sampling.py +0 -0
  203. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp_server/__init__.py +0 -0
  204. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp_server/agent_server.py +0 -0
  205. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/mcp_server_registry.py +0 -0
  206. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/progress_display.py +0 -0
  207. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/py.typed +0 -0
  208. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
  209. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
  210. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  211. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  212. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  213. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  214. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  215. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  216. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  217. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
  218. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
  219. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
  220. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
  221. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
  222. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
  223. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  224. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  225. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  226. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  227. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
  228. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  229. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/.env.sample +0 -0
  230. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/Makefile +0 -0
  231. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/README.md +0 -0
  232. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/agent.py +0 -0
  233. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  234. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
  235. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  236. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
  237. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  238. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/image_demo.py +0 -0
  239. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
  240. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  241. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  242. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  243. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  244. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/simple_agent.py +0 -0
  245. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  246. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  247. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  248. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  249. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
  250. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  251. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
  252. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  253. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
  254. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  255. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  256. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
  257. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
  258. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/tools/tool_definition.py +0 -0
  259. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/ui/console_display.py +0 -0
  260. {fast_agent_mcp-0.2.55 → fast_agent_mcp-0.2.56}/src/mcp_agent/ui/console_display_legacy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.2.55
3
+ Version: 0.2.56
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>
6
6
  License: Apache License
@@ -211,7 +211,7 @@ Classifier: Programming Language :: Python :: 3
211
211
  Requires-Python: >=3.13
212
212
  Requires-Dist: a2a-sdk>=0.3.0
213
213
  Requires-Dist: aiohttp>=3.11.13
214
- Requires-Dist: anthropic>=0.59.0
214
+ Requires-Dist: anthropic>=0.63.0
215
215
  Requires-Dist: azure-identity>=1.14.0
216
216
  Requires-Dist: boto3>=1.35.0
217
217
  Requires-Dist: deprecated>=1.2.18
@@ -219,7 +219,7 @@ Requires-Dist: email-validator>=2.2.0
219
219
  Requires-Dist: fastapi>=0.115.6
220
220
  Requires-Dist: google-genai>=1.27.0
221
221
  Requires-Dist: mcp==1.12.4
222
- Requires-Dist: openai>=1.97.1
222
+ Requires-Dist: openai>=1.99.9
223
223
  Requires-Dist: opentelemetry-distro>=0.55b0
224
224
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
225
225
  Requires-Dist: opentelemetry-instrumentation-anthropic>=0.43.1; python_version >= '3.10' and python_version < '4.0'
@@ -234,20 +234,6 @@ Requires-Dist: pyyaml>=6.0.2
234
234
  Requires-Dist: rich>=14.1.0
235
235
  Requires-Dist: tensorzero>=2025.7.5
236
236
  Requires-Dist: typer>=0.15.1
237
- Provides-Extra: azure
238
- Requires-Dist: azure-identity>=1.14.0; extra == 'azure'
239
- Provides-Extra: dev
240
- Requires-Dist: anthropic>=0.42.0; extra == 'dev'
241
- Requires-Dist: pre-commit>=4.0.1; extra == 'dev'
242
- Requires-Dist: pydantic>=2.10.4; extra == 'dev'
243
- Requires-Dist: pytest-asyncio>=0.21.1; extra == 'dev'
244
- Requires-Dist: pytest-cov; extra == 'dev'
245
- Requires-Dist: pytest>=7.4.0; extra == 'dev'
246
- Requires-Dist: pyyaml>=6.0.2; extra == 'dev'
247
- Requires-Dist: ruff>=0.8.4; extra == 'dev'
248
- Requires-Dist: tomli>=2.2.1; extra == 'dev'
249
- Provides-Extra: openai
250
- Requires-Dist: openai>=1.58.1; extra == 'openai'
251
237
  Description-Content-Type: text/markdown
252
238
 
253
239
  <p align="center">
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.2.55"
3
+ version = "0.2.56"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -23,8 +23,8 @@ dependencies = [
23
23
  "pyyaml>=6.0.2",
24
24
  "rich>=14.1.0",
25
25
  "typer>=0.15.1",
26
- "anthropic>=0.59.0",
27
- "openai>=1.97.1",
26
+ "anthropic>=0.63.0",
27
+ "openai>=1.99.9",
28
28
  "azure-identity>=1.14.0",
29
29
  "boto3>=1.35.0",
30
30
  "prompt-toolkit>=3.0.51",
@@ -41,10 +41,6 @@ dependencies = [
41
41
  "pyperclip>=1.9.0",
42
42
  ]
43
43
 
44
- [project.optional-dependencies]
45
- openai = [
46
- "openai>=1.58.1",
47
- ]
48
44
  # For Azure OpenAI with DefaultAzureCredential support, install with: pip install fast-agent-mcp[azure]
49
45
  azure = [
50
46
  "azure-identity>=1.14.0"
@@ -364,12 +364,15 @@ class BaseAgent(MCPAggregator, AgentProtocol):
364
364
  if self.config.tools is not None:
365
365
  filtered_tools = []
366
366
  for tool in result.tools:
367
- # Extract server name from tool name (e.g., "mathematics-add" -> "mathematics")
368
- if "-" in tool.name:
369
- server_name = tool.name.split("-", 1)[0]
367
+ # Extract server name from tool name, handling server names with hyphens
368
+ server_name = None
369
+ for configured_server in self.config.tools.keys():
370
+ if tool.name.startswith(f"{configured_server}-"):
371
+ server_name = configured_server
372
+ break
370
373
 
371
- # Check if this server has tool filters
372
- if server_name in self.config.tools:
374
+ # Check if this server has tool filters
375
+ if server_name and server_name in self.config.tools:
373
376
  # Check if tool matches any pattern for this server
374
377
  for pattern in self.config.tools[server_name]:
375
378
  if self._matches_pattern(tool.name, pattern, server_name):
@@ -121,9 +121,9 @@ async def _run_agent(
121
121
  print(response)
122
122
  elif prompt_file:
123
123
  prompt = load_prompt_multipart(Path(prompt_file))
124
- response = await agent.generate(prompt)
125
- # Print the response text and exit
126
- print(response.last_text())
124
+ response = await agent.agent.generate(prompt)
125
+ print(f"\nLoaded {len(prompt)} messages from prompt file '{prompt_file}'")
126
+ await agent.interactive()
127
127
  else:
128
128
  await agent.interactive()
129
129
 
@@ -585,6 +585,7 @@ async def get_enhanced_input(
585
585
  ("Ctrl+Y", "Copy"),
586
586
  ("Ctrl+L", "Clear"),
587
587
  ("↑/↓", "History"),
588
+ ("EXIT", "Exit")
588
589
  ]
589
590
 
590
591
  newline = "Ctrl+&lt;Enter&gt;:Submit" if in_multiline_mode else "&lt;Enter&gt;:Submit"
@@ -86,6 +86,7 @@ class BedrockAugmentedLLM(AugmentedLLM[BedrockMessageParam, BedrockMessage]):
86
86
  r"^cohere\..*", # Cohere models
87
87
  r"^ai21\..*", # AI21 models
88
88
  r"^stability\..*", # Stability AI models
89
+ r"^openai\..*", # OpenAI models
89
90
  ]
90
91
 
91
92
  import re
@@ -49,35 +49,22 @@ class GroqAugmentedLLM(OpenAIAugmentedLLM):
49
49
  if "object" == json_mode:
50
50
  request_params.response_format = {"type": "json_object"}
51
51
 
52
- # Get the full schema and extract just the properties
53
- full_schema = model.model_json_schema()
54
- properties = full_schema.get("properties", {})
55
- required_fields = full_schema.get("required", [])
56
-
57
- # Create a cleaner format description
58
- format_description = "{\n"
59
- for field_name, field_info in properties.items():
60
- field_type = field_info.get("type", "string")
61
- description = field_info.get("description", "")
62
- format_description += f' "{field_name}": "{field_type}"'
63
- if description:
64
- format_description += f" // {description}"
65
- if field_name in required_fields:
66
- format_description += " // REQUIRED"
67
- format_description += "\n"
68
- format_description += "}"
69
-
70
- multipart_messages[-1].add_text(
71
- f"""YOU MUST RESPOND WITH A JSON OBJECT IN EXACTLY THIS FORMAT:
72
- {format_description}
73
-
74
- IMPORTANT RULES:
75
- - Respond ONLY with the JSON object, no other text
76
- - Do NOT include "properties" or "schema" wrappers
77
- - Do NOT use code fences or markdown
78
- - The response must be valid JSON that matches the format above
79
- - All required fields must be included"""
80
- )
52
+ # Create a cleaner format description from full schema
53
+ full_schema = model.model_json_schema()
54
+ format_description = self._schema_to_json_object(
55
+ full_schema, full_schema.get("$defs")
56
+ )
57
+
58
+ multipart_messages[-1].add_text(
59
+ f"""YOU MUST RESPOND WITH A JSON OBJECT IN EXACTLY THIS FORMAT:
60
+ {format_description}
61
+
62
+ IMPORTANT RULES:
63
+ - Respond ONLY with the JSON object, no other text
64
+ - Do NOT include "properties" or "schema" wrappers
65
+ - Do NOT use code fences or markdown
66
+ - The response must be valid JSON that matches the format above
67
+ - All required fields must be included""")
81
68
 
82
69
  result: PromptMessageMultipart = await self._apply_prompt_provider_specific(
83
70
  multipart_messages, request_params
@@ -101,3 +88,45 @@ class GroqAugmentedLLM(OpenAIAugmentedLLM):
101
88
  base_url = self.context.config.groq.base_url
102
89
 
103
90
  return base_url if base_url else GROQ_BASE_URL
91
+
92
+ def _schema_to_json_object(
93
+ self, schema: dict, defs: dict | None = None, visited: set | None = None
94
+ ) -> str:
95
+ visited = visited or set()
96
+
97
+ if id(schema) in visited:
98
+ return '"<recursive>"'
99
+ visited.add(id(schema))
100
+
101
+ if "$ref" in schema:
102
+ ref = schema.get("$ref", "")
103
+ if ref.startswith("#/$defs/"):
104
+ target = ref.split("/")[-1]
105
+ if defs and target in defs:
106
+ return self._schema_to_json_object(defs[target], defs, visited)
107
+ return f'"<ref:{ref}>"'
108
+
109
+ schema_type = schema.get("type")
110
+ description = schema.get("description", "")
111
+ required = schema.get("required", [])
112
+
113
+ if schema_type == "object":
114
+ props = schema.get("properties", {})
115
+ result = "{\n"
116
+ for prop_name, prop_schema in props.items():
117
+ is_required = prop_name in required
118
+ prop_str = self._schema_to_json_object(prop_schema, defs, visited)
119
+ if is_required:
120
+ prop_str += " // REQUIRED"
121
+ result += f' "{prop_name}": {prop_str},\n'
122
+ result += "}"
123
+ return result
124
+ elif schema_type == "array":
125
+ items = schema.get("items", {})
126
+ items_str = self._schema_to_json_object(items, defs, visited)
127
+ return f"[{items_str}]"
128
+ elif schema_type:
129
+ comment = f" // {description}" if description else ""
130
+ return f'"{schema_type}"' + comment
131
+
132
+ return '"<unknown>"'
@@ -171,7 +171,6 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
171
171
  async def _process_stream_manual(self, stream, model: str):
172
172
  """Manual stream processing for providers like Ollama that may not work with ChatCompletionStreamState."""
173
173
  from openai.types.chat import ChatCompletionMessageToolCall
174
- from openai.types.chat.chat_completion_message_tool_call import Function
175
174
 
176
175
  # Track estimated output tokens by counting text chunks
177
176
  estimated_tokens = 0
@@ -249,10 +248,10 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
249
248
  ChatCompletionMessageToolCall(
250
249
  id=tool_call_data["id"],
251
250
  type=tool_call_data["type"],
252
- function=Function(
253
- name=tool_call_data["function"]["name"],
254
- arguments=tool_call_data["function"]["arguments"],
255
- ),
251
+ function={
252
+ "name": tool_call_data["function"]["name"],
253
+ "arguments": tool_call_data["function"]["arguments"],
254
+ },
256
255
  )
257
256
  )
258
257
 
@@ -572,14 +572,13 @@ class MCPAggregator(ContextDependent):
572
572
 
573
573
  # Next, attempt to interpret as a namespaced name
574
574
  if is_namespaced_name(name):
575
- parts = name.split(SEP, 1)
576
- server_name, local_name = parts[0], parts[1]
575
+ # Try to match against known server names, handling server names with hyphens
576
+ for server_name in self.server_names:
577
+ if name.startswith(f"{server_name}{SEP}"):
578
+ local_name = name[len(server_name) + len(SEP):]
579
+ return server_name, local_name
577
580
 
578
- # Validate that the parsed server actually exists
579
- if server_name in self.server_names:
580
- return server_name, local_name
581
-
582
- # If the server name doesn't exist, it might be a tool with a hyphen in its name
581
+ # If no server name matched, it might be a tool with a hyphen in its name
583
582
  # Fall through to the next checks
584
583
 
585
584
  # For tools, search all servers for the tool by exact name match
File without changes