fast-agent-mcp 0.2.57__tar.gz → 0.3.0__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.57 → fast_agent_mcp-0.3.0}/.gitignore +1 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/PKG-INFO +7 -7
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/README.md +1 -1
- fast_agent_mcp-0.3.0/examples/bedrock/fast-agent.config.yaml +24 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/custom-agents/agent.py +3 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/data-analysis/analysis-campaign.py +5 -4
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/data-analysis/analysis.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/elicitation_forms_server.py +25 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/forms_demo.py +3 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/game_character.py +2 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/game_character_handler.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/tool_call.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/mcp-filtering/test_mcp_filtering.py +27 -23
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/state-transfer/agent_one.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/mcp/state-transfer/agent_two.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/vision-examples/example1.py +2 -2
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/vision-examples/example2.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/vision-examples/example3.py +1 -1
- fast_agent_mcp-0.3.0/examples/new-api/display_check.py +25 -0
- fast_agent_mcp-0.3.0/examples/new-api/simple_llm.py +80 -0
- fast_agent_mcp-0.3.0/examples/new-api/simple_llm_advanced.py +110 -0
- fast_agent_mcp-0.3.0/examples/new-api/simple_mcp.py +27 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/otel/agent.py +3 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/otel/agent2.py +3 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/researcher/researcher-eval.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/researcher/researcher-imp.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/researcher/researcher.py +1 -1
- fast_agent_mcp-0.3.0/examples/setup/.gitignore +24 -0
- fast_agent_mcp-0.3.0/examples/setup/agent.py +18 -0
- fast_agent_mcp-0.3.0/examples/setup/fastagent.config.yaml +44 -0
- fast_agent_mcp-0.3.0/examples/setup/fastagent.secrets.yaml.example +38 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/agent.py +2 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/tensorzero/image_demo.py +3 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/simple_agent.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/workflows/chaining.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/workflows/evaluator.py +3 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/workflows/human_input.py +5 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/workflows/orchestrator.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/workflows/parallel.py +2 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent/resources → fast_agent_mcp-0.3.0}/examples/workflows/router.py +5 -2
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/hatch_build.py +37 -12
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/pyproject.toml +24 -24
- fast_agent_mcp-0.3.0/src/fast_agent/__init__.py +127 -0
- fast_agent_mcp-0.3.0/src/fast_agent/agents/__init__.py +36 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/agents}/agent_types.py +2 -1
- fast_agent_mcp-0.3.0/src/fast_agent/agents/llm_agent.py +217 -0
- fast_agent_mcp-0.3.0/src/fast_agent/agents/llm_decorator.py +486 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/agents/base_agent.py → fast_agent_mcp-0.3.0/src/fast_agent/agents/mcp_agent.py +377 -385
- fast_agent_mcp-0.3.0/src/fast_agent/agents/tool_agent.py +168 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/chain_agent.py +43 -33
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/evaluator_optimizer.py +31 -35
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/iterative_planner.py +56 -47
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/orchestrator_models.py +4 -4
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/parallel_agent.py +34 -41
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/router_agent.py +54 -39
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/__main__.py +5 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/commands/check_config.py +95 -66
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/commands/go.py +20 -11
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/commands/quickstart.py +4 -4
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/commands/server_helpers.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/commands/setup.py +64 -134
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/commands/url_parser.py +9 -8
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/main.py +36 -16
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/terminal.py +2 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/config.py +13 -2
- fast_agent_mcp-0.3.0/src/fast_agent/constants.py +8 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/context.py +24 -19
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/context_dependent.py +9 -5
- fast_agent_mcp-0.3.0/src/fast_agent/core/__init__.py +17 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/agent_app.py +39 -36
- fast_agent_mcp-0.3.0/src/fast_agent/core/core_app.py +135 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/direct_decorators.py +12 -26
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/direct_factory.py +95 -73
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/executor/executor.py +4 -5
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/fastagent.py +32 -32
- fast_agent_mcp-0.3.0/src/fast_agent/core/logging/__init__.py +5 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/logging/events.py +3 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/logging/json_serializer.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/logging/listeners.py +85 -7
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/logging/logger.py +7 -7
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/logging/transport.py +10 -11
- fast_agent_mcp-0.3.0/src/fast_agent/core/prompt.py +9 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/validation.py +4 -4
- fast_agent_mcp-0.3.0/src/fast_agent/event_progress.py +61 -0
- fast_agent_mcp-0.3.0/src/fast_agent/history/history_exporter.py +44 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/human_input/__init__.py +9 -12
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/human_input/elicitation_handler.py +26 -8
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/human_input/elicitation_state.py +7 -7
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/human_input/simple_form.py +6 -4
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/human_input/types.py +1 -18
- fast_agent_mcp-0.3.0/src/fast_agent/interfaces.py +228 -0
- fast_agent_mcp-0.3.0/src/fast_agent/llm/__init__.py +9 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/augmented_llm.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/fastagent_llm.py +128 -218
- fast_agent_mcp-0.3.0/src/fast_agent/llm/internal/passthrough.py +137 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/augmented_llm_playback.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/internal/playback.py +29 -25
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/augmented_llm_silent.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/internal/silent.py +10 -17
- fast_agent_mcp-0.3.0/src/fast_agent/llm/internal/slow.py +38 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/memory.py +40 -30
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/model_database.py +35 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/model_factory.py +103 -77
- fast_agent_mcp-0.3.0/src/fast_agent/llm/model_info.py +126 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/anthropic}/anthropic_utils.py +7 -7
- fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/anthropic/llm_anthropic.py +603 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/anthropic}/multipart_converter_anthropic.py +79 -86
- fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/bedrock/bedrock_utils.py +218 -0
- fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/bedrock/llm_bedrock.py +2192 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/google}/google_converter.py +66 -14
- fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/google/llm_google_native.py +431 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_aliyun.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_aliyun.py +6 -7
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_azure.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_azure.py +4 -4
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_deepseek.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_deepseek.py +10 -11
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_generic.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_generic.py +4 -4
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_google_oai.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_google_oai.py +4 -4
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_groq.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_groq.py +14 -16
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_openai.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_openai.py +133 -206
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_openrouter.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_openrouter.py +6 -6
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_tensorzero_openai.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_tensorzero_openai.py +17 -16
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_xai.py → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai/llm_xai.py +6 -6
- {fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai}/multipart_converter_openai.py +125 -63
- {fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai}/openai_multipart.py +12 -12
- {fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers → fast_agent_mcp-0.3.0/src/fast_agent/llm/provider/openai}/openai_utils.py +18 -16
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/provider_key_manager.py +2 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/provider_types.py +2 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/sampling_converter.py +15 -12
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/usage_tracking.py +23 -5
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/__init__.py +43 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/elicitation_factory.py +3 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/elicitation_handlers.py +19 -10
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/gen_client.py +3 -3
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/helpers/__init__.py +36 -0
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/helpers/content_helpers.py +183 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/helpers/server_config_helpers.py +8 -8
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/hf_auth.py +25 -23
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/interfaces.py +93 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/logger_textio.py +4 -4
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/mcp_agent_client_session.py +49 -44
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/mcp_aggregator.py +66 -115
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/mcp_connection_manager.py +16 -23
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/mcp}/mcp_content.py +23 -15
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/mime_utils.py +39 -0
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/prompt.py +159 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/prompt_message_multipart.py → fast_agent_mcp-0.3.0/src/fast_agent/mcp/prompt_message_extended.py +27 -20
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompt_render.py +21 -19
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompt_serialization.py +46 -46
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/prompts/__main__.py +7 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompts/prompt_helpers.py +31 -30
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompts/prompt_load.py +8 -8
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompts/prompt_server.py +11 -19
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompts/prompt_template.py +18 -18
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/resource_utils.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/sampling.py +31 -26
- {fast_agent_mcp-0.2.57/src/mcp_agent/mcp_server → fast_agent_mcp-0.3.0/src/fast_agent/mcp/server}/__init__.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent/mcp_server → fast_agent_mcp-0.3.0/src/fast_agent/mcp/server}/agent_server.py +5 -6
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/ui_agent.py +48 -0
- fast_agent_mcp-0.3.0/src/fast_agent/mcp/ui_mixin.py +209 -0
- fast_agent_mcp-0.3.0/src/fast_agent/mcp_server_registry.py +90 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/data-analysis/analysis-campaign.py +5 -4
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/data-analysis/analysis.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/elicitation_forms_server.py +25 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/forms_demo.py +3 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/game_character.py +2 -2
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/mcp/elicitations/game_character_handler.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/tool_call.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/state-transfer/agent_one.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/mcp/state-transfer/agent_two.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/researcher/researcher-eval.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/researcher/researcher-imp.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/researcher/researcher.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/agent.py +2 -2
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/tensorzero/image_demo.py +3 -3
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/simple_agent.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/workflows/chaining.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/workflows/evaluator.py +3 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/workflows/human_input.py +5 -3
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/workflows/orchestrator.py +1 -1
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/workflows/parallel.py +2 -2
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0/src/fast_agent/resources}/examples/workflows/router.py +5 -2
- fast_agent_mcp-0.3.0/src/fast_agent/resources/setup/.gitignore +24 -0
- fast_agent_mcp-0.3.0/src/fast_agent/resources/setup/agent.py +18 -0
- fast_agent_mcp-0.3.0/src/fast_agent/resources/setup/fastagent.config.yaml +44 -0
- fast_agent_mcp-0.3.0/src/fast_agent/resources/setup/fastagent.secrets.yaml.example +38 -0
- fast_agent_mcp-0.3.0/src/fast_agent/tools/elicitation.py +369 -0
- fast_agent_mcp-0.3.0/src/fast_agent/types/__init__.py +32 -0
- fast_agent_mcp-0.3.0/src/fast_agent/types/llm_stop_reason.py +77 -0
- fast_agent_mcp-0.3.0/src/fast_agent/ui/__init__.py +38 -0
- fast_agent_mcp-0.3.0/src/fast_agent/ui/console_display.py +1005 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/human_input → fast_agent_mcp-0.3.0/src/fast_agent/ui}/elicitation_form.py +56 -39
- fast_agent_mcp-0.2.57/src/mcp_agent/human_input/elicitation_forms.py → fast_agent_mcp-0.3.0/src/fast_agent/ui/elicitation_style.py +1 -1
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/ui}/enhanced_prompt.py +96 -25
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/ui}/interactive_prompt.py +330 -125
- fast_agent_mcp-0.3.0/src/fast_agent/ui/mcp_ui_utils.py +224 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/ui}/progress_display.py +2 -2
- {fast_agent_mcp-0.2.57/src/mcp_agent/logging → fast_agent_mcp-0.3.0/src/fast_agent/ui}/rich_progress.py +4 -4
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/ui}/usage_display.py +3 -8
- fast_agent_mcp-0.2.57/examples/bedrock/fast-agent.config.yaml +0 -13
- fast_agent_mcp-0.2.57/src/mcp_agent/__init__.py +0 -114
- fast_agent_mcp-0.2.57/src/mcp_agent/agents/agent.py +0 -92
- fast_agent_mcp-0.2.57/src/mcp_agent/agents/workflow/__init__.py +0 -1
- fast_agent_mcp-0.2.57/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -597
- fast_agent_mcp-0.2.57/src/mcp_agent/app.py +0 -175
- fast_agent_mcp-0.2.57/src/mcp_agent/core/__init__.py +0 -26
- fast_agent_mcp-0.2.57/src/mcp_agent/core/prompt.py +0 -191
- fast_agent_mcp-0.2.57/src/mcp_agent/event_progress.py +0 -134
- fast_agent_mcp-0.2.57/src/mcp_agent/human_input/handler.py +0 -81
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/__init__.py +0 -2
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -232
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/augmented_llm_slow.py +0 -53
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/__init__.py +0 -8
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -717
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +0 -1788
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -495
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -57
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -26
- fast_agent_mcp-0.2.57/src/mcp_agent/llm/sampling_format_converter.py +0 -37
- fast_agent_mcp-0.2.57/src/mcp_agent/logging/__init__.py +0 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/__init__.py +0 -50
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/helpers/__init__.py +0 -25
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/helpers/content_helpers.py +0 -187
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/interfaces.py +0 -266
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/prompts/__init__.py +0 -0
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp/prompts/__main__.py +0 -10
- fast_agent_mcp-0.2.57/src/mcp_agent/mcp_server_registry.py +0 -343
- fast_agent_mcp-0.2.57/src/mcp_agent/tools/tool_definition.py +0 -14
- fast_agent_mcp-0.2.57/src/mcp_agent/ui/console_display.py +0 -790
- fast_agent_mcp-0.2.57/src/mcp_agent/ui/console_display_legacy.py +0 -401
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/LICENSE +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/vision-examples/cat.png +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/mcp_server/pyproject.toml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/agents → fast_agent_mcp-0.3.0/src/fast_agent/cli}/__init__.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/cli/constants.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/error_handling.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/core/exceptions.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/cli → fast_agent_mcp-0.3.0/src/fast_agent/core/executor}/__init__.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/core}/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/human_input/form_fields.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/llm}/request_params.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/common.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/executor → fast_agent_mcp-0.3.0/src/fast_agent/mcp/prompts}/__init__.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/py.typed +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/mcp_server/.python-version +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent}/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent → fast_agent_mcp-0.3.0/src/fast_agent/ui}/console.py +0 -0
- {fast_agent_mcp-0.2.57/src/mcp_agent/core → fast_agent_mcp-0.3.0/src/fast_agent/ui}/mermaid_utils.py +0 -0
|
@@ -161,7 +161,7 @@ examples/**/*.secrets.yaml
|
|
|
161
161
|
!examples/**/*.secrets.yaml.example
|
|
162
162
|
|
|
163
163
|
# Build-generated resources (copied from examples/ during build)
|
|
164
|
-
src/
|
|
164
|
+
src/fast_agent/resources/
|
|
165
165
|
|
|
166
166
|
# Test data files
|
|
167
167
|
examples/mcp_root_test/test_data/*.png
|
|
@@ -179,8 +179,6 @@ project_contents.md
|
|
|
179
179
|
|
|
180
180
|
# example logs
|
|
181
181
|
examples/**/*.jsonl
|
|
182
|
-
mcp_agent.config.yaml
|
|
183
|
-
mcp_agent.secrets.yaml
|
|
184
182
|
fastagent.secrets.yaml
|
|
185
183
|
CLAUDE.md
|
|
186
184
|
example-outputs/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fast-agent-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
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
|
|
@@ -208,18 +208,18 @@ License-File: LICENSE
|
|
|
208
208
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
209
209
|
Classifier: Operating System :: OS Independent
|
|
210
210
|
Classifier: Programming Language :: Python :: 3
|
|
211
|
-
Requires-Python: >=3.13
|
|
211
|
+
Requires-Python: >=3.13.7
|
|
212
212
|
Requires-Dist: a2a-sdk>=0.3.0
|
|
213
213
|
Requires-Dist: aiohttp>=3.11.13
|
|
214
|
-
Requires-Dist: anthropic>=0.
|
|
214
|
+
Requires-Dist: anthropic>=0.66.0
|
|
215
215
|
Requires-Dist: azure-identity>=1.14.0
|
|
216
216
|
Requires-Dist: boto3>=1.35.0
|
|
217
217
|
Requires-Dist: deprecated>=1.2.18
|
|
218
218
|
Requires-Dist: email-validator>=2.2.0
|
|
219
219
|
Requires-Dist: fastapi>=0.115.6
|
|
220
|
-
Requires-Dist: google-genai>=1.
|
|
221
|
-
Requires-Dist: mcp==1.
|
|
222
|
-
Requires-Dist: openai>=1.
|
|
220
|
+
Requires-Dist: google-genai>=1.33.0
|
|
221
|
+
Requires-Dist: mcp==1.14.0
|
|
222
|
+
Requires-Dist: openai>=1.106.1
|
|
223
223
|
Requires-Dist: opentelemetry-distro>=0.55b0
|
|
224
224
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
|
|
225
225
|
Requires-Dist: opentelemetry-instrumentation-anthropic>=0.43.1; python_version >= '3.10' and python_version < '4.0'
|
|
@@ -321,7 +321,7 @@ Here is the complete `sizer.py` Agent application, with boilerplate code:
|
|
|
321
321
|
|
|
322
322
|
```python
|
|
323
323
|
import asyncio
|
|
324
|
-
from
|
|
324
|
+
from fast_agent.core.fastagent import FastAgent
|
|
325
325
|
|
|
326
326
|
# Create the application
|
|
327
327
|
fast = FastAgent("Agent Example")
|
|
@@ -83,7 +83,7 @@ Here is the complete `sizer.py` Agent application, with boilerplate code:
|
|
|
83
83
|
|
|
84
84
|
```python
|
|
85
85
|
import asyncio
|
|
86
|
-
from
|
|
86
|
+
from fast_agent.core.fastagent import FastAgent
|
|
87
87
|
|
|
88
88
|
# Create the application
|
|
89
89
|
fast = FastAgent("Agent Example")
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Example minimal fast-agent.config.yaml for Bedrock
|
|
2
|
+
|
|
3
|
+
# List of supported models: https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
|
|
4
|
+
# Model string format: bedrock.<model_id>.<reasoning_effort>
|
|
5
|
+
# Examples:
|
|
6
|
+
# bedrock.amazon.nova-lite-v1:0 # No reasoning
|
|
7
|
+
# bedrock.claude-sonnet-4-0.high # High reasoning effort
|
|
8
|
+
# bedrock.anthropic.claude-3-7-sonnet-20250219-v1:0.medium # Medium reasoning
|
|
9
|
+
default_model: bedrock.amazon.nova-lite-v1:0
|
|
10
|
+
|
|
11
|
+
# Bedrock uses the AWS credentials provider chain to authenticate.
|
|
12
|
+
# This can be accomplished with aws sso login on local machines,
|
|
13
|
+
# or by IAM roles within AWS.
|
|
14
|
+
# see https://docs.aws.amazon.com/res/latest/ug/sso-idc.html
|
|
15
|
+
bedrock:
|
|
16
|
+
region: "us-east-1" # required
|
|
17
|
+
profile: "default" # optional, defaults to "default" - only needed if you have multiple profiles.
|
|
18
|
+
# Only needed on local machines, not on AWS.
|
|
19
|
+
|
|
20
|
+
# Default reasoning effort for all Bedrock models (can be overridden in model string)
|
|
21
|
+
# Options: "minimal" (off), "low" (512 tokens), "medium" (1024 tokens), "high" (2048 tokens)
|
|
22
|
+
# Note: Only Claude 4, Claude 3.7 Sonnet, and DeepSeek-R1 support reasoning
|
|
23
|
+
# Other models will automatically fallback to no reasoning if unsupported
|
|
24
|
+
reasoning_effort: "minimal" # Default: disabled
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
from
|
|
3
|
+
from fast_agent.agents.mcp_agent import McpAgent
|
|
4
|
+
from fast_agent.core.fastagent import FastAgent
|
|
5
5
|
|
|
6
6
|
# Create the application
|
|
7
7
|
fast = FastAgent("fast-agent example")
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class MyAgent(
|
|
10
|
+
class MyAgent(McpAgent):
|
|
11
11
|
async def initialize(self):
|
|
12
12
|
await super().initialize()
|
|
13
13
|
print("it's a-me!...Mario!")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
from
|
|
3
|
+
from fast_agent.core.fastagent import FastAgent
|
|
4
|
+
from fast_agent.llm.fastagent_llm import RequestParams
|
|
5
5
|
|
|
6
6
|
# Create the application
|
|
7
7
|
fast = FastAgent("Data Analysis & Campaign Generator")
|
|
@@ -179,8 +179,9 @@ async def main() -> None:
|
|
|
179
179
|
)
|
|
180
180
|
|
|
181
181
|
async with fast.run() as agent:
|
|
182
|
-
await agent.
|
|
183
|
-
|
|
182
|
+
await agent.interactive(
|
|
183
|
+
"research_campaign_creator",
|
|
184
|
+
default_prompt="Analyze the CSV file in the current directory and create a comprehensive multi-lingual social media campaign based on the findings. Save all campaign elements as separate files.",
|
|
184
185
|
)
|
|
185
186
|
|
|
186
187
|
|
{fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/elicitations/elicitation_forms_server.py
RENAMED
|
@@ -100,11 +100,25 @@ async def product_review() -> ReadResourceResult:
|
|
|
100
100
|
},
|
|
101
101
|
)
|
|
102
102
|
review_text: str = Field(
|
|
103
|
-
description="Tell us about your experience",
|
|
103
|
+
description="Tell us about your experience",
|
|
104
|
+
default="""Great product!
|
|
105
|
+
Here's what I loved:
|
|
106
|
+
|
|
107
|
+
- Excellent build quality
|
|
108
|
+
- Fast shipping
|
|
109
|
+
- Works as advertised
|
|
110
|
+
|
|
111
|
+
One minor issue:
|
|
112
|
+
- Instructions could be clearer
|
|
113
|
+
|
|
114
|
+
Overall, highly recommended!""",
|
|
115
|
+
min_length=10,
|
|
116
|
+
max_length=1000
|
|
104
117
|
)
|
|
105
118
|
|
|
106
119
|
result = await mcp.get_context().elicit(
|
|
107
|
-
"Share your product review - Help others make informed decisions!",
|
|
120
|
+
"Share your product review - Help others make informed decisions!",
|
|
121
|
+
schema=ProductReview,
|
|
108
122
|
)
|
|
109
123
|
|
|
110
124
|
match result:
|
|
@@ -140,6 +154,7 @@ async def account_settings() -> ReadResourceResult:
|
|
|
140
154
|
email_notifications: bool = Field(True, description="Receive email notifications?")
|
|
141
155
|
marketing_emails: bool = Field(False, description="Subscribe to marketing emails?")
|
|
142
156
|
theme: str = Field(
|
|
157
|
+
"dark",
|
|
143
158
|
description="Choose your preferred theme",
|
|
144
159
|
json_schema_extra={
|
|
145
160
|
"enum": ["light", "dark", "auto"],
|
|
@@ -147,7 +162,9 @@ async def account_settings() -> ReadResourceResult:
|
|
|
147
162
|
},
|
|
148
163
|
)
|
|
149
164
|
privacy_public: bool = Field(False, description="Make your profile public?")
|
|
150
|
-
items_per_page: int = Field(
|
|
165
|
+
items_per_page: int = Field(
|
|
166
|
+
25, description="Items to show per page (10-100)", ge=10, le=100
|
|
167
|
+
)
|
|
151
168
|
|
|
152
169
|
result = await mcp.get_context().elicit("Update your account settings", schema=AccountSettings)
|
|
153
170
|
|
|
@@ -182,7 +199,11 @@ async def service_appointment() -> ReadResourceResult:
|
|
|
182
199
|
|
|
183
200
|
class ServiceAppointment(BaseModel):
|
|
184
201
|
customer_name: str = Field(description="Your full name", min_length=2, max_length=50)
|
|
202
|
+
phone_number: str = Field(
|
|
203
|
+
"555-", description="Contact phone number", min_length=10, max_length=20
|
|
204
|
+
)
|
|
185
205
|
vehicle_type: str = Field(
|
|
206
|
+
default="sedan",
|
|
186
207
|
description="What type of vehicle do you have?",
|
|
187
208
|
json_schema_extra={
|
|
188
209
|
"enum": ["sedan", "suv", "truck", "motorcycle", "other"],
|
|
@@ -205,6 +226,7 @@ async def service_appointment() -> ReadResourceResult:
|
|
|
205
226
|
lines = [
|
|
206
227
|
"🔧 Service Appointment Scheduled!",
|
|
207
228
|
f"👤 Customer: {data.customer_name}",
|
|
229
|
+
f"📞 Phone: {data.phone_number}",
|
|
208
230
|
f"🚗 Vehicle: {data.vehicle_type.title()}",
|
|
209
231
|
f"🚙 Loaner needed: {'Yes' if data.needs_loaner else 'No'}",
|
|
210
232
|
f"📅 Appointment: {data.appointment_time}",
|
|
@@ -13,8 +13,8 @@ import asyncio
|
|
|
13
13
|
from rich.console import Console
|
|
14
14
|
from rich.panel import Panel
|
|
15
15
|
|
|
16
|
-
from
|
|
17
|
-
from
|
|
16
|
+
from fast_agent.core.fastagent import FastAgent
|
|
17
|
+
from fast_agent.mcp.helpers.content_helpers import get_resource_text
|
|
18
18
|
|
|
19
19
|
fast = FastAgent("Elicitation Forms Demo", quiet=True)
|
|
20
20
|
console = Console()
|
|
@@ -38,7 +38,7 @@ async def main():
|
|
|
38
38
|
console.print(
|
|
39
39
|
"[dim]Demonstrates: string validation, email format, URL format, date format[/dim]"
|
|
40
40
|
)
|
|
41
|
-
result = await agent.get_resource("elicitation://event-registration")
|
|
41
|
+
result = await agent["forms-demo"].get_resource("elicitation://event-registration")
|
|
42
42
|
|
|
43
43
|
if result_text := get_resource_text(result):
|
|
44
44
|
panel = Panel(
|
|
@@ -14,8 +14,8 @@ from game_character_handler import game_character_elicitation_handler
|
|
|
14
14
|
from rich.console import Console
|
|
15
15
|
from rich.panel import Panel
|
|
16
16
|
|
|
17
|
-
from
|
|
18
|
-
from
|
|
17
|
+
from fast_agent.core.fastagent import FastAgent
|
|
18
|
+
from fast_agent.mcp.helpers.content_helpers import get_resource_text
|
|
19
19
|
|
|
20
20
|
fast = FastAgent("Game Character Creator", quiet=True)
|
|
21
21
|
console = Console()
|
|
@@ -17,7 +17,7 @@ from rich.progress import BarColumn, Progress, TextColumn
|
|
|
17
17
|
from rich.prompt import Confirm
|
|
18
18
|
from rich.table import Table
|
|
19
19
|
|
|
20
|
-
from
|
|
20
|
+
from fast_agent.core.logging.logger import get_logger
|
|
21
21
|
|
|
22
22
|
if TYPE_CHECKING:
|
|
23
23
|
from mcp import ClientSession
|
{fast_agent_mcp-0.2.57 → fast_agent_mcp-0.3.0}/examples/mcp/mcp-filtering/test_mcp_filtering.py
RENAMED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import sys
|
|
3
3
|
|
|
4
|
-
from
|
|
4
|
+
from fast_agent.core.fastagent import FastAgent, PromptExitError
|
|
5
|
+
|
|
6
|
+
fast_agent = FastAgent(name="MCP Filtering Demo", parse_cli_args=False, quiet=False)
|
|
5
7
|
|
|
6
|
-
fast_agent = FastAgent(
|
|
7
|
-
name="MCP Filtering Demo",
|
|
8
|
-
parse_cli_args=False,
|
|
9
|
-
quiet=False
|
|
10
|
-
)
|
|
11
8
|
|
|
12
9
|
@fast_agent.agent(
|
|
13
|
-
name="filtered_agent",
|
|
10
|
+
name="filtered_agent",
|
|
14
11
|
model="gpt-4o-mini",
|
|
15
12
|
instruction="You are a creative writer with filtered access to tools, resources, and prompts.",
|
|
16
13
|
servers=["creativity"],
|
|
@@ -19,75 +16,82 @@ fast_agent = FastAgent(
|
|
|
19
16
|
# Resource filtering: only writing resources (not coding resources)
|
|
20
17
|
resources={"creativity": ["resource://writing/*"]},
|
|
21
18
|
# Prompt filtering: only writing prompts (not coding prompts)
|
|
22
|
-
prompts={"creativity": ["writing_*"]}
|
|
19
|
+
prompts={"creativity": ["writing_*"]},
|
|
23
20
|
)
|
|
24
21
|
async def filtered_agent():
|
|
25
22
|
return "Filtered agent ready"
|
|
26
23
|
|
|
24
|
+
|
|
27
25
|
@fast_agent.agent(
|
|
28
26
|
name="unfiltered_agent",
|
|
29
|
-
model="gpt-4o-mini",
|
|
27
|
+
model="gpt-4o-mini",
|
|
30
28
|
instruction="You are a creative writer with access to all tools, resources, and prompts.",
|
|
31
|
-
servers=["creativity"]
|
|
29
|
+
servers=["creativity"],
|
|
32
30
|
# No filtering - gets everything
|
|
33
31
|
)
|
|
34
32
|
async def unfiltered_agent():
|
|
35
33
|
return "Unfiltered agent ready"
|
|
36
34
|
|
|
35
|
+
|
|
37
36
|
async def main():
|
|
38
37
|
try:
|
|
39
38
|
async with fast_agent.run() as agent:
|
|
40
39
|
try:
|
|
41
40
|
print("🎯 MCP Filtering Demo")
|
|
42
41
|
print("=" * 50)
|
|
43
|
-
|
|
42
|
+
|
|
44
43
|
# Show filtered agent capabilities
|
|
45
44
|
print("\n📦 FILTERED AGENT:")
|
|
46
45
|
filtered = agent._agent("filtered_agent")
|
|
47
|
-
|
|
46
|
+
|
|
48
47
|
tools = await filtered.list_tools()
|
|
49
|
-
print(
|
|
50
|
-
|
|
48
|
+
print(
|
|
49
|
+
f"✅ Available tools ({len(tools.tools)}): {[tool.name for tool in tools.tools]}"
|
|
50
|
+
)
|
|
51
|
+
|
|
51
52
|
resources = await filtered.list_resources()
|
|
52
53
|
resource_list = resources.get("creativity", [])
|
|
53
54
|
print(f"📚 Available resources ({len(resource_list)}): {resource_list}")
|
|
54
|
-
|
|
55
|
+
|
|
55
56
|
prompts = await filtered.list_prompts()
|
|
56
57
|
prompt_list = prompts.get("creativity", [])
|
|
57
58
|
prompt_names = [p.name for p in prompt_list]
|
|
58
59
|
print(f"💬 Available prompts ({len(prompt_names)}): {prompt_names}")
|
|
59
|
-
|
|
60
|
+
|
|
60
61
|
# Show unfiltered agent capabilities
|
|
61
62
|
print("\n🌐 UNFILTERED AGENT:")
|
|
62
63
|
unfiltered = agent._agent("unfiltered_agent")
|
|
63
|
-
|
|
64
|
+
|
|
64
65
|
tools = await unfiltered.list_tools()
|
|
65
|
-
print(
|
|
66
|
-
|
|
66
|
+
print(
|
|
67
|
+
f"✅ Available tools ({len(tools.tools)}): {[tool.name for tool in tools.tools]}"
|
|
68
|
+
)
|
|
69
|
+
|
|
67
70
|
resources = await unfiltered.list_resources()
|
|
68
71
|
resource_list = resources.get("creativity", [])
|
|
69
72
|
print(f"📚 Available resources ({len(resource_list)}): {resource_list}")
|
|
70
|
-
|
|
73
|
+
|
|
71
74
|
prompts = await unfiltered.list_prompts()
|
|
72
75
|
prompt_list = prompts.get("creativity", [])
|
|
73
76
|
prompt_names = [p.name for p in prompt_list]
|
|
74
77
|
print(f"💬 Available prompts ({len(prompt_names)}): {prompt_names}")
|
|
75
|
-
|
|
78
|
+
|
|
76
79
|
print("\n" + "=" * 50)
|
|
77
80
|
print("🚀 Starting interactive session with filtered agent...")
|
|
78
81
|
print("Type 'exit' to quit")
|
|
79
|
-
|
|
82
|
+
|
|
80
83
|
await agent.interactive(agent_name="filtered_agent")
|
|
81
84
|
|
|
82
85
|
except PromptExitError:
|
|
83
86
|
print("👋 Goodbye!")
|
|
84
|
-
|
|
87
|
+
|
|
85
88
|
except KeyboardInterrupt:
|
|
86
89
|
print("\nExiting...")
|
|
87
90
|
sys.exit(0)
|
|
88
91
|
except Exception as e:
|
|
89
92
|
print(f"Error: {e}")
|
|
90
93
|
import traceback
|
|
94
|
+
|
|
91
95
|
traceback.print_exc()
|
|
92
96
|
sys.exit(1)
|
|
93
97
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
4
|
+
from fast_agent.core.fastagent import FastAgent
|
|
5
|
+
from fast_agent.core.prompt import Prompt
|
|
6
6
|
|
|
7
7
|
# Create the application
|
|
8
8
|
fast = FastAgent("fast-agent example")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from fast_agent.agents.agent_types import AgentConfig
|
|
4
|
+
from fast_agent.agents.llm_agent import LlmAgent
|
|
5
|
+
from fast_agent.core import Core
|
|
6
|
+
from fast_agent.llm.model_factory import ModelFactory
|
|
7
|
+
from fast_agent.llm.request_params import RequestParams
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
async def main():
|
|
11
|
+
core: Core = Core()
|
|
12
|
+
await core.initialize()
|
|
13
|
+
test: AgentConfig = AgentConfig("hello", model="kimi")
|
|
14
|
+
agent: LlmAgent = LlmAgent(test, context=core.context)
|
|
15
|
+
await agent.attach_llm(ModelFactory.create_factory("haiku"))
|
|
16
|
+
await agent.send("hello world, render some xml tags both inside and outside of code fences")
|
|
17
|
+
await agent.generate("write a 200 word story", RequestParams(maxTokens=50))
|
|
18
|
+
await agent.generate(
|
|
19
|
+
"repeat after me: `one, two, three, four`",
|
|
20
|
+
RequestParams(stopSequences=[" two,"]),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == "__main__":
|
|
25
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from mcp.server.fastmcp import FastMCP
|
|
4
|
+
|
|
5
|
+
from fast_agent.agents.agent_types import AgentConfig
|
|
6
|
+
from fast_agent.agents.tool_agent import ToolAgent
|
|
7
|
+
from fast_agent.core import Core
|
|
8
|
+
from fast_agent.llm.model_factory import ModelFactory
|
|
9
|
+
|
|
10
|
+
# Initialize FastMCP instance for decorator-based tools
|
|
11
|
+
# Set log_level to WARNING or ERROR to avoid httpx INFO logs
|
|
12
|
+
mcp = FastMCP("Weather Bot", log_level="WARNING")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Option 1: Using @mcp.tool decorator
|
|
16
|
+
@mcp.tool()
|
|
17
|
+
async def check_weather(city: str) -> str:
|
|
18
|
+
"""Check the weather in a given city.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
city: The city to check the weather for
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
Weather information for the city
|
|
25
|
+
"""
|
|
26
|
+
return f"The weather in {city} is sunny."
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Option 2: Simple function-based tool (without decorator)
|
|
30
|
+
async def check_weather_function(city: str) -> str:
|
|
31
|
+
"""Check the weather in a given city (function version).
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
city: The city to check the weather for
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Weather information for the city
|
|
38
|
+
"""
|
|
39
|
+
return f"The weather in {city} is sunny."
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# Alternative: Regular (non-async) function also works
|
|
43
|
+
def get_temperature(city: str) -> int:
|
|
44
|
+
"""Get the temperature in a city.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
city: The city to get temperature for
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Temperature in degrees Celsius
|
|
51
|
+
"""
|
|
52
|
+
return 22
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
async def main():
|
|
56
|
+
core: Core = Core()
|
|
57
|
+
await core.initialize()
|
|
58
|
+
|
|
59
|
+
# Create agent configuration
|
|
60
|
+
config = AgentConfig(name="weather_bot", model="haiku")
|
|
61
|
+
|
|
62
|
+
tool_agent = ToolAgent(
|
|
63
|
+
config,
|
|
64
|
+
tools=[
|
|
65
|
+
check_weather,
|
|
66
|
+
get_temperature,
|
|
67
|
+
],
|
|
68
|
+
context=core.context,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Attach the LLM
|
|
72
|
+
await tool_agent.attach_llm(ModelFactory.create_factory("haiku"))
|
|
73
|
+
|
|
74
|
+
# Test the agent
|
|
75
|
+
await tool_agent.send("What's the weather like in San Francisco and what's the temperature?")
|
|
76
|
+
await core.cleanup()
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
if __name__ == "__main__":
|
|
80
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from typing import Any, Dict
|
|
3
|
+
|
|
4
|
+
from mcp.server.fastmcp.tools.base import Tool as FastMCPTool
|
|
5
|
+
|
|
6
|
+
from fast_agent.agents.agent_types import AgentConfig
|
|
7
|
+
from fast_agent.agents.tool_agent import ToolAgent
|
|
8
|
+
from fast_agent.core import Core
|
|
9
|
+
from fast_agent.llm.model_factory import ModelFactory
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Example 1: Simple function that will be wrapped
|
|
13
|
+
async def search_web(query: str, max_results: int = 5) -> str:
|
|
14
|
+
"""Search the web for information.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
query: The search query
|
|
18
|
+
max_results: Maximum number of results to return
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
Search results as a formatted string
|
|
22
|
+
"""
|
|
23
|
+
# Mock implementation
|
|
24
|
+
return f"Found {max_results} results for '{query}': [Result 1, Result 2, ...]"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Example 2: Create a FastMCP Tool directly for more control
|
|
28
|
+
def create_calculator_tool() -> FastMCPTool:
|
|
29
|
+
"""Create a calculator tool with explicit schema."""
|
|
30
|
+
|
|
31
|
+
def calculate(operation: str, a: float, b: float) -> float:
|
|
32
|
+
"""Perform a calculation."""
|
|
33
|
+
operations = {
|
|
34
|
+
"add": lambda x, y: x + y,
|
|
35
|
+
"subtract": lambda x, y: x - y,
|
|
36
|
+
"multiply": lambda x, y: x * y,
|
|
37
|
+
"divide": lambda x, y: x / y if y != 0 else float("inf"),
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if operation not in operations:
|
|
41
|
+
raise ValueError(f"Unknown operation: {operation}")
|
|
42
|
+
|
|
43
|
+
return operations[operation](a, b)
|
|
44
|
+
|
|
45
|
+
# Create the tool with explicit configuration
|
|
46
|
+
return FastMCPTool.from_function(
|
|
47
|
+
fn=calculate,
|
|
48
|
+
name="calculator",
|
|
49
|
+
description="Perform basic arithmetic operations",
|
|
50
|
+
# FastMCP will still generate the schema, but we could override if needed
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# Example 3: Complex async tool with side effects
|
|
55
|
+
async def send_email(to: str, subject: str, body: str) -> Dict[str, Any]:
|
|
56
|
+
"""Send an email (mock implementation).
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
to: Recipient email address
|
|
60
|
+
subject: Email subject
|
|
61
|
+
body: Email body content
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
Dictionary with send status and message ID
|
|
65
|
+
"""
|
|
66
|
+
# Mock async operation
|
|
67
|
+
await asyncio.sleep(0.1)
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
"status": "sent",
|
|
71
|
+
"message_id": f"msg_{hash((to, subject))}",
|
|
72
|
+
"timestamp": "2024-01-01T12:00:00Z",
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
async def main():
|
|
77
|
+
core: Core = Core()
|
|
78
|
+
await core.initialize()
|
|
79
|
+
|
|
80
|
+
# Create agent configuration
|
|
81
|
+
config = AgentConfig(name="assistant", model="haiku")
|
|
82
|
+
|
|
83
|
+
# Mix different tool types
|
|
84
|
+
tools = [
|
|
85
|
+
search_web, # Async function
|
|
86
|
+
create_calculator_tool(), # Pre-configured FastMCP Tool
|
|
87
|
+
send_email, # Complex async function
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
# Create tool agent
|
|
91
|
+
tool_agent = ToolAgent(config, tools=tools, context=core.context)
|
|
92
|
+
|
|
93
|
+
# Attach the LLM
|
|
94
|
+
await tool_agent.attach_llm(ModelFactory.create_factory("haiku"))
|
|
95
|
+
|
|
96
|
+
# Test various tools
|
|
97
|
+
print("Testing search:")
|
|
98
|
+
await tool_agent.send("Search for information about Python FastMCP")
|
|
99
|
+
|
|
100
|
+
print("\nTesting calculator:")
|
|
101
|
+
await tool_agent.send("What is 42 multiplied by 17?")
|
|
102
|
+
|
|
103
|
+
print("\nTesting email:")
|
|
104
|
+
await tool_agent.send(
|
|
105
|
+
"Send an email to test@example.com with subject 'Hello' and body 'Test message'"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
if __name__ == "__main__":
|
|
110
|
+
asyncio.run(main())
|