fast-agent-mcp 0.2.34__tar.gz → 0.2.35__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.
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/PKG-INFO +1 -1
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/pyproject.toml +1 -1
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/config.py +8 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/context.py +3 -2
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/agent_app.py +1 -1
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/event_progress.py +22 -4
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/augmented_llm.py +16 -3
- fast_agent_mcp-0.2.35/src/mcp_agent/llm/memory.py +223 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/model_database.py +2 -2
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_anthropic.py +190 -45
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/usage_tracking.py +34 -17
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/events.py +24 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/rich_progress.py +9 -1
- fast_agent_mcp-0.2.34/src/mcp_agent/llm/memory.py +0 -103
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/.gitignore +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/LICENSE +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/README.md +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/azure-openai/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/custom-agents/agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/custom-agents/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/vision-examples/example1.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/vision-examples/example2.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/vision-examples/example3.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/mcp/vision-examples/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/otel/agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/otel/agent2.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/otel/docker-compose.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/otel/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/README.md +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/docker-compose.yml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/image_demo.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/mcp_server/mcp_server.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/tensorzero/simple_agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/graded_report.md +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/short_story.md +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/base_agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/chain_agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/evaluator_optimizer.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/orchestrator_agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/orchestrator_models.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/orchestrator_prompts.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/parallel_agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/agents/workflow/router_agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/app.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/__main__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/commands/check_config.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/commands/go.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/commands/quickstart.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/commands/setup.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/commands/url_parser.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/main.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/cli/terminal.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/console.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/context_dependent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/agent_types.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/direct_decorators.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/direct_factory.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/enhanced_prompt.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/error_handling.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/exceptions.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/fastagent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/interactive_prompt.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/mcp_content.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/prompt.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/request_params.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/usage_display.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/core/validation.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/executor/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/executor/executor.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/executor/task_registry.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/executor/workflow_signal.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/human_input/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/human_input/handler.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/human_input/types.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/augmented_llm_passthrough.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/augmented_llm_playback.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/augmented_llm_slow.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/model_factory.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/prompt_utils.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/provider_key_manager.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/provider_types.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/anthropic_utils.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_aliyun.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_azure.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_deepseek.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_generic.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_google_native.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_google_oai.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_openai.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_openrouter.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/augmented_llm_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/google_converter.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/multipart_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/multipart_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/multipart_converter_tensorzero.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/openai_multipart.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/openai_utils.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/providers/sampling_converter_openai.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/sampling_converter.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/llm/sampling_format_converter.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/json_serializer.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/listeners.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/logger.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/logging/transport.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/common.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/gen_client.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/helpers/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/helpers/content_helpers.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/helpers/server_config_helpers.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/hf_auth.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/interfaces.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/logger_textio.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/mime_utils.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompt_message_multipart.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompt_render.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompt_serialization.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/__main__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/prompt_constants.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/prompt_helpers.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/prompt_load.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/prompt_server.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/prompts/prompt_template.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/resource_utils.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp/sampling.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp_server/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp_server/agent_server.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/mcp_server_registry.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/progress_display.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/in_dev/agent_build.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/in_dev/css-LICENSE.txt +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/in_dev/slides.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/history_transfer.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/job.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/prompt_category.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/prompt_sizing.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/simple.txt +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/sizer.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/internal/social.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_one.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/mcp/state-transfer/agent_two.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/__init__.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/agent.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/delimited_prompt.txt +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/image_server.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/prompt1.txt +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/prompting/work_with_image.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/researcher/researcher-imp.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/evaluator.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/orchestrator.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/resources/examples/workflows/short_story.txt +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/tools/tool_definition.py +0 -0
- {fast_agent_mcp-0.2.34 → fast_agent_mcp-0.2.35}/src/mcp_agent/ui/console_display.py +0 -0
@@ -115,6 +115,14 @@ class AnthropicSettings(BaseModel):
|
|
115
115
|
|
116
116
|
base_url: str | None = None
|
117
117
|
|
118
|
+
cache_mode: Literal["off", "prompt", "auto"] = "auto"
|
119
|
+
"""
|
120
|
+
Controls how caching is applied for Anthropic models when prompt_caching is enabled globally.
|
121
|
+
- "off": No caching, even if global prompt_caching is true.
|
122
|
+
- "prompt": Caches tools+system prompt (1 block) and template content. Useful for large, static prompts.
|
123
|
+
- "auto": Currently same as "prompt" - caches tools+system prompt (1 block) and template content.
|
124
|
+
"""
|
125
|
+
|
118
126
|
model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
|
119
127
|
|
120
128
|
|
@@ -25,7 +25,7 @@ from pydantic import BaseModel, ConfigDict
|
|
25
25
|
from mcp_agent.config import Settings, get_settings
|
26
26
|
from mcp_agent.executor.executor import AsyncioExecutor, Executor
|
27
27
|
from mcp_agent.executor.task_registry import ActivityRegistry
|
28
|
-
from mcp_agent.logging.events import EventFilter
|
28
|
+
from mcp_agent.logging.events import EventFilter, StreamingExclusionFilter
|
29
29
|
from mcp_agent.logging.logger import LoggingConfig, get_logger
|
30
30
|
from mcp_agent.logging.transport import create_transport
|
31
31
|
from mcp_agent.mcp_server_registry import ServerRegistry
|
@@ -124,7 +124,8 @@ async def configure_logger(config: "Settings") -> None:
|
|
124
124
|
"""
|
125
125
|
Configure logging and tracing based on the application config.
|
126
126
|
"""
|
127
|
-
|
127
|
+
# Use StreamingExclusionFilter to prevent streaming events from flooding logs
|
128
|
+
event_filter: EventFilter = StreamingExclusionFilter(min_level=config.logger.level)
|
128
129
|
logger.info(f"Configuring logger with level: {config.logger.level}")
|
129
130
|
transport = create_transport(settings=config.logger, event_filter=event_filter)
|
130
131
|
await LoggingConfig.configure(
|
@@ -15,6 +15,7 @@ class ProgressAction(str, Enum):
|
|
15
15
|
LOADED = "Loaded"
|
16
16
|
INITIALIZED = "Initialized"
|
17
17
|
CHATTING = "Chatting"
|
18
|
+
STREAMING = "Streaming" # Special action for real-time streaming updates
|
18
19
|
ROUTING = "Routing"
|
19
20
|
PLANNING = "Planning"
|
20
21
|
READY = "Ready"
|
@@ -33,12 +34,22 @@ class ProgressEvent(BaseModel):
|
|
33
34
|
target: str
|
34
35
|
details: Optional[str] = None
|
35
36
|
agent_name: Optional[str] = None
|
37
|
+
streaming_tokens: Optional[str] = None # Special field for streaming token count
|
36
38
|
|
37
39
|
def __str__(self) -> str:
|
38
40
|
"""Format the progress event for display."""
|
39
|
-
|
40
|
-
if self.
|
41
|
-
|
41
|
+
# Special handling for streaming - show token count in action position
|
42
|
+
if self.action == ProgressAction.STREAMING and self.streaming_tokens:
|
43
|
+
# For streaming, show just the token count instead of "Streaming"
|
44
|
+
action_display = self.streaming_tokens.ljust(11)
|
45
|
+
base = f"{action_display}. {self.target}"
|
46
|
+
if self.details:
|
47
|
+
base += f" - {self.details}"
|
48
|
+
else:
|
49
|
+
base = f"{self.action.ljust(11)}. {self.target}"
|
50
|
+
if self.details:
|
51
|
+
base += f" - {self.details}"
|
52
|
+
|
42
53
|
if self.agent_name:
|
43
54
|
base = f"[{self.agent_name}] {base}"
|
44
55
|
return base
|
@@ -78,7 +89,8 @@ def convert_log_event(event: Event) -> Optional[ProgressEvent]:
|
|
78
89
|
|
79
90
|
elif "augmented_llm" in namespace:
|
80
91
|
model = event_data.get("model", "")
|
81
|
-
|
92
|
+
|
93
|
+
# For all augmented_llm events, put model info in details column
|
82
94
|
details = f"{model}"
|
83
95
|
chat_turn = event_data.get("chat_turn")
|
84
96
|
if chat_turn is not None:
|
@@ -87,9 +99,15 @@ def convert_log_event(event: Event) -> Optional[ProgressEvent]:
|
|
87
99
|
if not target:
|
88
100
|
target = event_data.get("target", "unknown")
|
89
101
|
|
102
|
+
# Extract streaming token count for STREAMING actions
|
103
|
+
streaming_tokens = None
|
104
|
+
if progress_action == ProgressAction.STREAMING:
|
105
|
+
streaming_tokens = event_data.get("details", "")
|
106
|
+
|
90
107
|
return ProgressEvent(
|
91
108
|
action=ProgressAction(progress_action),
|
92
109
|
target=target or "unknown",
|
93
110
|
details=details,
|
94
111
|
agent_name=event_data.get("agent_name"),
|
112
|
+
streaming_tokens=streaming_tokens,
|
95
113
|
)
|
@@ -97,6 +97,7 @@ class AugmentedLLM(ContextDependent, AugmentedLLMProtocol, Generic[MessageParamT
|
|
97
97
|
PARAM_USE_HISTORY = "use_history"
|
98
98
|
PARAM_MAX_ITERATIONS = "max_iterations"
|
99
99
|
PARAM_TEMPLATE_VARS = "template_vars"
|
100
|
+
|
100
101
|
# Base set of fields that should always be excluded
|
101
102
|
BASE_EXCLUDE_FIELDS = {PARAM_METADATA}
|
102
103
|
|
@@ -371,16 +372,28 @@ class AugmentedLLM(ContextDependent, AugmentedLLMProtocol, Generic[MessageParamT
|
|
371
372
|
# Start with base arguments
|
372
373
|
arguments = base_args.copy()
|
373
374
|
|
374
|
-
#
|
375
|
-
|
375
|
+
# Combine base exclusions with provider-specific exclusions
|
376
|
+
final_exclude_fields = self.BASE_EXCLUDE_FIELDS.copy()
|
377
|
+
if exclude_fields:
|
378
|
+
final_exclude_fields.update(exclude_fields)
|
376
379
|
|
377
380
|
# Add all fields from params that aren't explicitly excluded
|
378
|
-
|
381
|
+
# Ensure model_dump only includes set fields if that's the desired behavior,
|
382
|
+
# or adjust exclude_unset=True/False as needed.
|
383
|
+
# Default Pydantic v2 model_dump is exclude_unset=False
|
384
|
+
params_dict = request_params.model_dump(exclude=final_exclude_fields)
|
385
|
+
|
379
386
|
for key, value in params_dict.items():
|
387
|
+
# Only add if not None and not already in base_args (base_args take precedence)
|
388
|
+
# or if None is a valid value for the provider, this logic might need adjustment.
|
380
389
|
if value is not None and key not in arguments:
|
381
390
|
arguments[key] = value
|
391
|
+
elif value is not None and key in arguments and arguments[key] is None:
|
392
|
+
# Allow overriding a None in base_args with a set value from params
|
393
|
+
arguments[key] = value
|
382
394
|
|
383
395
|
# Finally, add any metadata fields as a last layer of overrides
|
396
|
+
# This ensures metadata can override anything previously set if keys conflict.
|
384
397
|
if request_params.metadata:
|
385
398
|
arguments.update(request_params.metadata)
|
386
399
|
|
@@ -0,0 +1,223 @@
|
|
1
|
+
from typing import Generic, List, Protocol, TypeVar
|
2
|
+
|
3
|
+
# Define our own type variable for implementation use
|
4
|
+
MessageParamT = TypeVar("MessageParamT")
|
5
|
+
|
6
|
+
|
7
|
+
class Memory(Protocol, Generic[MessageParamT]):
|
8
|
+
"""
|
9
|
+
Simple memory management for storing past interactions in-memory.
|
10
|
+
"""
|
11
|
+
|
12
|
+
# TODO: saqadri - add checkpointing and other advanced memory capabilities
|
13
|
+
|
14
|
+
def __init__(self) -> None: ...
|
15
|
+
|
16
|
+
def extend(self, messages: List[MessageParamT], is_prompt: bool = False) -> None: ...
|
17
|
+
|
18
|
+
def set(self, messages: List[MessageParamT], is_prompt: bool = False) -> None: ...
|
19
|
+
|
20
|
+
def append(self, message: MessageParamT, is_prompt: bool = False) -> None: ...
|
21
|
+
|
22
|
+
def get(self, include_completion_history: bool = True) -> List[MessageParamT]: ...
|
23
|
+
|
24
|
+
def clear(self, clear_prompts: bool = False) -> None: ...
|
25
|
+
|
26
|
+
|
27
|
+
class SimpleMemory(Memory, Generic[MessageParamT]):
|
28
|
+
"""
|
29
|
+
Simple memory management for storing past interactions in-memory.
|
30
|
+
|
31
|
+
Maintains both prompt messages (which are always included) and
|
32
|
+
generated conversation history (which is included based on use_history setting).
|
33
|
+
"""
|
34
|
+
|
35
|
+
def __init__(self) -> None:
|
36
|
+
self.history: List[MessageParamT] = []
|
37
|
+
self.prompt_messages: List[MessageParamT] = [] # Always included
|
38
|
+
self.conversation_cache_positions: List[int] = [] # Track active conversation cache positions
|
39
|
+
self.cache_walk_distance: int = 6 # Messages between cache blocks
|
40
|
+
self.max_conversation_cache_blocks: int = 2 # Maximum conversation cache blocks
|
41
|
+
|
42
|
+
def extend(self, messages: List[MessageParamT], is_prompt: bool = False) -> None:
|
43
|
+
"""
|
44
|
+
Add multiple messages to history.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
messages: Messages to add
|
48
|
+
is_prompt: If True, add to prompt_messages instead of regular history
|
49
|
+
"""
|
50
|
+
if is_prompt:
|
51
|
+
self.prompt_messages.extend(messages)
|
52
|
+
else:
|
53
|
+
self.history.extend(messages)
|
54
|
+
|
55
|
+
def set(self, messages: List[MessageParamT], is_prompt: bool = False) -> None:
|
56
|
+
"""
|
57
|
+
Replace messages in history.
|
58
|
+
|
59
|
+
Args:
|
60
|
+
messages: Messages to set
|
61
|
+
is_prompt: If True, replace prompt_messages instead of regular history
|
62
|
+
"""
|
63
|
+
if is_prompt:
|
64
|
+
self.prompt_messages = messages.copy()
|
65
|
+
else:
|
66
|
+
self.history = messages.copy()
|
67
|
+
|
68
|
+
def append(self, message: MessageParamT, is_prompt: bool = False) -> None:
|
69
|
+
"""
|
70
|
+
Add a single message to history.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
message: Message to add
|
74
|
+
is_prompt: If True, add to prompt_messages instead of regular history
|
75
|
+
"""
|
76
|
+
if is_prompt:
|
77
|
+
self.prompt_messages.append(message)
|
78
|
+
else:
|
79
|
+
self.history.append(message)
|
80
|
+
|
81
|
+
def get(self, include_completion_history: bool = True) -> List[MessageParamT]:
|
82
|
+
"""
|
83
|
+
Get all messages in memory.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
include_history: If True, include regular history messages
|
87
|
+
If False, only return prompt messages
|
88
|
+
|
89
|
+
Returns:
|
90
|
+
Combined list of prompt messages and optionally history messages
|
91
|
+
"""
|
92
|
+
if include_completion_history:
|
93
|
+
return self.prompt_messages + self.history
|
94
|
+
else:
|
95
|
+
return self.prompt_messages.copy()
|
96
|
+
|
97
|
+
def clear(self, clear_prompts: bool = False) -> None:
|
98
|
+
"""
|
99
|
+
Clear history and optionally prompt messages.
|
100
|
+
|
101
|
+
Args:
|
102
|
+
clear_prompts: If True, also clear prompt messages
|
103
|
+
"""
|
104
|
+
self.history = []
|
105
|
+
self.conversation_cache_positions = [] # Reset cache positions
|
106
|
+
if clear_prompts:
|
107
|
+
self.prompt_messages = []
|
108
|
+
|
109
|
+
def should_apply_conversation_cache(self) -> bool:
|
110
|
+
"""
|
111
|
+
Determine if conversation caching should be applied based on walking algorithm.
|
112
|
+
|
113
|
+
Returns:
|
114
|
+
True if we should add or update cache blocks
|
115
|
+
"""
|
116
|
+
total_messages = len(self.history)
|
117
|
+
|
118
|
+
# Need at least cache_walk_distance messages to start caching
|
119
|
+
if total_messages < self.cache_walk_distance:
|
120
|
+
return False
|
121
|
+
|
122
|
+
# Check if we need to add a new cache block
|
123
|
+
return len(self._calculate_cache_positions(total_messages)) != len(self.conversation_cache_positions)
|
124
|
+
|
125
|
+
def _calculate_cache_positions(self, total_conversation_messages: int) -> List[int]:
|
126
|
+
"""
|
127
|
+
Calculate where cache blocks should be placed using walking algorithm.
|
128
|
+
|
129
|
+
Args:
|
130
|
+
total_conversation_messages: Number of conversation messages (not including prompts)
|
131
|
+
|
132
|
+
Returns:
|
133
|
+
List of positions (relative to conversation start) where cache should be placed
|
134
|
+
"""
|
135
|
+
positions = []
|
136
|
+
|
137
|
+
# Place cache blocks every cache_walk_distance messages
|
138
|
+
for i in range(self.cache_walk_distance - 1, total_conversation_messages, self.cache_walk_distance):
|
139
|
+
positions.append(i)
|
140
|
+
if len(positions) >= self.max_conversation_cache_blocks:
|
141
|
+
break
|
142
|
+
|
143
|
+
# Keep only the most recent cache blocks (walking behavior)
|
144
|
+
if len(positions) > self.max_conversation_cache_blocks:
|
145
|
+
positions = positions[-self.max_conversation_cache_blocks:]
|
146
|
+
|
147
|
+
return positions
|
148
|
+
|
149
|
+
def get_conversation_cache_updates(self) -> dict:
|
150
|
+
"""
|
151
|
+
Get cache position updates needed for the walking algorithm.
|
152
|
+
|
153
|
+
Returns:
|
154
|
+
Dict with 'add', 'remove', and 'active' position lists (relative to full message array)
|
155
|
+
"""
|
156
|
+
total_conversation_messages = len(self.history)
|
157
|
+
new_positions = self._calculate_cache_positions(total_conversation_messages)
|
158
|
+
|
159
|
+
# Convert to absolute positions (including prompt messages)
|
160
|
+
prompt_offset = len(self.prompt_messages)
|
161
|
+
new_absolute_positions = [pos + prompt_offset for pos in new_positions]
|
162
|
+
|
163
|
+
old_positions_set = set(self.conversation_cache_positions)
|
164
|
+
new_positions_set = set(new_absolute_positions)
|
165
|
+
|
166
|
+
return {
|
167
|
+
'add': sorted(new_positions_set - old_positions_set),
|
168
|
+
'remove': sorted(old_positions_set - new_positions_set),
|
169
|
+
'active': sorted(new_absolute_positions)
|
170
|
+
}
|
171
|
+
|
172
|
+
def apply_conversation_cache_updates(self, updates: dict) -> None:
|
173
|
+
"""
|
174
|
+
Apply cache position updates.
|
175
|
+
|
176
|
+
Args:
|
177
|
+
updates: Dict from get_conversation_cache_updates()
|
178
|
+
"""
|
179
|
+
self.conversation_cache_positions = updates['active'].copy()
|
180
|
+
|
181
|
+
def remove_cache_control_from_messages(self, messages: List[MessageParamT], positions: List[int]) -> None:
|
182
|
+
"""
|
183
|
+
Remove cache control from specified message positions.
|
184
|
+
|
185
|
+
Args:
|
186
|
+
messages: The message array to modify
|
187
|
+
positions: List of positions to remove cache control from
|
188
|
+
"""
|
189
|
+
for pos in positions:
|
190
|
+
if pos < len(messages):
|
191
|
+
message = messages[pos]
|
192
|
+
if isinstance(message, dict) and "content" in message:
|
193
|
+
content_list = message["content"]
|
194
|
+
if isinstance(content_list, list):
|
195
|
+
for content_block in content_list:
|
196
|
+
if isinstance(content_block, dict) and "cache_control" in content_block:
|
197
|
+
del content_block["cache_control"]
|
198
|
+
|
199
|
+
def add_cache_control_to_messages(self, messages: List[MessageParamT], positions: List[int]) -> int:
|
200
|
+
"""
|
201
|
+
Add cache control to specified message positions.
|
202
|
+
|
203
|
+
Args:
|
204
|
+
messages: The message array to modify
|
205
|
+
positions: List of positions to add cache control to
|
206
|
+
|
207
|
+
Returns:
|
208
|
+
Number of cache blocks successfully applied
|
209
|
+
"""
|
210
|
+
applied_count = 0
|
211
|
+
for pos in positions:
|
212
|
+
if pos < len(messages):
|
213
|
+
message = messages[pos]
|
214
|
+
if isinstance(message, dict) and "content" in message:
|
215
|
+
content_list = message["content"]
|
216
|
+
if isinstance(content_list, list) and content_list:
|
217
|
+
# Apply cache control to the last content block
|
218
|
+
for content_block in reversed(content_list):
|
219
|
+
if isinstance(content_block, dict):
|
220
|
+
content_block["cache_control"] = {"type": "ephemeral"}
|
221
|
+
applied_count += 1
|
222
|
+
break
|
223
|
+
return applied_count
|
@@ -109,11 +109,11 @@ class ModelDatabase:
|
|
109
109
|
|
110
110
|
# TODO update to 32000
|
111
111
|
ANTHROPIC_OPUS_4_VERSIONED = ModelParameters(
|
112
|
-
context_window=200000, max_output_tokens=
|
112
|
+
context_window=200000, max_output_tokens=32000, tokenizes=ANTHROPIC_MULTIMODAL
|
113
113
|
)
|
114
114
|
# TODO update to 64000
|
115
115
|
ANTHROPIC_SONNET_4_VERSIONED = ModelParameters(
|
116
|
-
context_window=200000, max_output_tokens=
|
116
|
+
context_window=200000, max_output_tokens=64000, tokenizes=ANTHROPIC_MULTIMODAL
|
117
117
|
)
|
118
118
|
|
119
119
|
DEEPSEEK_CHAT_STANDARD = ModelParameters(
|