fast-agent-mcp 0.2.44__tar.gz → 0.2.46__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.
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/PKG-INFO +5 -5
- {fast_agent_mcp-0.2.44/src/mcp_agent/resources → fast_agent_mcp-0.2.46}/examples/workflows/evaluator.py +2 -2
- {fast_agent_mcp-0.2.44/src/mcp_agent/resources → fast_agent_mcp-0.2.46}/examples/workflows/router.py +1 -1
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/pyproject.toml +6 -5
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/__init__.py +40 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +39 -63
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/router_agent.py +46 -21
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/commands/go.py +25 -4
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/context.py +4 -0
- fast_agent_mcp-0.2.46/src/mcp_agent/core/__init__.py +26 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/direct_decorators.py +117 -20
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/enhanced_prompt.py +4 -5
- fast_agent_mcp-0.2.46/src/mcp_agent/human_input/__init__.py +50 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/human_input/elicitation_form.py +16 -13
- fast_agent_mcp-0.2.46/src/mcp_agent/human_input/form_fields.py +252 -0
- fast_agent_mcp-0.2.46/src/mcp_agent/human_input/simple_form.py +111 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/augmented_llm.py +12 -4
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -11
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/augmented_llm_playback.py +5 -3
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +254 -95
- fast_agent_mcp-0.2.46/src/mcp_agent/mcp/__init__.py +50 -0
- fast_agent_mcp-0.2.46/src/mcp_agent/mcp/helpers/__init__.py +25 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/interfaces.py +13 -2
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46/src/mcp_agent/resources}/examples/workflows/evaluator.py +2 -2
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46/src/mcp_agent/resources}/examples/workflows/router.py +1 -1
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/ui/console_display.py +19 -9
- fast_agent_mcp-0.2.44/src/mcp_agent/mcp/__init__.py +0 -0
- fast_agent_mcp-0.2.44/src/mcp_agent/mcp/helpers/__init__.py +0 -3
- fast_agent_mcp-0.2.44/src/mcp_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/.gitignore +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/LICENSE +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/README.md +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/bedrock/fast-agent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/custom-agents/agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/vision-examples/cat.png +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/vision-examples/example1.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/vision-examples/example2.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/vision-examples/example3.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/otel/agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/otel/agent2.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/hatch_build.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/base_agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/app.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/__main__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/commands/check_config.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/commands/quickstart.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/commands/setup.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/commands/url_parser.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/constants.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/main.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/config.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/console.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/agent_app.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/agent_types.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/interactive_prompt.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/mcp_content.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/request_params.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/usage_display.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/event_progress.py +0 -0
- {fast_agent_mcp-0.2.44/src/mcp_agent/core → fast_agent_mcp-0.2.46/src/mcp_agent/executor}/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/executor/executor.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/human_input/elicitation_state.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/human_input/handler.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/memory.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/model_database.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/model_factory.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/provider_key_manager.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/provider_types.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_openai.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/google_converter.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/multipart_converter_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/llm/usage_tracking.py +0 -0
- {fast_agent_mcp-0.2.44/src/mcp_agent/executor → fast_agent_mcp-0.2.46/src/mcp_agent/logging}/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/logging/events.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/logging/listeners.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/logging/logger.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/logging/rich_progress.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/logging/transport.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/common.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/hf_auth.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
- {fast_agent_mcp-0.2.44/src/mcp_agent/human_input → fast_agent_mcp-0.2.46/src/mcp_agent/mcp/prompts}/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp_server/__init__.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp_server/agent_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/mcp_server_registry.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/progress_display.py +0 -0
- /fast_agent_mcp-0.2.44/src/mcp_agent/logging/__init__.py → /fast_agent_mcp-0.2.46/src/mcp_agent/py.typed +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/tools/tool_definition.py +0 -0
- {fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/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.
|
|
3
|
+
Version: 0.2.46
|
|
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
|
|
@@ -218,14 +218,14 @@ Requires-Dist: deprecated>=1.2.18
|
|
|
218
218
|
Requires-Dist: email-validator>=2.2.0
|
|
219
219
|
Requires-Dist: fastapi>=0.115.6
|
|
220
220
|
Requires-Dist: google-genai
|
|
221
|
-
Requires-Dist: mcp==1.12.
|
|
221
|
+
Requires-Dist: mcp==1.12.1
|
|
222
222
|
Requires-Dist: openai>=1.93.0
|
|
223
223
|
Requires-Dist: opentelemetry-distro>=0.50b0
|
|
224
224
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.29.0
|
|
225
|
-
Requires-Dist: opentelemetry-instrumentation-anthropic>=0.
|
|
225
|
+
Requires-Dist: opentelemetry-instrumentation-anthropic>=0.42.0; python_version >= '3.10' and python_version < '4.0'
|
|
226
226
|
Requires-Dist: opentelemetry-instrumentation-google-genai>=0.2b0
|
|
227
|
-
Requires-Dist: opentelemetry-instrumentation-mcp>=0.
|
|
228
|
-
Requires-Dist: opentelemetry-instrumentation-openai>=0.
|
|
227
|
+
Requires-Dist: opentelemetry-instrumentation-mcp>=0.42.0; python_version >= '3.10' and python_version < '4.0'
|
|
228
|
+
Requires-Dist: opentelemetry-instrumentation-openai>=0.42.0; python_version >= '3.10' and python_version < '4.0'
|
|
229
229
|
Requires-Dist: prompt-toolkit>=3.0.50
|
|
230
230
|
Requires-Dist: pydantic-settings>=2.7.0
|
|
231
231
|
Requires-Dist: pydantic>=2.10.4
|
|
@@ -18,7 +18,7 @@ fast = FastAgent("Evaluator-Optimizer")
|
|
|
18
18
|
candidate details, and company information. Tailor the response to the company and job requirements.
|
|
19
19
|
""",
|
|
20
20
|
servers=["fetch"],
|
|
21
|
-
model="
|
|
21
|
+
model="gpt-4.1-nano",
|
|
22
22
|
use_history=True,
|
|
23
23
|
)
|
|
24
24
|
# Define evaluator agent
|
|
@@ -40,7 +40,7 @@ fast = FastAgent("Evaluator-Optimizer")
|
|
|
40
40
|
Summarize your evaluation as a structured response with:
|
|
41
41
|
- Overall quality rating.
|
|
42
42
|
- Specific feedback and areas for improvement.""",
|
|
43
|
-
model="
|
|
43
|
+
model="sonnet",
|
|
44
44
|
)
|
|
45
45
|
# Define the evaluator-optimizer workflow
|
|
46
46
|
@fast.evaluator_optimizer(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fast-agent-mcp"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.46"
|
|
4
4
|
description = "Define, Prompt and Test MCP enabled Agents and Workflows"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -15,7 +15,7 @@ classifiers = [
|
|
|
15
15
|
requires-python = ">=3.12"
|
|
16
16
|
dependencies = [
|
|
17
17
|
"fastapi>=0.115.6",
|
|
18
|
-
"mcp==1.12.
|
|
18
|
+
"mcp==1.12.1",
|
|
19
19
|
"opentelemetry-distro>=0.50b0",
|
|
20
20
|
"opentelemetry-exporter-otlp-proto-http>=1.29.0",
|
|
21
21
|
"pydantic-settings>=2.7.0",
|
|
@@ -29,9 +29,9 @@ dependencies = [
|
|
|
29
29
|
"boto3>=1.35.0",
|
|
30
30
|
"prompt-toolkit>=3.0.50",
|
|
31
31
|
"aiohttp>=3.11.13",
|
|
32
|
-
"opentelemetry-instrumentation-openai>=0.
|
|
33
|
-
"opentelemetry-instrumentation-anthropic>=0.
|
|
34
|
-
"opentelemetry-instrumentation-mcp>=0.
|
|
32
|
+
"opentelemetry-instrumentation-openai>=0.42.0; python_version >= '3.10' and python_version < '4.0'",
|
|
33
|
+
"opentelemetry-instrumentation-anthropic>=0.42.0; python_version >= '3.10' and python_version < '4.0'",
|
|
34
|
+
"opentelemetry-instrumentation-mcp>=0.42.0; python_version >= '3.10' and python_version < '4.0'",
|
|
35
35
|
"google-genai",
|
|
36
36
|
"opentelemetry-instrumentation-google-genai>=0.2b0",
|
|
37
37
|
"tensorzero>=2025.6.3",
|
|
@@ -75,6 +75,7 @@ include = [
|
|
|
75
75
|
"src/mcp_agent/**/*.csv",
|
|
76
76
|
"src/mcp_agent/**/*.txt",
|
|
77
77
|
"src/mcp_agent/**/*.example",
|
|
78
|
+
"src/mcp_agent/py.typed",
|
|
78
79
|
"examples/**/*",
|
|
79
80
|
]
|
|
80
81
|
|
|
@@ -31,9 +31,32 @@ from mcp_agent.core.direct_decorators import (
|
|
|
31
31
|
# FastAgent components
|
|
32
32
|
from mcp_agent.core.fastagent import FastAgent
|
|
33
33
|
|
|
34
|
+
# MCP content creation utilities
|
|
35
|
+
from mcp_agent.core.mcp_content import (
|
|
36
|
+
Assistant,
|
|
37
|
+
MCPFile,
|
|
38
|
+
MCPImage,
|
|
39
|
+
MCPPrompt,
|
|
40
|
+
MCPText,
|
|
41
|
+
User,
|
|
42
|
+
create_message,
|
|
43
|
+
)
|
|
44
|
+
|
|
34
45
|
# Request configuration
|
|
35
46
|
from mcp_agent.core.request_params import RequestParams
|
|
36
47
|
|
|
48
|
+
# MCP content helpers
|
|
49
|
+
from mcp_agent.mcp.helpers import (
|
|
50
|
+
get_image_data,
|
|
51
|
+
get_resource_text,
|
|
52
|
+
get_resource_uri,
|
|
53
|
+
get_text,
|
|
54
|
+
is_image_content,
|
|
55
|
+
is_resource_content,
|
|
56
|
+
is_resource_link,
|
|
57
|
+
is_text_content,
|
|
58
|
+
)
|
|
59
|
+
|
|
37
60
|
# Core protocol interfaces
|
|
38
61
|
from mcp_agent.mcp.interfaces import AgentProtocol, AugmentedLLMProtocol
|
|
39
62
|
from mcp_agent.mcp.mcp_aggregator import MCPAggregator
|
|
@@ -71,4 +94,21 @@ __all__ = [
|
|
|
71
94
|
"evaluator_optimizer",
|
|
72
95
|
# Request configuration
|
|
73
96
|
"RequestParams",
|
|
97
|
+
# MCP content helpers
|
|
98
|
+
"get_text",
|
|
99
|
+
"get_image_data",
|
|
100
|
+
"get_resource_uri",
|
|
101
|
+
"is_text_content",
|
|
102
|
+
"is_image_content",
|
|
103
|
+
"is_resource_content",
|
|
104
|
+
"is_resource_link",
|
|
105
|
+
"get_resource_text",
|
|
106
|
+
# MCP content creation utilities
|
|
107
|
+
"MCPText",
|
|
108
|
+
"MCPImage",
|
|
109
|
+
"MCPFile",
|
|
110
|
+
"MCPPrompt",
|
|
111
|
+
"User",
|
|
112
|
+
"Assistant",
|
|
113
|
+
"create_message",
|
|
74
114
|
]
|
{fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/evaluator_optimizer.py
RENAMED
|
@@ -33,16 +33,14 @@ class QualityRating(str, Enum):
|
|
|
33
33
|
GOOD = "GOOD" # Minor improvements possible
|
|
34
34
|
EXCELLENT = "EXCELLENT" # No improvements needed
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"EXCELLENT": 3,
|
|
45
|
-
}[self._value_]
|
|
36
|
+
|
|
37
|
+
# Separate mapping for quality ratings to numerical values
|
|
38
|
+
QUALITY_RATING_VALUES = {
|
|
39
|
+
QualityRating.POOR: 0,
|
|
40
|
+
QualityRating.FAIR: 1,
|
|
41
|
+
QualityRating.GOOD: 2,
|
|
42
|
+
QualityRating.EXCELLENT: 3,
|
|
43
|
+
}
|
|
46
44
|
|
|
47
45
|
|
|
48
46
|
class EvaluationResult(BaseModel):
|
|
@@ -140,7 +138,7 @@ class EvaluatorOptimizerAgent(BaseAgent):
|
|
|
140
138
|
|
|
141
139
|
# Evaluate current response
|
|
142
140
|
eval_prompt = self._build_eval_prompt(
|
|
143
|
-
request=request, response=response.
|
|
141
|
+
request=request, response=response.last_text(), iteration=refinement_count
|
|
144
142
|
)
|
|
145
143
|
|
|
146
144
|
# Create evaluation message and get structured evaluation result
|
|
@@ -171,7 +169,7 @@ class EvaluatorOptimizerAgent(BaseAgent):
|
|
|
171
169
|
logger.debug(f"Evaluation result: {evaluation_result.rating}")
|
|
172
170
|
|
|
173
171
|
# Track best response based on rating
|
|
174
|
-
if evaluation_result.rating
|
|
172
|
+
if QUALITY_RATING_VALUES[evaluation_result.rating] > QUALITY_RATING_VALUES[best_rating]:
|
|
175
173
|
best_rating = evaluation_result.rating
|
|
176
174
|
best_response = response
|
|
177
175
|
logger.debug(f"New best response (rating: {best_rating})")
|
|
@@ -183,14 +181,17 @@ class EvaluatorOptimizerAgent(BaseAgent):
|
|
|
183
181
|
best_response = response
|
|
184
182
|
break
|
|
185
183
|
|
|
186
|
-
if
|
|
184
|
+
if (
|
|
185
|
+
QUALITY_RATING_VALUES[evaluation_result.rating]
|
|
186
|
+
>= QUALITY_RATING_VALUES[self.min_rating]
|
|
187
|
+
):
|
|
187
188
|
logger.debug(f"Acceptable quality reached ({evaluation_result.rating})")
|
|
188
189
|
break
|
|
189
190
|
|
|
190
191
|
# Generate refined response
|
|
191
192
|
refinement_prompt = self._build_refinement_prompt(
|
|
192
193
|
request=request,
|
|
193
|
-
response=response.
|
|
194
|
+
response=response.last_text(), ## only if there is no history?
|
|
194
195
|
feedback=evaluation_result,
|
|
195
196
|
iteration=refinement_count,
|
|
196
197
|
)
|
|
@@ -270,48 +271,21 @@ class EvaluatorOptimizerAgent(BaseAgent):
|
|
|
270
271
|
return f"""
|
|
271
272
|
You are an expert evaluator for content quality. Your task is to evaluate a response against the user's original request.
|
|
272
273
|
|
|
273
|
-
Evaluate the response for iteration {iteration + 1} and provide
|
|
274
|
+
Evaluate the response for iteration {iteration + 1} and provide feedback on its quality and areas for improvement.
|
|
274
275
|
|
|
276
|
+
```
|
|
275
277
|
<fastagent:data>
|
|
276
|
-
<fastagent:request>
|
|
278
|
+
<fastagent:request>
|
|
277
279
|
{request}
|
|
278
|
-
</fastagent:request>
|
|
280
|
+
</fastagent:request>
|
|
279
281
|
|
|
280
|
-
<fastagent:response>
|
|
282
|
+
<fastagent:response>
|
|
281
283
|
{response}
|
|
282
|
-
</fastagent:response>
|
|
284
|
+
</fastagent:response>
|
|
283
285
|
</fastagent:data>
|
|
284
286
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
{{
|
|
289
|
-
"rating": "RATING",
|
|
290
|
-
"feedback": "DETAILED FEEDBACK",
|
|
291
|
-
"needs_improvement": BOOLEAN,
|
|
292
|
-
"focus_areas": ["FOCUS_AREA_1", "FOCUS_AREA_2", "FOCUS_AREA_3"]
|
|
293
|
-
}}
|
|
294
|
-
|
|
295
|
-
Where:
|
|
296
|
-
- RATING: Must be one of: "EXCELLENT", "GOOD", "FAIR", or "POOR"
|
|
297
|
-
- EXCELLENT: No improvements needed
|
|
298
|
-
- GOOD: Only minor improvements possible
|
|
299
|
-
- FAIR: Several improvements needed
|
|
300
|
-
- POOR: Major improvements needed
|
|
301
|
-
- DETAILED FEEDBACK: Specific, actionable feedback (as a single string)
|
|
302
|
-
- BOOLEAN: true or false (lowercase, no quotes) indicating if further improvement is needed
|
|
303
|
-
- FOCUS_AREAS: Array of 1-3 specific areas to focus on (empty array if no improvement needed)
|
|
304
|
-
|
|
305
|
-
Example of valid response (DO NOT include the triple backticks in your response):
|
|
306
|
-
{{
|
|
307
|
-
"rating": "GOOD",
|
|
308
|
-
"feedback": "The response is clear but could use more supporting evidence.",
|
|
309
|
-
"needs_improvement": true,
|
|
310
|
-
"focus_areas": ["Add more examples", "Include data points"]
|
|
311
|
-
}}
|
|
312
|
-
|
|
313
|
-
IMPORTANT: Your response should be ONLY the JSON object without any code fences, explanations, or other text.
|
|
314
|
-
</fastagent:instruction>
|
|
287
|
+
```
|
|
288
|
+
|
|
315
289
|
"""
|
|
316
290
|
|
|
317
291
|
def _build_refinement_prompt(
|
|
@@ -333,28 +307,27 @@ IMPORTANT: Your response should be ONLY the JSON object without any code fences,
|
|
|
333
307
|
Returns:
|
|
334
308
|
Formatted refinement prompt
|
|
335
309
|
"""
|
|
336
|
-
|
|
310
|
+
|
|
311
|
+
# Format focus areas as bulleted list with each item on a separate line
|
|
312
|
+
if feedback.focus_areas:
|
|
313
|
+
focus_areas = "\n".join(f" * {area}" for area in feedback.focus_areas)
|
|
314
|
+
else:
|
|
315
|
+
focus_areas = "None specified"
|
|
337
316
|
|
|
338
317
|
return f"""
|
|
339
|
-
You are tasked with improving
|
|
318
|
+
You are tasked with improving your previous response based on expert feedback. This is iteration {iteration + 1} of the refinement process.
|
|
340
319
|
|
|
341
320
|
Your goal is to address all feedback points while maintaining accuracy and relevance to the original request.
|
|
342
321
|
|
|
343
|
-
|
|
344
|
-
<fastagent:request>
|
|
345
|
-
{request}
|
|
346
|
-
</fastagent:request>
|
|
347
|
-
|
|
348
|
-
<fastagent:previous-response>
|
|
349
|
-
{response}
|
|
350
|
-
</fastagent:previous-response>
|
|
322
|
+
```
|
|
351
323
|
|
|
352
324
|
<fastagent:feedback>
|
|
353
|
-
<rating>{feedback.rating}</rating>
|
|
354
|
-
<details>{feedback.feedback}</details>
|
|
355
|
-
<focus-areas>
|
|
325
|
+
<rating>{feedback.rating.name}</rating>
|
|
326
|
+
<details>{feedback.feedback}</details>
|
|
327
|
+
<focus-areas>
|
|
328
|
+
{focus_areas}
|
|
329
|
+
</focus-areas>
|
|
356
330
|
</fastagent:feedback>
|
|
357
|
-
</fastagent:data>
|
|
358
331
|
|
|
359
332
|
<fastagent:instruction>
|
|
360
333
|
Create an improved version of the response that:
|
|
@@ -365,4 +338,7 @@ Create an improved version of the response that:
|
|
|
365
338
|
|
|
366
339
|
Provide your complete improved response without explanations or commentary.
|
|
367
340
|
</fastagent:instruction>
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
|
|
368
344
|
"""
|
{fast_agent_mcp-0.2.44 → fast_agent_mcp-0.2.46}/src/mcp_agent/agents/workflow/router_agent.py
RENAMED
|
@@ -39,7 +39,7 @@ Follow these guidelines:
|
|
|
39
39
|
"""
|
|
40
40
|
|
|
41
41
|
# Default routing instruction with placeholders for context (AgentCard JSON)
|
|
42
|
-
|
|
42
|
+
ROUTING_AGENT_INSTRUCTION = """
|
|
43
43
|
Select from the following agents to handle the request:
|
|
44
44
|
<fastagent:agents>
|
|
45
45
|
[
|
|
@@ -100,7 +100,7 @@ class RouterAgent(BaseAgent):
|
|
|
100
100
|
self.routing_instruction = routing_instruction
|
|
101
101
|
self.agent_map = {agent.name: agent for agent in agents}
|
|
102
102
|
|
|
103
|
-
# Set up base router request parameters
|
|
103
|
+
# Set up base router request parameters with just the base instruction for now
|
|
104
104
|
base_params = {"systemPrompt": ROUTING_SYSTEM_INSTRUCTION, "use_history": False}
|
|
105
105
|
|
|
106
106
|
if default_request_params:
|
|
@@ -120,6 +120,18 @@ class RouterAgent(BaseAgent):
|
|
|
120
120
|
if not getattr(agent, "initialized", False):
|
|
121
121
|
await agent.initialize()
|
|
122
122
|
|
|
123
|
+
complete_routing_instruction = await self._generate_routing_instruction(
|
|
124
|
+
self.agents, self.routing_instruction
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
# Update the system prompt to include the routing instruction with agent cards
|
|
128
|
+
combined_system_prompt = (
|
|
129
|
+
ROUTING_SYSTEM_INSTRUCTION + "\n\n" + complete_routing_instruction
|
|
130
|
+
)
|
|
131
|
+
self._default_request_params.systemPrompt = combined_system_prompt
|
|
132
|
+
self.instruction = combined_system_prompt
|
|
133
|
+
self._routing_instruction_generated = True
|
|
134
|
+
|
|
123
135
|
self.initialized = True
|
|
124
136
|
|
|
125
137
|
async def shutdown(self) -> None:
|
|
@@ -133,6 +145,36 @@ class RouterAgent(BaseAgent):
|
|
|
133
145
|
except Exception as e:
|
|
134
146
|
logger.warning(f"Error shutting down agent: {str(e)}")
|
|
135
147
|
|
|
148
|
+
@staticmethod
|
|
149
|
+
async def _generate_routing_instruction(
|
|
150
|
+
agents: List[Agent], routing_instruction: Optional[str] = None
|
|
151
|
+
) -> str:
|
|
152
|
+
"""
|
|
153
|
+
Generate the complete routing instruction with agent cards.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
agents: List of agents to include in routing instruction
|
|
157
|
+
routing_instruction: Optional custom routing instruction template
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
Complete routing instruction with agent cards formatted
|
|
161
|
+
"""
|
|
162
|
+
# Generate agent descriptions
|
|
163
|
+
agent_descriptions = []
|
|
164
|
+
for agent in agents:
|
|
165
|
+
agent_card: AgentCard = await agent.agent_card()
|
|
166
|
+
agent_descriptions.append(
|
|
167
|
+
agent_card.model_dump_json(
|
|
168
|
+
include={"name", "description", "skills"}, exclude_none=True
|
|
169
|
+
)
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
context = ",\n".join(agent_descriptions)
|
|
173
|
+
|
|
174
|
+
# Format the routing instruction
|
|
175
|
+
instruction_template = routing_instruction or ROUTING_AGENT_INSTRUCTION
|
|
176
|
+
return instruction_template.format(context=context)
|
|
177
|
+
|
|
136
178
|
async def attach_llm(
|
|
137
179
|
self,
|
|
138
180
|
llm_factory: type[AugmentedLLMProtocol] | Callable[..., AugmentedLLMProtocol],
|
|
@@ -227,27 +269,10 @@ class RouterAgent(BaseAgent):
|
|
|
227
269
|
agent=self.agents[0].name, confidence="high", reasoning="Only one agent available"
|
|
228
270
|
), None
|
|
229
271
|
|
|
230
|
-
# Generate agent descriptions for the context
|
|
231
|
-
agent_descriptions = []
|
|
232
|
-
for agent in self.agents:
|
|
233
|
-
agent_card: AgentCard = await agent.agent_card()
|
|
234
|
-
agent_descriptions.append(
|
|
235
|
-
agent_card.model_dump_json(
|
|
236
|
-
include={"name", "description", "skills"}, exclude_none=True
|
|
237
|
-
)
|
|
238
|
-
)
|
|
239
|
-
|
|
240
|
-
context = ",\n".join(agent_descriptions)
|
|
241
|
-
|
|
242
|
-
# Format the routing prompt
|
|
243
|
-
routing_instruction = self.routing_instruction or DEFAULT_ROUTING_INSTRUCTION
|
|
244
|
-
routing_instruction = routing_instruction.format(context=context)
|
|
245
|
-
|
|
246
272
|
assert self._llm
|
|
247
|
-
|
|
248
|
-
mutated.add_text(routing_instruction)
|
|
273
|
+
# No need to add routing instruction here - it's already in the system prompt
|
|
249
274
|
response, _ = await self._llm.structured(
|
|
250
|
-
[
|
|
275
|
+
[message],
|
|
251
276
|
RoutingResponse,
|
|
252
277
|
self._default_request_params,
|
|
253
278
|
)
|
|
@@ -259,8 +259,8 @@ def run_async_agent(
|
|
|
259
259
|
def go(
|
|
260
260
|
ctx: typer.Context,
|
|
261
261
|
name: str = typer.Option("FastAgent CLI", "--name", help="Name for the agent"),
|
|
262
|
-
instruction: str = typer.Option(
|
|
263
|
-
|
|
262
|
+
instruction: Optional[str] = typer.Option(
|
|
263
|
+
None, "--instruction", "-i", help="Path to file or URL containing instruction for the agent"
|
|
264
264
|
),
|
|
265
265
|
config_path: Optional[str] = typer.Option(
|
|
266
266
|
None, "--config-path", "-c", help="Path to config file"
|
|
@@ -297,7 +297,8 @@ def go(
|
|
|
297
297
|
Run an interactive agent directly from the command line.
|
|
298
298
|
|
|
299
299
|
Examples:
|
|
300
|
-
fast-agent go --model=haiku --instruction
|
|
300
|
+
fast-agent go --model=haiku --instruction=./instruction.md --servers=fetch,filesystem
|
|
301
|
+
fast-agent go --instruction=https://raw.githubusercontent.com/user/repo/prompt.md
|
|
301
302
|
fast-agent go --message="What is the weather today?" --model=haiku
|
|
302
303
|
fast-agent go --prompt-file=my-prompt.txt --model=haiku
|
|
303
304
|
fast-agent go --url=http://localhost:8001/mcp,http://api.example.com/sse
|
|
@@ -335,9 +336,29 @@ def go(
|
|
|
335
336
|
if stdio:
|
|
336
337
|
stdio_commands.append(stdio)
|
|
337
338
|
|
|
339
|
+
# Resolve instruction from file/URL or use default
|
|
340
|
+
resolved_instruction = "You are a helpful AI Agent." # Default
|
|
341
|
+
if instruction:
|
|
342
|
+
try:
|
|
343
|
+
from pathlib import Path
|
|
344
|
+
|
|
345
|
+
from pydantic import AnyUrl
|
|
346
|
+
|
|
347
|
+
from mcp_agent.core.direct_decorators import _resolve_instruction
|
|
348
|
+
|
|
349
|
+
# Check if it's a URL
|
|
350
|
+
if instruction.startswith(("http://", "https://")):
|
|
351
|
+
resolved_instruction = _resolve_instruction(AnyUrl(instruction))
|
|
352
|
+
else:
|
|
353
|
+
# Treat as file path
|
|
354
|
+
resolved_instruction = _resolve_instruction(Path(instruction))
|
|
355
|
+
except Exception as e:
|
|
356
|
+
typer.echo(f"Error loading instruction from {instruction}: {e}", err=True)
|
|
357
|
+
raise typer.Exit(1)
|
|
358
|
+
|
|
338
359
|
run_async_agent(
|
|
339
360
|
name=name,
|
|
340
|
-
instruction=
|
|
361
|
+
instruction=resolved_instruction,
|
|
341
362
|
config_path=config_path,
|
|
342
363
|
servers=servers,
|
|
343
364
|
urls=urls,
|
|
@@ -10,7 +10,11 @@ from typing import TYPE_CHECKING, Any, Optional, Union
|
|
|
10
10
|
from mcp import ServerSession
|
|
11
11
|
from opentelemetry import trace
|
|
12
12
|
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
|
13
|
+
|
|
14
|
+
# from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
|
|
13
15
|
from opentelemetry.instrumentation.google_genai import GoogleGenAiSdkInstrumentor
|
|
16
|
+
|
|
17
|
+
# from opentelemetry.instrumentation.mcp import McpInstrumentor
|
|
14
18
|
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
|
|
15
19
|
from opentelemetry.propagate import set_global_textmap
|
|
16
20
|
from opentelemetry.sdk.resources import Resource
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Core components and utilities for MCP Agent.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from .mcp_content import (
|
|
6
|
+
Assistant,
|
|
7
|
+
MCPContentType,
|
|
8
|
+
MCPFile,
|
|
9
|
+
MCPImage,
|
|
10
|
+
MCPPrompt,
|
|
11
|
+
MCPText,
|
|
12
|
+
User,
|
|
13
|
+
create_message,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
# MCP content creation functions
|
|
18
|
+
"MCPText",
|
|
19
|
+
"MCPImage",
|
|
20
|
+
"MCPFile",
|
|
21
|
+
"MCPPrompt",
|
|
22
|
+
"User",
|
|
23
|
+
"Assistant",
|
|
24
|
+
"create_message",
|
|
25
|
+
"MCPContentType",
|
|
26
|
+
]
|