fast-agent-mcp 0.3.7__tar.gz → 0.3.8__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.3.7 → fast_agent_mcp-0.3.8}/PKG-INFO +2 -2
- fast_agent_mcp-0.3.8/examples/a2a/agent_executor.py +93 -0
- fast_agent_mcp-0.3.8/examples/a2a/server.py +53 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/fastapi/fastapi-advanced.py +1 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/pyproject.toml +2 -2
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/llm_agent.py +6 -8
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/llm_decorator.py +2 -7
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/mcp_agent.py +2 -3
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/auth.py +14 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/logging/listeners.py +2 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/interfaces.py +2 -2
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/model_database.py +7 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/model_factory.py +2 -3
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/bedrock/llm_bedrock.py +1 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/google/llm_google_native.py +1 -3
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_azure.py +1 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_tensorzero_openai.py +1 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/request_params.py +1 -1
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/.gitignore +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/LICENSE +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/README.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/bedrock/fast-agent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/custom-agents/agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/fastapi/fastapi-simple.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/fastapi/pyproject.toml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/fastapi/readme.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/vision-examples/cat.png +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/vision-examples/example1.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/vision-examples/example2.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/vision-examples/example3.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/new-api/display_check.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/new-api/simple_llm.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/new-api/simple_llm_advanced.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/new-api/simple_mcp.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/otel/agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/otel/agent2.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/setup/.gitignore +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/setup/agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/setup/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/setup/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/setup/pyproject.toml.tmpl +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/hatch_build.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/agent_types.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/tool_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/evaluator_optimizer.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/iterative_planner.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/agents/workflow/router_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/__main__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/check_config.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/go.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/quickstart.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/server_helpers.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/setup.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/commands/url_parser.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/constants.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/main.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/config.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/constants.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/context.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/agent_app.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/core_app.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/direct_decorators.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/executor/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/executor/executor.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/logging/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/logging/events.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/logging/logger.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/logging/transport.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/event_progress.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/history/history_exporter.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/human_input/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/human_input/elicitation_handler.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/human_input/elicitation_state.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/human_input/form_fields.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/human_input/simple_form.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/fastagent_llm.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/internal/passthrough.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/internal/playback.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/internal/silent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/internal/slow.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/memory.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/model_info.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/anthropic/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/anthropic/llm_anthropic.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/bedrock/bedrock_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/google/google_converter.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_aliyun.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_deepseek.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_generic.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_google_oai.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_groq.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_openai.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_openrouter.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_xai.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/multipart_converter_openai.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/openai_multipart.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/openai_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider_key_manager.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider_types.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/usage_tracking.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/common.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/elicitation_factory.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/elicitation_handlers.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/helpers/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/helpers/server_config_helpers.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/hf_auth.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/interfaces.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/mcp_agent_client_session.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/mcp_aggregator.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/mcp_connection_manager.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/mcp_content.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/oauth_client.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompt.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompt_message_extended.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompt_serialization.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/prompt_load.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/prompt_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/server/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/server/agent_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/ui_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp/ui_mixin.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/mcp_server_registry.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/py.typed +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/mcp_server/.python-version +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/setup/.gitignore +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/setup/agent.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/setup/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/setup/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/resources/setup/pyproject.toml.tmpl +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/tools/elicitation.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/types/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/types/llm_stop_reason.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/__init__.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/console.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/console_display.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/elicitation_form.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/elicitation_style.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/enhanced_prompt.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/interactive_prompt.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/mcp_ui_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/mermaid_utils.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/progress_display.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/rich_progress.py +0 -0
- {fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/ui/usage_display.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fast-agent-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
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
|
|
@@ -209,7 +209,7 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
209
209
|
Classifier: Operating System :: OS Independent
|
|
210
210
|
Classifier: Programming Language :: Python :: 3
|
|
211
211
|
Requires-Python: >=3.13.5
|
|
212
|
-
Requires-Dist: a2a-sdk>=0.3.
|
|
212
|
+
Requires-Dist: a2a-sdk>=0.3.6
|
|
213
213
|
Requires-Dist: aiohttp>=3.11.13
|
|
214
214
|
Requires-Dist: anthropic>=0.68.0
|
|
215
215
|
Requires-Dist: azure-identity>=1.14.0
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from contextlib import AsyncExitStack
|
|
4
|
+
from typing import TYPE_CHECKING, cast
|
|
5
|
+
|
|
6
|
+
from a2a.server.agent_execution import AgentExecutor, RequestContext
|
|
7
|
+
from a2a.utils import new_agent_text_message
|
|
8
|
+
|
|
9
|
+
from fast_agent import FastAgent
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from a2a.server.events import EventQueue
|
|
13
|
+
from a2a.types import AgentCard
|
|
14
|
+
|
|
15
|
+
from fast_agent.core.agent_app import AgentApp
|
|
16
|
+
from fast_agent.interfaces import AgentProtocol
|
|
17
|
+
|
|
18
|
+
DEFAULT_AGENT_NAME = "helper"
|
|
19
|
+
|
|
20
|
+
fast = FastAgent(
|
|
21
|
+
"A2A FastAgent Demo",
|
|
22
|
+
parse_cli_args=False,
|
|
23
|
+
quiet=True,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@fast.agent(
|
|
28
|
+
name=DEFAULT_AGENT_NAME,
|
|
29
|
+
instruction="You are a helpful AI agent answering incoming A2A messages.",
|
|
30
|
+
default=True,
|
|
31
|
+
)
|
|
32
|
+
async def helper() -> None:
|
|
33
|
+
"""Default agent registered with FastAgent."""
|
|
34
|
+
pass
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class FastAgentExecutor(AgentExecutor):
|
|
38
|
+
"""AgentExecutor that proxies requests to a FastAgent runtime."""
|
|
39
|
+
|
|
40
|
+
def __init__(self, default_agent_name: str = DEFAULT_AGENT_NAME) -> None:
|
|
41
|
+
self._stack = AsyncExitStack()
|
|
42
|
+
self._agents: AgentApp | None = None
|
|
43
|
+
self._default_agent_name = default_agent_name
|
|
44
|
+
|
|
45
|
+
async def _agents_app(self) -> AgentApp:
|
|
46
|
+
"""Ensure the FastAgent runtime is running and return the AgentApp."""
|
|
47
|
+
if self._agents is None:
|
|
48
|
+
self._agents = await self._stack.enter_async_context(fast.run())
|
|
49
|
+
return self._agents
|
|
50
|
+
|
|
51
|
+
async def _agent(self, agent_name: str | None = None) -> AgentProtocol:
|
|
52
|
+
"""Return the requested agent or fall back to the default agent."""
|
|
53
|
+
app = await self._agents_app()
|
|
54
|
+
agents_map = cast("dict[str, AgentProtocol]", getattr(app, "_agents"))
|
|
55
|
+
|
|
56
|
+
if agent_name and agent_name in agents_map:
|
|
57
|
+
return agents_map[agent_name]
|
|
58
|
+
|
|
59
|
+
if self._default_agent_name and self._default_agent_name in agents_map:
|
|
60
|
+
return agents_map[self._default_agent_name]
|
|
61
|
+
|
|
62
|
+
for candidate in agents_map.values():
|
|
63
|
+
config = getattr(candidate, "config", None)
|
|
64
|
+
if config is not None and getattr(config, "default", False):
|
|
65
|
+
return candidate
|
|
66
|
+
|
|
67
|
+
return next(iter(agents_map.values()))
|
|
68
|
+
|
|
69
|
+
async def execute(
|
|
70
|
+
self,
|
|
71
|
+
context: RequestContext,
|
|
72
|
+
event_queue: EventQueue,
|
|
73
|
+
) -> None:
|
|
74
|
+
message = context.get_user_input().strip()
|
|
75
|
+
if not message:
|
|
76
|
+
return
|
|
77
|
+
|
|
78
|
+
agent = await self._agent()
|
|
79
|
+
response = await agent.send(message)
|
|
80
|
+
await event_queue.enqueue_event(new_agent_text_message(response))
|
|
81
|
+
|
|
82
|
+
async def cancel(self, context: RequestContext, event_queue: EventQueue) -> None:
|
|
83
|
+
raise Exception("cancel not supported")
|
|
84
|
+
|
|
85
|
+
async def agent_card(self, agent_name: str | None = None) -> AgentCard:
|
|
86
|
+
"""Return the FastAgent-provided AgentCard for the given agent."""
|
|
87
|
+
agent = await self._agent(agent_name)
|
|
88
|
+
return await agent.agent_card()
|
|
89
|
+
|
|
90
|
+
async def shutdown(self) -> None:
|
|
91
|
+
"""Close the FastAgent runtime."""
|
|
92
|
+
await self._stack.aclose()
|
|
93
|
+
self._agents = None
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from a2a.server.apps import A2AStarletteApplication
|
|
4
|
+
from a2a.server.request_handlers import DefaultRequestHandler
|
|
5
|
+
from a2a.server.tasks import InMemoryTaskStore
|
|
6
|
+
from a2a.types import AgentCard, TransportProtocol
|
|
7
|
+
from agent_executor import FastAgentExecutor
|
|
8
|
+
from uvicorn import Config, Server
|
|
9
|
+
|
|
10
|
+
HOST = "0.0.0.0"
|
|
11
|
+
PORT = 9999
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _with_server_url(card: AgentCard) -> AgentCard:
|
|
15
|
+
"""Inject JSON-RPC transport details while preserving FastAgent metadata."""
|
|
16
|
+
base_url = f"http://localhost:{PORT}/"
|
|
17
|
+
return card.model_copy(
|
|
18
|
+
update={
|
|
19
|
+
"url": base_url,
|
|
20
|
+
"preferred_transport": TransportProtocol.jsonrpc,
|
|
21
|
+
"additional_interfaces": [],
|
|
22
|
+
"supports_authenticated_extended_card": False,
|
|
23
|
+
"default_input_modes": ["text"],
|
|
24
|
+
"default_output_modes": ["text"],
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
async def main() -> None:
|
|
30
|
+
executor = FastAgentExecutor()
|
|
31
|
+
agent_card = _with_server_url(await executor.agent_card())
|
|
32
|
+
|
|
33
|
+
request_handler = DefaultRequestHandler(
|
|
34
|
+
agent_executor=executor,
|
|
35
|
+
task_store=InMemoryTaskStore(),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
server = A2AStarletteApplication(
|
|
39
|
+
agent_card=agent_card,
|
|
40
|
+
http_handler=request_handler,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
config = Config(server.build(), host=HOST, port=PORT)
|
|
44
|
+
uvicorn_server = Server(config)
|
|
45
|
+
|
|
46
|
+
try:
|
|
47
|
+
await uvicorn_server.serve()
|
|
48
|
+
finally:
|
|
49
|
+
await executor.shutdown()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
asyncio.run(main())
|
|
@@ -2,11 +2,11 @@ from contextlib import asynccontextmanager
|
|
|
2
2
|
|
|
3
3
|
from fastapi import Body, FastAPI, HTTPException
|
|
4
4
|
|
|
5
|
+
from fast_agent import PromptMessageExtended
|
|
5
6
|
from fast_agent.agents import McpAgent
|
|
6
7
|
from fast_agent.agents.agent_types import AgentConfig
|
|
7
8
|
from fast_agent.core import Core
|
|
8
9
|
from fast_agent.core.direct_factory import get_model_factory
|
|
9
|
-
from fast_agent.mcp import PromptMessageExtended
|
|
10
10
|
|
|
11
11
|
core = Core(name="fast-agent core")
|
|
12
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fast-agent-mcp"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.8"
|
|
4
4
|
description = "Define, Prompt and Test MCP enabled Agents and Workflows"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -36,7 +36,7 @@ dependencies = [
|
|
|
36
36
|
"opentelemetry-instrumentation-google-genai>=0.3b0",
|
|
37
37
|
"tensorzero>=2025.7.5",
|
|
38
38
|
"deprecated>=1.2.18",
|
|
39
|
-
"a2a-sdk>=0.3.
|
|
39
|
+
"a2a-sdk>=0.3.6",
|
|
40
40
|
"email-validator>=2.2.0",
|
|
41
41
|
"pyperclip>=1.9.0",
|
|
42
42
|
"keyring>=24.3.1",
|
|
@@ -45,7 +45,7 @@ class LlmAgent(LlmDecorator):
|
|
|
45
45
|
|
|
46
46
|
This class provides LLM-specific functionality including UI display methods,
|
|
47
47
|
tool call tracking, and chat interaction patterns while delegating core
|
|
48
|
-
LLM operations to the attached
|
|
48
|
+
LLM operations to the attached FastAgentLLMProtocol.
|
|
49
49
|
"""
|
|
50
50
|
|
|
51
51
|
def __init__(
|
|
@@ -134,7 +134,9 @@ class LlmAgent(LlmDecorator):
|
|
|
134
134
|
|
|
135
135
|
if additional_message is not None:
|
|
136
136
|
additional_segments.append(
|
|
137
|
-
additional_message
|
|
137
|
+
additional_message
|
|
138
|
+
if isinstance(additional_message, Text)
|
|
139
|
+
else Text(str(additional_message))
|
|
138
140
|
)
|
|
139
141
|
|
|
140
142
|
additional_message_text = None
|
|
@@ -197,9 +199,7 @@ class LlmAgent(LlmDecorator):
|
|
|
197
199
|
# TODO - manage error catch, recovery, pause
|
|
198
200
|
result, summary = await self._generate_with_summary(messages, request_params, tools)
|
|
199
201
|
|
|
200
|
-
summary_text = (
|
|
201
|
-
Text(f"\n\n{summary.message}", style="dim red italic") if summary else None
|
|
202
|
-
)
|
|
202
|
+
summary_text = Text(f"\n\n{summary.message}", style="dim red italic") if summary else None
|
|
203
203
|
|
|
204
204
|
await self.show_assistant_message(result, additional_message=summary_text)
|
|
205
205
|
return result
|
|
@@ -216,9 +216,7 @@ class LlmAgent(LlmDecorator):
|
|
|
216
216
|
(result, message), summary = await self._structured_with_summary(
|
|
217
217
|
messages, model, request_params
|
|
218
218
|
)
|
|
219
|
-
summary_text = (
|
|
220
|
-
Text(f"\n\n{summary.message}", style="dim red italic") if summary else None
|
|
221
|
-
)
|
|
219
|
+
summary_text = Text(f"\n\n{summary.message}", style="dim red italic") if summary else None
|
|
222
220
|
await self.show_assistant_message(message=message, additional_message=summary_text)
|
|
223
221
|
return result, message
|
|
224
222
|
|
|
@@ -57,7 +57,6 @@ from fast_agent.types import PromptMessageExtended, RequestParams
|
|
|
57
57
|
# Define a TypeVar for models
|
|
58
58
|
ModelT = TypeVar("ModelT", bound=BaseModel)
|
|
59
59
|
|
|
60
|
-
# Define a TypeVar for AugmentedLLM and its subclasses
|
|
61
60
|
LLM = TypeVar("LLM", bound=FastAgentLLMProtocol)
|
|
62
61
|
|
|
63
62
|
|
|
@@ -533,9 +532,7 @@ class LlmDecorator(AgentProtocol):
|
|
|
533
532
|
if isinstance(block, EmbeddedResource):
|
|
534
533
|
resource = getattr(block, "resource", None)
|
|
535
534
|
mime = getattr(resource, "mimeType", None)
|
|
536
|
-
if isinstance(resource, TextResourceContents) or (
|
|
537
|
-
mime and is_text_mime_type(mime)
|
|
538
|
-
):
|
|
535
|
+
if isinstance(resource, TextResourceContents) or (mime and is_text_mime_type(mime)):
|
|
539
536
|
return mime or "text/plain", "text"
|
|
540
537
|
if mime and mime.startswith("image/"):
|
|
541
538
|
return mime, "vision"
|
|
@@ -593,9 +590,7 @@ class LlmDecorator(AgentProtocol):
|
|
|
593
590
|
entries.append(metadata_text)
|
|
594
591
|
return entries
|
|
595
592
|
|
|
596
|
-
def _build_removed_summary(
|
|
597
|
-
self, removed: List[_RemovedBlock]
|
|
598
|
-
) -> RemovedContentSummary | None:
|
|
593
|
+
def _build_removed_summary(self, removed: List[_RemovedBlock]) -> RemovedContentSummary | None:
|
|
599
594
|
if not removed:
|
|
600
595
|
return None
|
|
601
596
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Base Agent class that implements the AgentProtocol interface.
|
|
3
3
|
|
|
4
4
|
This class provides default implementations of the standard agent methods
|
|
5
|
-
and delegates operations to an attached
|
|
5
|
+
and delegates operations to an attached FastAgentLLMProtocol instance.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import asyncio
|
|
@@ -52,7 +52,6 @@ from fast_agent.types import PromptMessageExtended, RequestParams
|
|
|
52
52
|
# Define a TypeVar for models
|
|
53
53
|
ModelT = TypeVar("ModelT", bound=BaseModel)
|
|
54
54
|
|
|
55
|
-
# Define a TypeVar for AugmentedLLM and its subclasses
|
|
56
55
|
LLM = TypeVar("LLM", bound=FastAgentLLMProtocol)
|
|
57
56
|
|
|
58
57
|
if TYPE_CHECKING:
|
|
@@ -67,7 +66,7 @@ class McpAgent(ABC, ToolAgent):
|
|
|
67
66
|
A base Agent class that implements the AgentProtocol interface.
|
|
68
67
|
|
|
69
68
|
This class provides default implementations of the standard agent methods
|
|
70
|
-
and delegates LLM operations to an attached
|
|
69
|
+
and delegates LLM operations to an attached FastAgentLLMProtocol instance.
|
|
71
70
|
"""
|
|
72
71
|
|
|
73
72
|
def __init__(
|
|
@@ -293,7 +293,9 @@ def main(
|
|
|
293
293
|
|
|
294
294
|
@app.command()
|
|
295
295
|
def login(
|
|
296
|
-
target: str = typer.Argument(
|
|
296
|
+
target: Optional[str] = typer.Argument(
|
|
297
|
+
None, help="Server name (from config) or identity (base URL)"
|
|
298
|
+
),
|
|
297
299
|
transport: Optional[str] = typer.Option(
|
|
298
300
|
None, "--transport", help="Transport for identity mode: http or sse"
|
|
299
301
|
),
|
|
@@ -311,6 +313,17 @@ def login(
|
|
|
311
313
|
cfg = None
|
|
312
314
|
resolved_transport = None
|
|
313
315
|
|
|
316
|
+
if target is None or not target.strip():
|
|
317
|
+
typer.echo("Provide a server name or identity URL to log in.")
|
|
318
|
+
typer.echo(
|
|
319
|
+
"Example: `fast-agent auth login my-server` "
|
|
320
|
+
"or `fast-agent auth login https://example.com`."
|
|
321
|
+
)
|
|
322
|
+
typer.echo("Run `fast-agent auth login --help` for more details.")
|
|
323
|
+
raise typer.Exit(1)
|
|
324
|
+
|
|
325
|
+
target = target.strip()
|
|
326
|
+
|
|
314
327
|
if "://" in target:
|
|
315
328
|
# Identity mode
|
|
316
329
|
base = _derive_base_server_url(target)
|
|
@@ -55,7 +55,8 @@ def convert_log_event(event: Event) -> "ProgressEvent | None":
|
|
|
55
55
|
if progress_message: # Only override if message is non-empty
|
|
56
56
|
details = progress_message
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
# TODO: there must be a better way :D?!
|
|
59
|
+
elif "llm" in namespace:
|
|
59
60
|
model = event_data.get("model", "")
|
|
60
61
|
|
|
61
62
|
# For all augmented_llm events, put model info in details column
|
|
@@ -47,7 +47,7 @@ ModelT = TypeVar("ModelT", bound=BaseModel)
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
class LLMFactoryProtocol(Protocol):
|
|
50
|
-
"""Protocol for LLM factory functions that create
|
|
50
|
+
"""Protocol for LLM factory functions that create FastAgentLLM instances."""
|
|
51
51
|
|
|
52
52
|
def __call__(self, agent: "LlmAgentProtocol", **kwargs: Any) -> "FastAgentLLMProtocol": ...
|
|
53
53
|
|
|
@@ -59,7 +59,7 @@ class ModelFactoryFunctionProtocol(Protocol):
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
class FastAgentLLMProtocol(Protocol):
|
|
62
|
-
"""Protocol defining the interface for
|
|
62
|
+
"""Protocol defining the interface for LLMs"""
|
|
63
63
|
|
|
64
64
|
async def structured(
|
|
65
65
|
self,
|
|
@@ -164,7 +164,11 @@ class ModelDatabase:
|
|
|
164
164
|
)
|
|
165
165
|
|
|
166
166
|
# FIXME: xAI has not documented the max output tokens for Grok 4. Using Grok 3 as a placeholder. Will need to update when available (if ever)
|
|
167
|
-
GROK_4 = ModelParameters(context_window=256000, max_output_tokens=16385, tokenizes=
|
|
167
|
+
GROK_4 = ModelParameters(context_window=256000, max_output_tokens=16385, tokenizes=TEXT_ONLY)
|
|
168
|
+
|
|
169
|
+
GROK_4_VLM = ModelParameters(
|
|
170
|
+
context_window=2000000, max_output_tokens=16385, tokenizes=XAI_VISION
|
|
171
|
+
)
|
|
168
172
|
|
|
169
173
|
# Source for Grok 3 max output: https://www.reddit.com/r/grok/comments/1j7209p/exploring_grok_3_beta_output_capacity_a_simple/
|
|
170
174
|
# xAI does not document Grok 3 max output tokens, using the above source as a reference.
|
|
@@ -240,6 +244,8 @@ class ModelDatabase:
|
|
|
240
244
|
"gemini-2.5-flash-preview-05-20": GEMINI_FLASH,
|
|
241
245
|
"gemini-2.5-pro-preview-05-06": GEMINI_PRO,
|
|
242
246
|
# xAI Grok Models
|
|
247
|
+
"grok-4-fast-reasoning": GROK_4_VLM,
|
|
248
|
+
"grok-4-fast-non-reasoning": GROK_4_VLM,
|
|
243
249
|
"grok-4": GROK_4,
|
|
244
250
|
"grok-4-0709": GROK_4,
|
|
245
251
|
"grok-3": GROK_3,
|
|
@@ -12,9 +12,6 @@ from fast_agent.llm.internal.slow import SlowLLM
|
|
|
12
12
|
from fast_agent.llm.provider_types import Provider
|
|
13
13
|
from fast_agent.types import RequestParams
|
|
14
14
|
|
|
15
|
-
# from fast_agent.workflows.llm.augmented_llm_deepseek import DeekSeekAugmentedLLM
|
|
16
|
-
|
|
17
|
-
|
|
18
15
|
# Type alias for LLM classes
|
|
19
16
|
LLMClass = Union[Type[PassthroughLLM], Type[PlaybackLLM], Type[SilentLLM], Type[SlowLLM], type]
|
|
20
17
|
|
|
@@ -123,6 +120,8 @@ class ModelFactory:
|
|
|
123
120
|
"kimi": "groq.moonshotai/kimi-k2-instruct-0905",
|
|
124
121
|
"gpt-oss": "groq.openai/gpt-oss-120b",
|
|
125
122
|
"gpt-oss-20b": "groq.openai/gpt-oss-20b",
|
|
123
|
+
"grok-4-fast": "xai.grok-4-fast-non-reasoning",
|
|
124
|
+
"grok-4-fast-reasoning": "xai.grok-4-fast-reasoning",
|
|
126
125
|
}
|
|
127
126
|
|
|
128
127
|
@staticmethod
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/bedrock/llm_bedrock.py
RENAMED
|
@@ -126,7 +126,7 @@ class ModelCapabilities:
|
|
|
126
126
|
|
|
127
127
|
class BedrockLLM(FastAgentLLM[BedrockMessageParam, BedrockMessage]):
|
|
128
128
|
"""
|
|
129
|
-
AWS Bedrock implementation of
|
|
129
|
+
AWS Bedrock implementation of FastAgentLLM using the Converse API.
|
|
130
130
|
Supports all Bedrock models including Nova, Claude, Meta, etc.
|
|
131
131
|
"""
|
|
132
132
|
|
|
@@ -36,10 +36,8 @@ GOOGLE_EXCLUDE_FIELDS = {
|
|
|
36
36
|
FastAgentLLM.PARAM_MESSAGES, # Handled by contents
|
|
37
37
|
FastAgentLLM.PARAM_MODEL, # Handled during client/call setup
|
|
38
38
|
FastAgentLLM.PARAM_SYSTEM_PROMPT, # Handled by system_instruction in config
|
|
39
|
-
|
|
40
|
-
FastAgentLLM.PARAM_USE_HISTORY, # Handled by AugmentedLLM base / this class's logic
|
|
39
|
+
FastAgentLLM.PARAM_USE_HISTORY, # Handled by FastAgentLLM base / this class's logic
|
|
41
40
|
FastAgentLLM.PARAM_MAX_ITERATIONS, # Handled by this class's loop
|
|
42
|
-
# Add any other OpenAI-specific params not applicable to google.genai
|
|
43
41
|
FastAgentLLM.PARAM_MCP_METADATA,
|
|
44
42
|
}.union(FastAgentLLM.BASE_EXCLUDE_FIELDS)
|
|
45
43
|
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/src/fast_agent/llm/provider/openai/llm_azure.py
RENAMED
|
@@ -23,7 +23,7 @@ DEFAULT_AZURE_API_VERSION = "2024-10-21"
|
|
|
23
23
|
|
|
24
24
|
class AzureOpenAILLM(OpenAILLM):
|
|
25
25
|
"""
|
|
26
|
-
Azure OpenAI implementation extending
|
|
26
|
+
Azure OpenAI implementation extending OpenAILLM.
|
|
27
27
|
Handles both API Key and DefaultAzureCredential authentication.
|
|
28
28
|
"""
|
|
29
29
|
|
|
@@ -26,7 +26,7 @@ class TensorZeroOpenAILLM(OpenAILLM):
|
|
|
26
26
|
self._t0_function_name = kwargs.get("model", "")
|
|
27
27
|
|
|
28
28
|
super().__init__(*args, provider=Provider.TENSORZERO, **kwargs)
|
|
29
|
-
self.logger.info("
|
|
29
|
+
self.logger.info("TensorZeroOpenAILLM initialized.")
|
|
30
30
|
|
|
31
31
|
def _initialize_default_params(self, kwargs: dict) -> RequestParams:
|
|
32
32
|
"""
|
|
@@ -11,7 +11,7 @@ from pydantic import Field
|
|
|
11
11
|
|
|
12
12
|
class RequestParams(CreateMessageRequestParams):
|
|
13
13
|
"""
|
|
14
|
-
Parameters to configure the
|
|
14
|
+
Parameters to configure the FastAgentLLM 'generate' requests.
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
messages: List[SamplingMessage] = Field(exclude=True, default=[])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/elicitation_forms_server.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/elicitation_game_server.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/elicitations/game_character_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/mcp-filtering/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/mcp-filtering/test_mcp_filtering.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/state-transfer/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/mcp/vision-examples/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.3.7 → fast_agent_mcp-0.3.8}/examples/tensorzero/tensorzero_config/tensorzero.toml
RENAMED
|
File without changes
|