fast-agent-mcp 0.2.47__tar.gz → 0.2.49__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.47 → fast_agent_mcp-0.2.49}/PKG-INFO +1 -1
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/pyproject.toml +1 -1
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/go.py +17 -3
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/main.py +2 -2
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/config.py +17 -2
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/model_database.py +5 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/model_factory.py +6 -3
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/provider_types.py +1 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_azure.py +1 -1
- fast_agent_mcp-0.2.49/src/mcp_agent/llm/providers/augmented_llm_groq.py +30 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_openai.py +20 -7
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/multipart_converter_openai.py +35 -18
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/rich_progress.py +13 -4
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_agent_client_session.py +5 -3
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/.gitignore +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/LICENSE +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/README.md +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/bedrock/fast-agent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/custom-agents/agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/test_mcp_filtering.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/cat.png +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/example1.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/example2.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/example3.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/otel/agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/otel/agent2.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/.env.sample +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/Makefile +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/demo_images/clam.jpg +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/demo_images/crab.png +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/demo_images/shrimp.png +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/Dockerfile +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/hatch_build.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/base_agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/iterative_planner.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/app.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/__main__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/check_config.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/quickstart.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/server_helpers.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/setup.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/commands/url_parser.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/constants.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/console.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/context.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/agent_app.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/agent_types.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/direct_decorators.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/enhanced_prompt.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/interactive_prompt.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/mcp_content.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/mermaid_utils.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/request_params.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/usage_display.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/event_progress.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/executor.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_form.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_forms.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_handler.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/elicitation_state.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/form_fields.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/handler.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/simple_form.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_silent.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/memory.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/provider_key_manager.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_bedrock.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_xai.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/google_converter.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/multipart_converter_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/usage_tracking.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/events.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/listeners.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/logger.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/logging/transport.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/common.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/elicitation_factory.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/elicitation_handlers.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/hf_auth.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/interfaces.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp_server/__init__.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp_server/agent_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp_server_registry.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/progress_display.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/py.typed +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/game_character.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/elicitations/tool_call.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/tools/tool_definition.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/ui/console_display.py +0 -0
- {fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/ui/console_display_legacy.py +0 -0
|
@@ -19,7 +19,7 @@ app = typer.Typer(
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
async def _run_agent(
|
|
22
|
-
name: str = "
|
|
22
|
+
name: str = "fast-agent cli",
|
|
23
23
|
instruction: str = "You are a helpful AI Agent.",
|
|
24
24
|
config_path: Optional[str] = None,
|
|
25
25
|
server_list: Optional[List[str]] = None,
|
|
@@ -28,6 +28,7 @@ async def _run_agent(
|
|
|
28
28
|
prompt_file: Optional[str] = None,
|
|
29
29
|
url_servers: Optional[Dict[str, Dict[str, str]]] = None,
|
|
30
30
|
stdio_servers: Optional[Dict[str, Dict[str, str]]] = None,
|
|
31
|
+
agent_name: Optional[str] = "agent",
|
|
31
32
|
) -> None:
|
|
32
33
|
"""Async implementation to run an interactive agent."""
|
|
33
34
|
from pathlib import Path
|
|
@@ -35,6 +36,7 @@ async def _run_agent(
|
|
|
35
36
|
from mcp_agent.mcp.prompts.prompt_load import load_prompt_multipart
|
|
36
37
|
|
|
37
38
|
# Create the FastAgent instance
|
|
39
|
+
|
|
38
40
|
fast_kwargs = {
|
|
39
41
|
"name": name,
|
|
40
42
|
"config_path": config_path,
|
|
@@ -103,6 +105,8 @@ async def _run_agent(
|
|
|
103
105
|
# Single model - use original behavior
|
|
104
106
|
# Define the agent with specified parameters
|
|
105
107
|
agent_kwargs = {"instruction": instruction}
|
|
108
|
+
if agent_name:
|
|
109
|
+
agent_kwargs["name"] = agent_name
|
|
106
110
|
if server_list:
|
|
107
111
|
agent_kwargs["servers"] = server_list
|
|
108
112
|
if model:
|
|
@@ -117,7 +121,7 @@ async def _run_agent(
|
|
|
117
121
|
print(response)
|
|
118
122
|
elif prompt_file:
|
|
119
123
|
prompt = load_prompt_multipart(Path(prompt_file))
|
|
120
|
-
response = await agent.
|
|
124
|
+
response = await agent.generate(prompt)
|
|
121
125
|
# Print the response text and exit
|
|
122
126
|
print(response.last_text())
|
|
123
127
|
else:
|
|
@@ -138,6 +142,7 @@ def run_async_agent(
|
|
|
138
142
|
message: Optional[str] = None,
|
|
139
143
|
prompt_file: Optional[str] = None,
|
|
140
144
|
stdio_commands: Optional[List[str]] = None,
|
|
145
|
+
agent_name: Optional[str] = None,
|
|
141
146
|
):
|
|
142
147
|
"""Run the async agent function with proper loop handling."""
|
|
143
148
|
server_list = servers.split(",") if servers else None
|
|
@@ -237,6 +242,7 @@ def run_async_agent(
|
|
|
237
242
|
prompt_file=prompt_file,
|
|
238
243
|
url_servers=url_servers,
|
|
239
244
|
stdio_servers=stdio_servers,
|
|
245
|
+
agent_name=agent_name,
|
|
240
246
|
)
|
|
241
247
|
)
|
|
242
248
|
finally:
|
|
@@ -258,7 +264,7 @@ def run_async_agent(
|
|
|
258
264
|
@app.callback(invoke_without_command=True, no_args_is_help=False)
|
|
259
265
|
def go(
|
|
260
266
|
ctx: typer.Context,
|
|
261
|
-
name: str = typer.Option("
|
|
267
|
+
name: str = typer.Option("fast-agent", "--name", help="Name for the agent"),
|
|
262
268
|
instruction: Optional[str] = typer.Option(
|
|
263
269
|
None, "--instruction", "-i", help="Path to file or URL containing instruction for the agent"
|
|
264
270
|
),
|
|
@@ -338,6 +344,8 @@ def go(
|
|
|
338
344
|
|
|
339
345
|
# Resolve instruction from file/URL or use default
|
|
340
346
|
resolved_instruction = "You are a helpful AI Agent." # Default
|
|
347
|
+
agent_name = "agent"
|
|
348
|
+
|
|
341
349
|
if instruction:
|
|
342
350
|
try:
|
|
343
351
|
from pathlib import Path
|
|
@@ -352,6 +360,11 @@ def go(
|
|
|
352
360
|
else:
|
|
353
361
|
# Treat as file path
|
|
354
362
|
resolved_instruction = _resolve_instruction(Path(instruction))
|
|
363
|
+
# Extract filename without extension to use as agent name
|
|
364
|
+
instruction_path = Path(instruction)
|
|
365
|
+
if instruction_path.exists() and instruction_path.is_file():
|
|
366
|
+
# Get filename without extension
|
|
367
|
+
agent_name = instruction_path.stem
|
|
355
368
|
except Exception as e:
|
|
356
369
|
typer.echo(f"Error loading instruction from {instruction}: {e}", err=True)
|
|
357
370
|
raise typer.Exit(1)
|
|
@@ -367,4 +380,5 @@ def go(
|
|
|
367
380
|
message=message,
|
|
368
381
|
prompt_file=prompt_file,
|
|
369
382
|
stdio_commands=stdio_commands,
|
|
383
|
+
agent_name=agent_name,
|
|
370
384
|
)
|
|
@@ -8,7 +8,7 @@ from mcp_agent.cli.commands import check_config, go, quickstart, setup
|
|
|
8
8
|
from mcp_agent.cli.terminal import Application
|
|
9
9
|
|
|
10
10
|
app = typer.Typer(
|
|
11
|
-
help="
|
|
11
|
+
help="fast-agent - Build effective agents using Model Context Protocol",
|
|
12
12
|
add_completion=False, # We'll add this later when we have more commands
|
|
13
13
|
)
|
|
14
14
|
|
|
@@ -60,7 +60,7 @@ def main(
|
|
|
60
60
|
color: bool = typer.Option(True, "--color/--no-color", help="Enable/disable color output"),
|
|
61
61
|
version: bool = typer.Option(False, "--version", help="Show version and exit"),
|
|
62
62
|
) -> None:
|
|
63
|
-
"""
|
|
63
|
+
"""fast-agent - Build effective agents using Model Context Protocol (MCP).
|
|
64
64
|
|
|
65
65
|
Use --help with any command for detailed usage information.
|
|
66
66
|
"""
|
|
@@ -8,6 +8,7 @@ import re
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from typing import Any, Dict, List, Literal, Optional, Tuple
|
|
10
10
|
|
|
11
|
+
from mcp import Implementation
|
|
11
12
|
from pydantic import BaseModel, ConfigDict, field_validator
|
|
12
13
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
13
14
|
|
|
@@ -61,11 +62,9 @@ class MCPServerSettings(BaseModel):
|
|
|
61
62
|
Represents the configuration for an individual server.
|
|
62
63
|
"""
|
|
63
64
|
|
|
64
|
-
# TODO: saqadri - server name should be something a server can provide itself during initialization
|
|
65
65
|
name: str | None = None
|
|
66
66
|
"""The name of the server."""
|
|
67
67
|
|
|
68
|
-
# TODO: saqadri - server description should be something a server can provide itself during initialization
|
|
69
68
|
description: str | None = None
|
|
70
69
|
"""The description of the server."""
|
|
71
70
|
|
|
@@ -108,6 +107,8 @@ class MCPServerSettings(BaseModel):
|
|
|
108
107
|
cwd: str | None = None
|
|
109
108
|
"""Working directory for the executed server command."""
|
|
110
109
|
|
|
110
|
+
implementation: Implementation | None = None
|
|
111
|
+
|
|
111
112
|
|
|
112
113
|
class MCPSettings(BaseModel):
|
|
113
114
|
"""Configuration for all MCP servers."""
|
|
@@ -224,6 +225,17 @@ class AzureSettings(BaseModel):
|
|
|
224
225
|
model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
|
|
225
226
|
|
|
226
227
|
|
|
228
|
+
class GroqSettings(BaseModel):
|
|
229
|
+
"""
|
|
230
|
+
Settings for using xAI Grok models in the fast-agent application.
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
api_key: str | None = None
|
|
234
|
+
base_url: str | None = "https://api.groq.com/openai/v1"
|
|
235
|
+
|
|
236
|
+
model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
|
|
237
|
+
|
|
238
|
+
|
|
227
239
|
class OpenTelemetrySettings(BaseModel):
|
|
228
240
|
"""
|
|
229
241
|
OTEL settings for the fast-agent application.
|
|
@@ -441,6 +453,9 @@ class Settings(BaseSettings):
|
|
|
441
453
|
huggingface: HuggingFaceSettings | None = None
|
|
442
454
|
"""Settings for HuggingFace authentication (used for MCP connections)"""
|
|
443
455
|
|
|
456
|
+
groq: GroqSettings | None = None
|
|
457
|
+
"""Settings for using the Groq provider in the fast-agent application"""
|
|
458
|
+
|
|
444
459
|
logger: LoggerSettings | None = LoggerSettings()
|
|
445
460
|
"""Logger settings for the fast-agent application"""
|
|
446
461
|
|
|
@@ -129,6 +129,10 @@ class ModelDatabase:
|
|
|
129
129
|
context_window=2097152, max_output_tokens=8192, tokenizes=GOOGLE_MULTIMODAL
|
|
130
130
|
)
|
|
131
131
|
|
|
132
|
+
KIMI_MOONSHOT = ModelParameters(
|
|
133
|
+
context_window=131072, max_output_tokens=16384, tokenizes=TEXT_ONLY
|
|
134
|
+
)
|
|
135
|
+
|
|
132
136
|
# 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)
|
|
133
137
|
GROK_4 = ModelParameters(context_window=256000, max_output_tokens=16385, tokenizes=XAI_VISION)
|
|
134
138
|
|
|
@@ -209,6 +213,7 @@ class ModelDatabase:
|
|
|
209
213
|
"grok-3-mini": GROK_3,
|
|
210
214
|
"grok-3-fast": GROK_3,
|
|
211
215
|
"grok-3-mini-fast": GROK_3,
|
|
216
|
+
"moonshotai/kimi-k2-instruct": KIMI_MOONSHOT,
|
|
212
217
|
}
|
|
213
218
|
|
|
214
219
|
@classmethod
|
|
@@ -19,6 +19,7 @@ from mcp_agent.llm.providers.augmented_llm_deepseek import DeepSeekAugmentedLLM
|
|
|
19
19
|
from mcp_agent.llm.providers.augmented_llm_generic import GenericAugmentedLLM
|
|
20
20
|
from mcp_agent.llm.providers.augmented_llm_google_native import GoogleNativeAugmentedLLM
|
|
21
21
|
from mcp_agent.llm.providers.augmented_llm_google_oai import GoogleOaiAugmentedLLM
|
|
22
|
+
from mcp_agent.llm.providers.augmented_llm_groq import GroqAugmentedLLM
|
|
22
23
|
from mcp_agent.llm.providers.augmented_llm_openai import OpenAIAugmentedLLM
|
|
23
24
|
from mcp_agent.llm.providers.augmented_llm_openrouter import OpenRouterAugmentedLLM
|
|
24
25
|
from mcp_agent.llm.providers.augmented_llm_tensorzero import TensorZeroAugmentedLLM
|
|
@@ -43,6 +44,7 @@ LLMClass = Union[
|
|
|
43
44
|
Type[GenericAugmentedLLM],
|
|
44
45
|
Type[AzureOpenAIAugmentedLLM],
|
|
45
46
|
Type[BedrockAugmentedLLM],
|
|
47
|
+
Type[GroqAugmentedLLM],
|
|
46
48
|
]
|
|
47
49
|
|
|
48
50
|
|
|
@@ -122,7 +124,6 @@ class ModelFactory:
|
|
|
122
124
|
"qwen-plus": Provider.ALIYUN,
|
|
123
125
|
"qwen-max": Provider.ALIYUN,
|
|
124
126
|
"qwen-long": Provider.ALIYUN,
|
|
125
|
-
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
MODEL_ALIASES = {
|
|
@@ -142,6 +143,7 @@ class ModelFactory:
|
|
|
142
143
|
"gemini2": "gemini-2.0-flash",
|
|
143
144
|
"gemini25": "gemini-2.5-flash-preview-05-20",
|
|
144
145
|
"gemini25pro": "gemini-2.5-pro-preview-05-06",
|
|
146
|
+
"kimi": "groq.moonshotai/kimi-k2-instruct",
|
|
145
147
|
}
|
|
146
148
|
|
|
147
149
|
# Mapping of providers to their LLM classes
|
|
@@ -159,6 +161,7 @@ class ModelFactory:
|
|
|
159
161
|
Provider.AZURE: AzureOpenAIAugmentedLLM,
|
|
160
162
|
Provider.ALIYUN: AliyunAugmentedLLM,
|
|
161
163
|
Provider.BEDROCK: BedrockAugmentedLLM,
|
|
164
|
+
Provider.GROQ: GroqAugmentedLLM,
|
|
162
165
|
}
|
|
163
166
|
|
|
164
167
|
# Mapping of special model names to their specific LLM classes
|
|
@@ -213,11 +216,11 @@ class ModelFactory:
|
|
|
213
216
|
# If provider still None, try to get from DEFAULT_PROVIDERS using the model_name_str
|
|
214
217
|
if provider is None:
|
|
215
218
|
provider = cls.DEFAULT_PROVIDERS.get(model_name_str)
|
|
216
|
-
|
|
219
|
+
|
|
217
220
|
# If still None, try pattern matching for Bedrock models
|
|
218
221
|
if provider is None and BedrockAugmentedLLM.matches_model_pattern(model_name_str):
|
|
219
222
|
provider = Provider.BEDROCK
|
|
220
|
-
|
|
223
|
+
|
|
221
224
|
if provider is None:
|
|
222
225
|
raise ModelConfigError(
|
|
223
226
|
f"Unknown model or provider for: {model_string}. Model name parsed as '{model_name_str}'"
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_azure.py
RENAMED
|
@@ -18,7 +18,7 @@ def _extract_resource_name(url: str) -> str | None:
|
|
|
18
18
|
return host.replace(suffix, "") if host.endswith(suffix) else None
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
DEFAULT_AZURE_API_VERSION = "
|
|
21
|
+
DEFAULT_AZURE_API_VERSION = "2024-10-21"
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class AzureOpenAIAugmentedLLM(OpenAIAugmentedLLM):
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from mcp_agent.core.request_params import RequestParams
|
|
2
|
+
from mcp_agent.llm.provider_types import Provider
|
|
3
|
+
from mcp_agent.llm.providers.augmented_llm_openai import OpenAIAugmentedLLM
|
|
4
|
+
|
|
5
|
+
GROQ_BASE_URL = "https://api.groq.com/openai/v1"
|
|
6
|
+
DEFAULT_GROQ_MODEL = ""
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GroqAugmentedLLM(OpenAIAugmentedLLM):
|
|
10
|
+
def __init__(self, *args, **kwargs) -> None:
|
|
11
|
+
super().__init__(*args, provider=Provider.GROQ, **kwargs)
|
|
12
|
+
|
|
13
|
+
def _initialize_default_params(self, kwargs: dict) -> RequestParams:
|
|
14
|
+
"""Initialize Groq default parameters"""
|
|
15
|
+
chosen_model = kwargs.get("model", DEFAULT_GROQ_MODEL)
|
|
16
|
+
|
|
17
|
+
return RequestParams(
|
|
18
|
+
model=chosen_model,
|
|
19
|
+
systemPrompt=self.instruction,
|
|
20
|
+
parallel_tool_calls=False,
|
|
21
|
+
max_iterations=20,
|
|
22
|
+
use_history=True,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
def _base_url(self) -> str:
|
|
26
|
+
base_url = None
|
|
27
|
+
if self.context.config and self.context.config.groq:
|
|
28
|
+
base_url = self.context.config.groq.base_url
|
|
29
|
+
|
|
30
|
+
return base_url if base_url else GROQ_BASE_URL
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/llm/providers/augmented_llm_openai.py
RENAMED
|
@@ -388,7 +388,10 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
|
|
|
388
388
|
|
|
389
389
|
# ParsedChatCompletionMessage is compatible with ChatCompletionMessage
|
|
390
390
|
# since it inherits from it, so we can use it directly
|
|
391
|
-
|
|
391
|
+
# Convert to dict and remove None values
|
|
392
|
+
message_dict = message.model_dump()
|
|
393
|
+
message_dict = {k: v for k, v in message_dict.items() if v is not None}
|
|
394
|
+
messages.append(message_dict)
|
|
392
395
|
|
|
393
396
|
message_text = message.content
|
|
394
397
|
if await self._is_tool_stop_reason(choice.finish_reason) and message.tool_calls:
|
|
@@ -409,7 +412,9 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
|
|
|
409
412
|
)
|
|
410
413
|
|
|
411
414
|
tool_results = []
|
|
415
|
+
|
|
412
416
|
for tool_call in message.tool_calls:
|
|
417
|
+
|
|
413
418
|
self.show_tool_call(
|
|
414
419
|
available_tools,
|
|
415
420
|
tool_call.function.name,
|
|
@@ -425,12 +430,20 @@ class OpenAIAugmentedLLM(AugmentedLLM[ChatCompletionMessageParam, ChatCompletion
|
|
|
425
430
|
else from_json(tool_call.function.arguments, allow_partial=True),
|
|
426
431
|
),
|
|
427
432
|
)
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
433
|
+
|
|
434
|
+
try:
|
|
435
|
+
result = await self.call_tool(tool_call_request, tool_call.id)
|
|
436
|
+
self.show_tool_result(result)
|
|
437
|
+
tool_results.append((tool_call.id, result))
|
|
438
|
+
responses.extend(result.content)
|
|
439
|
+
except Exception as e:
|
|
440
|
+
self.logger.error(f"Tool call {tool_call.id} failed with error: {e}")
|
|
441
|
+
# Still add the tool_call_id with an error result to prevent missing responses
|
|
442
|
+
error_result = CallToolResult(content=[TextContent(type="text", text=f"Tool call failed: {str(e)}")])
|
|
443
|
+
tool_results.append((tool_call.id, error_result))
|
|
444
|
+
|
|
445
|
+
converted_messages = OpenAIConverter.convert_function_results_to_openai(tool_results)
|
|
446
|
+
messages.extend(converted_messages)
|
|
434
447
|
|
|
435
448
|
self.logger.debug(
|
|
436
449
|
f"Iteration {i}: Tool call results: {str(tool_results) if tool_results else 'None'}"
|
|
@@ -441,9 +441,6 @@ class OpenAIConverter:
|
|
|
441
441
|
# Convert to OpenAI format
|
|
442
442
|
user_message = OpenAIConverter.convert_to_openai(non_text_multipart)
|
|
443
443
|
|
|
444
|
-
# We need to add tool_call_id manually
|
|
445
|
-
user_message["tool_call_id"] = tool_call_id
|
|
446
|
-
|
|
447
444
|
return (tool_message, [user_message])
|
|
448
445
|
|
|
449
446
|
@staticmethod
|
|
@@ -461,22 +458,42 @@ class OpenAIConverter:
|
|
|
461
458
|
Returns:
|
|
462
459
|
List of OpenAI API messages for tool responses
|
|
463
460
|
"""
|
|
464
|
-
|
|
461
|
+
tool_messages = []
|
|
462
|
+
user_messages = []
|
|
463
|
+
has_mixed_content = False
|
|
465
464
|
|
|
466
465
|
for tool_call_id, result in results:
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
# Handle the case where we have mixed content and get back a tuple
|
|
474
|
-
if isinstance(converted, tuple):
|
|
475
|
-
tool_message, additional_messages = converted
|
|
476
|
-
messages.append(tool_message)
|
|
477
|
-
messages.extend(additional_messages)
|
|
478
|
-
else:
|
|
479
|
-
# Single message case (text-only)
|
|
480
|
-
messages.append(converted)
|
|
466
|
+
try:
|
|
467
|
+
converted = OpenAIConverter.convert_tool_result_to_openai(
|
|
468
|
+
tool_result=result,
|
|
469
|
+
tool_call_id=tool_call_id,
|
|
470
|
+
concatenate_text_blocks=concatenate_text_blocks,
|
|
471
|
+
)
|
|
481
472
|
|
|
473
|
+
# Handle the case where we have mixed content and get back a tuple
|
|
474
|
+
if isinstance(converted, tuple):
|
|
475
|
+
tool_message, additional_messages = converted
|
|
476
|
+
tool_messages.append(tool_message)
|
|
477
|
+
user_messages.extend(additional_messages)
|
|
478
|
+
has_mixed_content = True
|
|
479
|
+
else:
|
|
480
|
+
# Single message case (text-only)
|
|
481
|
+
tool_messages.append(converted)
|
|
482
|
+
except Exception as e:
|
|
483
|
+
_logger.error(f"Failed to convert tool_call_id={tool_call_id}: {e}")
|
|
484
|
+
# Create a basic tool response to prevent missing tool_call_id error
|
|
485
|
+
fallback_message = {
|
|
486
|
+
"role": "tool",
|
|
487
|
+
"tool_call_id": tool_call_id,
|
|
488
|
+
"content": f"[Conversion error: {str(e)}]",
|
|
489
|
+
}
|
|
490
|
+
tool_messages.append(fallback_message)
|
|
491
|
+
|
|
492
|
+
# CONDITIONAL REORDERING: Only reorder if there are user messages (mixed content)
|
|
493
|
+
if has_mixed_content and user_messages:
|
|
494
|
+
# Reorder: All tool messages first (OpenAI sequence), then user messages (vision context)
|
|
495
|
+
messages = tool_messages + user_messages
|
|
496
|
+
else:
|
|
497
|
+
# Pure tool responses - keep original order to preserve context (snapshots, etc.)
|
|
498
|
+
messages = tool_messages
|
|
482
499
|
return messages
|
|
@@ -21,7 +21,7 @@ class RichProgressDisplay:
|
|
|
21
21
|
self._progress = Progress(
|
|
22
22
|
SpinnerColumn(spinner_name="simpleDotsScrolling"),
|
|
23
23
|
TextColumn(
|
|
24
|
-
"[progress.description]{task.description}
|
|
24
|
+
"[progress.description]{task.description}▎",
|
|
25
25
|
# table_column=Column(max_width=16),
|
|
26
26
|
),
|
|
27
27
|
TextColumn(text_format="{task.fields[target]:<16}", style="Bold Blue"),
|
|
@@ -77,7 +77,7 @@ class RichProgressDisplay:
|
|
|
77
77
|
ProgressAction.LOADED: "dim green",
|
|
78
78
|
ProgressAction.INITIALIZED: "dim green",
|
|
79
79
|
ProgressAction.CHATTING: "bold blue",
|
|
80
|
-
ProgressAction.STREAMING: "bold
|
|
80
|
+
ProgressAction.STREAMING: "bold green", # Assistant Colour
|
|
81
81
|
ProgressAction.ROUTING: "bold blue",
|
|
82
82
|
ProgressAction.PLANNING: "bold blue",
|
|
83
83
|
ProgressAction.READY: "dim green",
|
|
@@ -107,10 +107,19 @@ class RichProgressDisplay:
|
|
|
107
107
|
# Ensure no None values in the update
|
|
108
108
|
# For streaming, use custom description immediately to avoid flashing
|
|
109
109
|
if event.action == ProgressAction.STREAMING and event.streaming_tokens:
|
|
110
|
-
|
|
110
|
+
# Account for [dim][/dim] tags (11 characters) in padding calculation
|
|
111
|
+
formatted_tokens = f"▎[dim]◀[/dim] {event.streaming_tokens.strip()}".ljust(17 + 11)
|
|
111
112
|
description = f"[{self._get_action_style(event.action)}]{formatted_tokens}"
|
|
113
|
+
elif event.action == ProgressAction.CHATTING:
|
|
114
|
+
# Add special formatting for chatting with dimmed arrow
|
|
115
|
+
formatted_text = f"▎[dim]▶[/dim] {event.action.value.strip()}".ljust(17 + 11)
|
|
116
|
+
description = f"[{self._get_action_style(event.action)}]{formatted_text}"
|
|
117
|
+
elif event.action == ProgressAction.CALLING_TOOL:
|
|
118
|
+
# Add special formatting for calling tool with dimmed arrow
|
|
119
|
+
formatted_text = f"▎[dim]◀[/dim] {event.action.value}".ljust(17 + 11)
|
|
120
|
+
description = f"[{self._get_action_style(event.action)}]{formatted_text}"
|
|
112
121
|
else:
|
|
113
|
-
description = f"[{self._get_action_style(event.action)}]{event.action.value:<15}"
|
|
122
|
+
description = f"[{self._get_action_style(event.action)}]▎ {event.action.value:<15}"
|
|
114
123
|
|
|
115
124
|
self._progress.update(
|
|
116
125
|
task_id,
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/src/mcp_agent/mcp/mcp_agent_client_session.py
RENAMED
|
@@ -66,9 +66,6 @@ class MCPAgentClientSession(ClientSession, ContextDependent):
|
|
|
66
66
|
# Extract server_name if provided in kwargs
|
|
67
67
|
from importlib.metadata import version
|
|
68
68
|
|
|
69
|
-
version = version("fast-agent-mcp") or "dev"
|
|
70
|
-
fast_agent: Implementation = Implementation(name="fast-agent-mcp", version=version)
|
|
71
|
-
|
|
72
69
|
self.session_server_name = kwargs.pop("server_name", None)
|
|
73
70
|
# Extract the notification callbacks if provided
|
|
74
71
|
self._tool_list_changed_callback = kwargs.pop("tool_list_changed_callback", None)
|
|
@@ -83,6 +80,11 @@ class MCPAgentClientSession(ClientSession, ContextDependent):
|
|
|
83
80
|
# Extract custom elicitation handler if provided
|
|
84
81
|
custom_elicitation_handler = kwargs.pop("elicitation_handler", None)
|
|
85
82
|
|
|
83
|
+
version = version("fast-agent-mcp") or "dev"
|
|
84
|
+
fast_agent: Implementation = Implementation(name="fast-agent-mcp", version=version)
|
|
85
|
+
if self.server_config and self.server_config.implementation:
|
|
86
|
+
fast_agent = self.server_config.implementation
|
|
87
|
+
|
|
86
88
|
# Only register callbacks if the server_config has the relevant settings
|
|
87
89
|
list_roots_cb = list_roots if (self.server_config and self.server_config.roots) else None
|
|
88
90
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/custom-agents/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/data-analysis/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/elicitation_game_server.py
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/elicitations/game_character_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/fastagent.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/mcp/mcp-filtering/test_mcp_filtering.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/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.2.47 → fast_agent_mcp-0.2.49}/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
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/entrypoint.sh
RENAMED
|
File without changes
|
{fast_agent_mcp-0.2.47 → fast_agent_mcp-0.2.49}/examples/tensorzero/mcp_server/mcp_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|