From 38dcc37040bd5abc8335ed47b0a64288abbafee7 Mon Sep 17 00:00:00 2001 From: Johannes du Plessis Date: Sat, 13 Jun 2026 08:10:04 -0700 Subject: [PATCH] feat: add Kimi K2.7 model option (#1515) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add Kimi K2.7 model option Surface Moonshot's newly released Kimi K2.7 in the model picker, routed through Fireworks following the existing kimi-k2pN convention, with the same none/low/medium/high reasoning efforts (default high) as K2.6. Co-authored-by: open-swe[bot] * fix: correct Kimi K2.7 Fireworks model id to kimi-k2p7-code Fireworks now hosts the K2.7 release as accounts/fireworks/models/kimi-k2p7-code (the `kimi-k2p7` slug 404s). Point the model option and its test at the live model id. Co-authored-by: open-swe[bot] * fix: drop unsupported "none" effort for Kimi K2.7 Kimi K2.7 Code is a thinking-only model — Moonshot documents that it does not support non-thinking mode (passing thinking={"type":"disabled"} or reasoning_effort="none" errors). Removing "none" from the advertised efforts so the picker can't send an invalid Fireworks request. Co-authored-by: open-swe[bot] --------- Co-authored-by: open-swe[bot] --- agent/dashboard/options.py | 7 +++++++ tests/test_fireworks_model.py | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/agent/dashboard/options.py b/agent/dashboard/options.py index efb854fc..78215d83 100644 --- a/agent/dashboard/options.py +++ b/agent/dashboard/options.py @@ -35,6 +35,13 @@ SUPPORTED_MODELS: list[ModelOption] = [ "default_effort": "medium", "supports_images": True, }, + { + "id": "fireworks:accounts/fireworks/models/kimi-k2p7-code", + "label": "Kimi K2.7", + "efforts": ["low", "medium", "high"], + "default_effort": "high", + "supports_images": False, + }, { "id": "fireworks:accounts/fireworks/models/kimi-k2p6", "label": "Kimi K2.6", diff --git a/tests/test_fireworks_model.py b/tests/test_fireworks_model.py index 349a7301..ff68b6cd 100644 --- a/tests/test_fireworks_model.py +++ b/tests/test_fireworks_model.py @@ -25,6 +25,19 @@ def test_provider_model_kwargs_for_fireworks() -> None: assert kwargs["model_kwargs"] == {"reasoning_effort": "high"} +def test_kimi_k2p7_is_supported() -> None: + kimi_k2p7 = next( + (m for m in SUPPORTED_MODELS if m["id"].endswith("kimi-k2p7-code")), + None, + ) + assert kimi_k2p7 is not None + assert kimi_k2p7["efforts"] == ["low", "medium", "high"] + assert "none" not in kimi_k2p7["efforts"] + assert kimi_k2p7["default_effort"] == "high" + kwargs = provider_model_kwargs(kimi_k2p7["id"], "high", max_tokens=16_000) + assert kwargs["model_kwargs"] == {"reasoning_effort": "high"} + + def test_provider_model_kwargs_for_fireworks_none_disables_reasoning() -> None: kwargs = provider_model_kwargs( "fireworks:accounts/fireworks/models/deepseek-v4-pro",