From 2275217d0f87d2030d2fd49964cc9b13bf8462b1 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Thu, 10 Sep 2026 08:29:21 +0100 Subject: [PATCH 1/2] Switch native DeepSeek Flash to V4.1 --- .../docs/_generated/model_aliases_deepseek.md | 6 ++-- docs/docs/_generated/models_reference.md | 5 +-- docs/docs/guides/core-concepts.md | 4 +-- docs/docs/models/index.md | 8 +++-- docs/docs/models/providers/additional.md | 4 +-- docs/docs/models/providers/deepseek.md | 32 ++++++++++++------- src/fast_agent/llm/model_aliases.py | 5 +-- src/fast_agent/llm/model_database.py | 8 +++-- src/fast_agent/llm/model_selection.py | 9 ++---- .../llm/provider/openai/llm_deepseek.py | 4 ++- .../llm/providers/test_deepseek_responses.py | 17 ++++++---- .../providers/test_provider_default_models.py | 6 ++-- .../fast_agent/llm/test_model_database.py | 20 +++++++++++- .../unit/fast_agent/llm/test_model_factory.py | 11 ++++--- .../llm/test_model_selection_catalog.py | 2 +- 15 files changed, 88 insertions(+), 53 deletions(-) diff --git a/docs/docs/_generated/model_aliases_deepseek.md b/docs/docs/_generated/model_aliases_deepseek.md index c0bb86a38..398fe30a3 100644 --- a/docs/docs/_generated/model_aliases_deepseek.md +++ b/docs/docs/_generated/model_aliases_deepseek.md @@ -1,9 +1,11 @@ | Model Alias | Maps to | | --- | --- | -| `deepseek` | `deepseek.deepseek-v4-flash` | +| `deepseek` | `deepseek.deepseek-flash` | | `DeepSeek V4 Pro` | `deepseek.deepseek-v4-pro` | +| `DeepSeek V4.1 Flash` | `deepseek.deepseek-flash` | +| `deepseek-flash` | `deepseek-flash` | | `deepseek-v4-flash` | `deepseek-v4-flash` | | `deepseek-v4-flash-vision-exp` | `deepseek-v4-flash-vision-exp` | | `deepseek-v4-pro` | `deepseek-v4-pro` | | `deepseekpro` | `deepseek.deepseek-v4-pro` | -| `deepseekvision` | `deepseek.deepseek-v4-flash-vision-exp` | +| `deepseekvision` | `deepseek.deepseek-flash` | diff --git a/docs/docs/_generated/models_reference.md b/docs/docs/_generated/models_reference.md index decfb6f70..a70ac60a8 100644 --- a/docs/docs/_generated/models_reference.md +++ b/docs/docs/_generated/models_reference.md @@ -36,9 +36,10 @@ | `luna` | `codexresponses` | Text, Vision, Document | `json` (schema) | effort: `none`, `low`, `medium`, `high`, `xhigh`, `max`, `off`
Example: `luna?reasoning=high` | `low`, `medium`, `high`
Example: `luna?verbosity=low` | — | | `sol` | `codexresponses` | Text, Vision, Document | `json` (schema) | effort: `none`, `low`, `medium`, `high`, `xhigh`, `max`, `off`
Example: `sol?reasoning=high` | `low`, `medium`, `high`
Example: `sol?verbosity=low` | — | | `terra` | `codexresponses` | Text, Vision, Document | `json` (schema) | effort: `none`, `low`, `medium`, `high`, `xhigh`, `max`, `off`
Example: `terra?reasoning=high` | `low`, `medium`, `high`
Example: `terra?verbosity=low` | — | -| `deepseek` | `deepseek` | Text | `json` (schema) | effort: `none`, `low`, `high`, `max`, `off`
Example: `deepseek?reasoning=max` | — | — | +| `deepseek-v4-flash-vision-exp` | `deepseek` | Text, Vision | `json` (schema) | effort: `none`, `low`, `high`, `max`, `off`
Example: `deepseek-v4-flash-vision-exp?reasoning=max` | — | — | +| `deepseek-v4-flash` | `deepseek` | Text, Vision | `json` (schema) | effort: `none`, `low`, `high`, `max`, `off`
Example: `deepseek-v4-flash?reasoning=max` | — | — | +| `deepseek` | `deepseek` | Text, Vision | `json` (schema) | effort: `none`, `low`, `high`, `max`, `off`
Example: `deepseek?reasoning=max` | — | — | | `deepseekpro` | `deepseek` | Text | `json` (schema) | effort: `none`, `low`, `high`, `max`, `off`
Example: `deepseekpro?reasoning=max` | — | — | -| `deepseekvision` | `deepseek` | Text, Vision | `json` (schema) | effort: `none`, `low`, `high`, `max`, `off`
Example: `deepseekvision?reasoning=max` | — | — | | `passthrough` | `fast-agent` | Text | `json` (schema) | — | — | — | | `playback` | `fast-agent` | Text | `json` (schema) | — | — | — | | `silent` | `fast-agent` | Text | `json` (schema) | — | — | — | diff --git a/docs/docs/guides/core-concepts.md b/docs/docs/guides/core-concepts.md index 90b9ee1d6..c50981ccc 100644 --- a/docs/docs/guides/core-concepts.md +++ b/docs/docs/guides/core-concepts.md @@ -356,12 +356,12 @@ The model string still selects the provider adapter and protocol: ```bash # OpenAI-compatible Chat Completions fast-agent go \ - --model generic.deepseek-v4-flash \ + --model generic.deepseek-flash \ --base-url https://gateway.example/v1 # Open Responses-compatible Responses API fast-agent go \ - --model openresponses.deepseek-v4-flash \ + --model openresponses.deepseek-flash \ --base-url https://responses.example/v1 ``` diff --git a/docs/docs/models/index.md b/docs/docs/models/index.md index 701ca5bea..87e7a421a 100644 --- a/docs/docs/models/index.md +++ b/docs/docs/models/index.md @@ -199,10 +199,12 @@ fast-agent --model "deepseek?reasoning=high" fast-agent --model "deepseek?web_search=true" ``` -The native route supports `deepseek-v4-flash`, -`deepseek-v4-flash-vision-exp`, and `deepseek-v4-pro`. All provide reasoning, +The native route supports `deepseek-flash` (V4.1 Flash) and `deepseek-v4-pro`. +Both provide reasoning, function tools, JSON Schema structured output, and provider-managed web search. -The experimental vision variant also accepts JPEG, PNG, GIF, and WebP images. +Flash accepts JPEG, PNG, GIF, and WebP images, with 1M context and up to 384K +output tokens. Both `deepseek` and `deepseekvision` select V4.1 Flash. Retired +Flash API IDs remain accepted and redirect to V4.1 Flash. Hugging Face aliases such as `deepseek-hf` are separate routes. ### xAI diff --git a/docs/docs/models/providers/additional.md b/docs/docs/models/providers/additional.md index f0f6adf0b..e2f71c7b6 100644 --- a/docs/docs/models/providers/additional.md +++ b/docs/docs/models/providers/additional.md @@ -114,7 +114,7 @@ override only its destination: ```bash OPENRESPONSES_API_KEY=... fast-agent go \ - --model openresponses.deepseek-v4-flash \ + --model openresponses.deepseek-flash \ --base-url https://responses.example/v1 ``` @@ -168,7 +168,7 @@ configured generic provider: ```bash GENERIC_API_KEY=... fast-agent go \ - --model generic.deepseek-v4-flash \ + --model generic.deepseek-flash \ --base-url https://gateway.example/v1 ``` diff --git a/docs/docs/models/providers/deepseek.md b/docs/docs/models/providers/deepseek.md index 359f885b4..f3f09c7a3 100644 --- a/docs/docs/models/providers/deepseek.md +++ b/docs/docs/models/providers/deepseek.md @@ -10,8 +10,13 @@ social: # DeepSeek Use the `deepseek` provider for fast-agent's native DeepSeek Responses route. -It uses a stateless Responses API over SSE and supports `deepseek-v4-flash`, -`deepseek-v4-flash-vision-exp`, and `deepseek-v4-pro`. +It uses a stateless Responses API over SSE and supports `deepseek-flash` +(DeepSeek V4.1 Flash) and `deepseek-v4-pro`. Flash supports vision, a 1M-token +context window, and up to 384K output tokens. + +The retired API IDs `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` +remain accepted: DeepSeek redirects them to V4.1 Flash. They are no longer +listed in the model picker. ## Setup @@ -31,7 +36,7 @@ fast-agent go --model deepseek \ The explicit model string is: ```text -deepseek.deepseek-v4-flash +deepseek.deepseek-flash ``` Select V4 Pro with: @@ -46,7 +51,7 @@ or its explicit model string: deepseek.deepseek-v4-pro ``` -Select the experimental vision model with: +The `deepseekvision` alias also selects V4.1 Flash: ```bash fast-agent go --model deepseekvision --message "Describe this image." @@ -55,10 +60,10 @@ fast-agent go --model deepseekvision --message "Describe this image." or its explicit model string: ```text -deepseek.deepseek-v4-flash-vision-exp +deepseek.deepseek-flash ``` -The vision model accepts JPEG, PNG, GIF, and WebP images from inline data or +V4.1 Flash accepts JPEG, PNG, GIF, and WebP images from inline data or public URLs. Attach images through the TUI or other fast-agent input surfaces; the native adapter sends them as Responses API `input_image` parts. @@ -80,7 +85,7 @@ The complete provider shape is: deepseek: api_key: "${DEEPSEEK_API_KEY}" base_url: "https://api.deepseek.com" - default_model: "deepseek-v4-flash" + default_model: "deepseek-flash" reasoning: "max" web_search: enabled: false @@ -89,15 +94,17 @@ deepseek: ``` `base_url`, `default_model`, and `default_headers` are optional. A configured -`default_model` must be `deepseek-v4-flash`, -`deepseek-v4-flash-vision-exp`, or `deepseek-v4-pro`. Flash remains the default -when this setting is omitted. +`default_model` accepts `deepseek-flash`, `deepseek-v4-pro`, and the two +retired Flash IDs above. `deepseek-flash` is the default when omitted. Run `fast-agent check` after configuring credentials. ## Reasoning -Reasoning defaults to `max`. Select an effort in the model string: +fast-agent intentionally defaults reasoning to `max`; DeepSeek itself defaults +to `high` when effort is omitted. The native Responses payload uses +`reasoning: {"effort": "none|low|high|max"}`, with `none` disabling thinking. +Select an effort in the model string: ```bash fast-agent go --model "deepseek?reasoning=none" --message "Answer directly." @@ -150,7 +157,7 @@ DeepSeek's route differs from OpenAI's stateful Responses API: - requests use SSE; WebSocket transport is not supported; - server-side response storage and continuation are not used; - service tiers are not supported; -- image input is supported only by `deepseek-v4-flash-vision-exp`; +- image input is supported by V4.1 Flash, including the retired Flash IDs; - PDF, audio, video, and general file inputs are not supported; - OpenAI-only request fields such as `include`, `parallel_tool_calls`, `service_tier`, and `store` are omitted. @@ -177,6 +184,7 @@ route. - [DeepSeek platform](https://platform.deepseek.com/) - [DeepSeek API documentation](https://api-docs.deepseek.com/) +- [DeepSeek thinking mode](https://api-docs.deepseek.com/guides/thinking_mode) - [DeepSeek vision guide](https://api-docs.deepseek.com/guides/vision) - [DeepSeek models and pricing](https://api-docs.deepseek.com/quick_start/pricing) diff --git a/src/fast_agent/llm/model_aliases.py b/src/fast_agent/llm/model_aliases.py index b173ea350..7aa074935 100644 --- a/src/fast_agent/llm/model_aliases.py +++ b/src/fast_agent/llm/model_aliases.py @@ -41,9 +41,9 @@ "opus48": "claude-opus-4-8", "fable": "claude-fable-5", "fable5": "claude-fable-5", - "deepseek": "deepseek.deepseek-v4-flash", + "deepseek": "deepseek.deepseek-flash", "deepseekpro": "deepseek.deepseek-v4-pro", - "deepseekvision": "deepseek.deepseek-v4-flash-vision-exp", + "deepseekvision": "deepseek.deepseek-flash", "gemini": "gemini-3.8-flash", "gemini2": "gemini-2.0-flash", "gemini25": "gemini-2.5-flash", @@ -146,6 +146,7 @@ "Grok 4.5": "xai.grok-4.5", "Grok 4.5 (X Search)": "xai.grok-4.5?x_search=true", "Grok 4.3": "xai.grok-4.3", + "DeepSeek V4.1 Flash": "deepseek.deepseek-flash", "DeepSeek V4 Pro": "deepseek.deepseek-v4-pro", "Muse Spark 1.2": "metaai.muse-spark-1.2", "Muse Spark 1.2 (Contributor)": "metaai.muse-spark-1.2-contributor", diff --git a/src/fast_agent/llm/model_database.py b/src/fast_agent/llm/model_database.py index f324bcada..e7c71a73e 100644 --- a/src/fast_agent/llm/model_database.py +++ b/src/fast_agent/llm/model_database.py @@ -820,7 +820,7 @@ class ModelDatabase: } ) DEEPSEEK_V4_PRO = DEEPSEEK_V4_FLASH - DEEPSEEK_V4_FLASH_VISION = DEEPSEEK_V4_FLASH.model_copy( + DEEPSEEK_V41_FLASH = DEEPSEEK_V4_FLASH.model_copy( update={"tokenizes": [*OPENAI_VISION, "image/gif"]} ) @@ -1361,8 +1361,10 @@ class ModelDatabase: "claude-haiku-4-5-20251001": ANTHROPIC_SONNET_4_VERSIONED, "claude-haiku-4-5": _with_fast(ANTHROPIC_SONNET_4_VERSIONED), # DeepSeek Models - "deepseek-v4-flash": _with_fast(DEEPSEEK_V4_FLASH), - "deepseek-v4-flash-vision-exp": _with_fast(DEEPSEEK_V4_FLASH_VISION), + "deepseek-flash": _with_fast(DEEPSEEK_V41_FLASH), + # Retired native IDs redirect to V4.1 Flash; HF snapshots above stay historical. + "deepseek-v4-flash": _with_fast(DEEPSEEK_V41_FLASH), + "deepseek-v4-flash-vision-exp": _with_fast(DEEPSEEK_V41_FLASH), "deepseek-v4-pro": DEEPSEEK_V4_PRO, "deepseek-ai/deepseek-v4-flash-0731": _with_fast(DEEPSEEK_V4_FLASH_HF), # Z.ai models diff --git a/src/fast_agent/llm/model_selection.py b/src/fast_agent/llm/model_selection.py index f4c13b24a..138dc3d5c 100644 --- a/src/fast_agent/llm/model_selection.py +++ b/src/fast_agent/llm/model_selection.py @@ -141,13 +141,8 @@ class ModelSelectionCatalog: ), Provider.DEEPSEEK: ( _builtin_entry( - "deepseek", - display_label="DeepSeek V4 Flash", - fast=True, - ), - _builtin_entry( - "deepseekvision", - display_label="DeepSeek V4 Flash Vision (experimental)", + "DeepSeek V4.1 Flash", + display_label="DeepSeek V4.1 Flash", fast=True, ), _builtin_entry( diff --git a/src/fast_agent/llm/provider/openai/llm_deepseek.py b/src/fast_agent/llm/provider/openai/llm_deepseek.py index 0a4bff97f..6ee51311e 100644 --- a/src/fast_agent/llm/provider/openai/llm_deepseek.py +++ b/src/fast_agent/llm/provider/openai/llm_deepseek.py @@ -23,10 +23,12 @@ from fast_agent.types import RequestParams DEEPSEEK_BASE_URL = "https://api.deepseek.com" -DEFAULT_DEEPSEEK_MODEL = "deepseek-v4-flash" +DEFAULT_DEEPSEEK_MODEL = "deepseek-flash" +# Intentionally stronger than the provider default of high. DEFAULT_DEEPSEEK_REASONING_EFFORT = "max" SUPPORTED_DEEPSEEK_MODELS: Final = ( DEFAULT_DEEPSEEK_MODEL, + "deepseek-v4-flash", "deepseek-v4-flash-vision-exp", "deepseek-v4-pro", ) diff --git a/tests/unit/fast_agent/llm/providers/test_deepseek_responses.py b/tests/unit/fast_agent/llm/providers/test_deepseek_responses.py index 018b02538..71ca444a2 100644 --- a/tests/unit/fast_agent/llm/providers/test_deepseek_responses.py +++ b/tests/unit/fast_agent/llm/providers/test_deepseek_responses.py @@ -13,7 +13,6 @@ from fast_agent.llm.provider.openai.llm_deepseek import ( DEEPSEEK_BASE_URL, DEFAULT_DEEPSEEK_MODEL, - DEFAULT_DEEPSEEK_REASONING_EFFORT, SUPPORTED_DEEPSEEK_MODELS, DeepSeekResponsesLLM, ) @@ -76,16 +75,20 @@ def test_deepseek_factory_builds_sse_responses_adapter() -> None: assert llm.configured_transport == "sse" -def test_deepseek_vision_model_serializes_inline_image_for_responses() -> None: +@pytest.mark.parametrize( + "model", ["deepseek-flash", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp"] +) +@pytest.mark.parametrize("mime", ["image/jpeg", "image/png", "image/gif", "image/webp"]) +def test_deepseek_vision_model_serializes_inline_image_for_responses(model: str, mime: str) -> None: llm = DeepSeekResponsesLLM( context=Context(config=Settings()), - model="deepseek-v4-flash-vision-exp", + model=model, ) parts = llm._convert_content_parts( [ TextContent(type="text", text="What is in this image?"), - ImageContent(type="image", data="aW1hZ2U=", mime_type="image/png"), + ImageContent(type="image", data="aW1hZ2U=", mime_type=mime), ], role="user", ) @@ -94,7 +97,7 @@ def test_deepseek_vision_model_serializes_inline_image_for_responses() -> None: {"type": "input_text", "text": "What is in this image?"}, { "type": "input_image", - "image_url": "data:image/png;base64,aW1hZ2U=", + "image_url": f"data:{mime};base64,aW1hZ2U=", }, ] @@ -122,8 +125,8 @@ def test_deepseek_rejects_websocket_transport() -> None: @pytest.mark.parametrize( ("reasoning", "wire_effort"), [ - (None, DEFAULT_DEEPSEEK_REASONING_EFFORT), - (True, DEFAULT_DEEPSEEK_REASONING_EFFORT), + (None, "max"), + (True, "max"), ("low", "low"), ("high", "high"), ("max", "max"), diff --git a/tests/unit/fast_agent/llm/providers/test_provider_default_models.py b/tests/unit/fast_agent/llm/providers/test_provider_default_models.py index 7055c6348..f27718e23 100644 --- a/tests/unit/fast_agent/llm/providers/test_provider_default_models.py +++ b/tests/unit/fast_agent/llm/providers/test_provider_default_models.py @@ -176,15 +176,15 @@ def test_huggingface_provider_default_model_used_with_provider_suffix() -> None: assert request["model"] == "moonshotai/kimi-k2-instruct:fireworks-ai" -def test_deepseek_provider_defaults_to_v4_flash() -> None: +def test_deepseek_provider_defaults_to_v41_flash() -> None: llm = DeepSeekResponsesLLM(context=Context(config=Settings()), model="") - assert llm.default_request_params.model == "deepseek-v4-flash" + assert llm.default_request_params.model == "deepseek-flash" @pytest.mark.parametrize( "model", - ["deepseek-v4-flash", "deepseek-v4-flash-vision-exp", "deepseek-v4-pro"], + ["deepseek-flash", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp", "deepseek-v4-pro"], ) def test_deepseek_provider_config_default_model_used_when_model_missing(model: str) -> None: settings = Settings(deepseek=DeepSeekSettings(default_model=model)) diff --git a/tests/unit/fast_agent/llm/test_model_database.py b/tests/unit/fast_agent/llm/test_model_database.py index 84c013bdb..95e6a843f 100644 --- a/tests/unit/fast_agent/llm/test_model_database.py +++ b/tests/unit/fast_agent/llm/test_model_database.py @@ -552,7 +552,7 @@ def test_model_database_supports_mime_basic(): ) # Text-only models should not support images - assert not ModelDatabase.supports_mime("deepseek-v4-flash", "image/png") + assert not ModelDatabase.supports_mime("deepseek-v4-pro", "image/png") assert not ModelDatabase.supports_mime("deepseek-v4-flash", "pdf") assert not ModelDatabase.supports_mime( "deepseek-v4-flash", @@ -568,8 +568,26 @@ def test_model_database_supports_mime_basic(): assert ModelDatabase.supports_mime("gpt-4o", "png") +@pytest.mark.parametrize( + "model", ["deepseek-flash", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp"] +) +def test_deepseek_flash_capabilities(model: str) -> None: + params = ModelDatabase.get_model_params(model) + assert params is not None + assert params.context_window == 1_048_576 + assert params.max_output_tokens == 393_216 + for mime in ("image/jpeg", "image/png", "image/gif", "image/webp"): + assert ModelDatabase.supports_mime(model, mime) + assert not ModelDatabase.supports_mime(model, "application/pdf") + + +def test_deepseek_hf_flash_remains_text_only() -> None: + assert not ModelDatabase.supports_mime("deepseek-ai/DeepSeek-V4-Flash-0731", "image/png") + + def test_deepseek_v4_flash_uses_learned_shell_contract() -> None: for model_name in ( + "deepseek-flash", "deepseek-v4-flash", "deepseek-v4-pro", "deepseek-ai/DeepSeek-V4-Flash-0731", diff --git a/tests/unit/fast_agent/llm/test_model_factory.py b/tests/unit/fast_agent/llm/test_model_factory.py index ede3aac36..d06616648 100644 --- a/tests/unit/fast_agent/llm/test_model_factory.py +++ b/tests/unit/fast_agent/llm/test_model_factory.py @@ -1122,10 +1122,11 @@ def test_gemini38_flash_aliases_resolve_to_current_google_flash(alias: str) -> N assert config.model_name == "gemini-3.8-flash" -def test_deepseek_alias_resolves_to_deepseek_responses_model(): - config = ModelFactory.parse_model_string("deepseek") +@pytest.mark.parametrize("alias", ["deepseek", "deepseekvision", "DeepSeek V4.1 Flash"]) +def test_deepseek_alias_resolves_to_deepseek_responses_model(alias: str) -> None: + config = ModelFactory.parse_model_string(alias) assert config.provider == Provider.DEEPSEEK - assert config.model_name == "deepseek-v4-flash" + assert config.model_name == "deepseek-flash" def test_deepseek_pro_alias_resolves_to_deepseek_responses_model() -> None: @@ -1137,7 +1138,7 @@ def test_deepseek_pro_alias_resolves_to_deepseek_responses_model() -> None: @pytest.mark.parametrize( "model", - ("deepseekvision", "deepseek-v4-flash-vision-exp"), + ("deepseek-v4-flash-vision-exp",), ) def test_deepseek_vision_model_resolves_to_deepseek_responses(model: str) -> None: config = ModelFactory.parse_model_string(model) @@ -1155,7 +1156,7 @@ def test_deepseek_hf_aliases_resolve_to_hf_deepseek_v4_pro(): @pytest.mark.parametrize( "model", - ["deepseek-v4-flash", "deepseek-v4-flash-vision-exp", "deepseek-v4-pro"], + ["deepseek-flash", "deepseek-v4-flash", "deepseek-v4-flash-vision-exp", "deepseek-v4-pro"], ) def test_deepseek_responses_model_resolves_to_official_provider(model: str) -> None: config = ModelFactory.parse_model_string(model) diff --git a/tests/unit/fast_agent/llm/test_model_selection_catalog.py b/tests/unit/fast_agent/llm/test_model_selection_catalog.py index 402e7e9d0..1ce0ddf82 100644 --- a/tests/unit/fast_agent/llm/test_model_selection_catalog.py +++ b/tests/unit/fast_agent/llm/test_model_selection_catalog.py @@ -139,7 +139,7 @@ def test_gpt_6_astra_is_available_through_codex_and_api_routes() -> None: def test_deepseek_catalog_exposes_native_responses_models() -> None: aliases = ModelSelectionCatalog.list_current_aliases(Provider.DEEPSEEK) - assert aliases == ["deepseek", "deepseekvision", "DeepSeek V4 Pro"] + assert aliases == ["DeepSeek V4.1 Flash", "DeepSeek V4 Pro"] def test_non_current_aliases_are_listed_but_not_current() -> None: From 12b287388fdf80f1bb72c6a9989fc6431f2c1f1d Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Thu, 10 Sep 2026 08:48:21 +0100 Subject: [PATCH 2/2] version bumps --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2c1678874..5158d9b4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "fast-agent-mcp" -version = "0.10.22" +version = "0.10.23" description = "Code, Build and Evaluate agents - excellent Model and Skills/MCP/ACP/A2A Support" readme = "README.md" license = { file = "LICENSE" } diff --git a/uv.lock b/uv.lock index 8b9b30f3e..28931eb57 100644 --- a/uv.lock +++ b/uv.lock @@ -903,7 +903,7 @@ requires-dist = [{ name = "fast-agent-mcp", editable = "." }] [[package]] name = "fast-agent-mcp" -version = "0.10.22" +version = "0.10.23" source = { editable = "." } dependencies = [ { name = "a2a-sdk" },