From 8d6c15f924be4b725ce8ae2a0f49bb0b9f796e94 Mon Sep 17 00:00:00 2001 From: Carson Date: Mon, 14 Sep 2026 11:58:10 -0500 Subject: [PATCH 1/2] fix(merge): reorder branches so streaming deltas always concatenate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `merge_dicts()` had an equality check (`left_v == right_v → continue`) before the str/dict/list branches. When a streamed text delta happened to equal the full accumulation so far (e.g. "\n" + "\n"), the second delta was silently dropped — both at the string-leaf level and at the container level (an equal dict skipped recursion entirely). Move the str/dict/list branches before the equality check, matching langchain's original ordering. Strings always concatenate, containers always recurse, and the equality check now only applies to remaining scalar types (int, float, bool). Closes #435 --- chatlas/_merge.py | 12 ++++++------ tests/test_utils_merge.py | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/chatlas/_merge.py b/chatlas/_merge.py index b5a4976a..25b50526 100644 --- a/chatlas/_merge.py +++ b/chatlas/_merge.py @@ -39,16 +39,16 @@ def merge_dicts(left: dict[str, Any], *others: dict[str, Any]) -> dict[str, Any] merged[right_k] = None elif left_v is None: merged[right_k] = right_v - elif left_v == right_v: - continue elif isinstance(left_v, str): merged[right_k] += right_v - elif isinstance(left_v, (int, float)): - merged[right_k] = right_v - elif isinstance(merged[right_k], dict): + elif isinstance(left_v, dict): merged[right_k] = merge_dicts(merged[right_k], right_v) - elif isinstance(merged[right_k], list): + elif isinstance(left_v, list): merged[right_k] = merge_lists(merged[right_k], right_v) + elif left_v == right_v: + continue + elif isinstance(left_v, (int, float)): + merged[right_k] = right_v elif type(merged[right_k]) is not type(right_v): raise TypeError( f'additional_kwargs["{right_k}"] already exists in this message,' diff --git a/tests/test_utils_merge.py b/tests/test_utils_merge.py index eabe262d..6d2de074 100644 --- a/tests/test_utils_merge.py +++ b/tests/test_utils_merge.py @@ -14,14 +14,27 @@ def test_equal_values(): assert merge_dicts({"a": True}, {"a": True}) == {"a": True} assert merge_dicts({"a": False}, {"a": False}) == {"a": False} - assert merge_dicts({"a": "x"}, {"a": "x"}) == {"a": "x"} - -def test_strings_are_concatenated(): +def test_strings_are_always_concatenated(): + # Strings always concatenate, even when equal. This is essential for + # streaming: a delta can legitimately equal everything accumulated so far + # (e.g. a leading "\n\n" arriving as two "\n" chunks). + # https://github.com/posit-dev/chatlas/issues/435 assert merge_dicts({"a": "a"}, {"a": "b"}) == {"a": "ab"} + assert merge_dicts({"a": "x"}, {"a": "x"}) == {"a": "xx"} + assert merge_dicts({"a": "\n"}, {"a": "\n"}) == {"a": "\n\n"} assert merge_dicts({"a": {"b": "a"}}, {"a": {"b": "b"}}) == {"a": {"b": "ab"}} +def test_equal_dicts_still_recurse(): + # Equal dicts must recurse — they can carry accumulating string leaves. + # https://github.com/posit-dev/chatlas/issues/435 + assert merge_dicts( + {"delta": {"content": "\n", "role": "assistant"}}, + {"delta": {"content": "\n", "role": "assistant"}}, + ) == {"delta": {"content": "\n\n", "role": "assistantassistant"}} + + def test_merge_dictionaries_with_different_keys(): assert merge_dicts({"a": 1, "b": 2}, {"a": 1}) == {"a": 1, "b": 2} From ac3d807b0ee652a1dbc2bad9aeb286528fe1d0c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Sep 2026 17:02:44 +0000 Subject: [PATCH 2/2] chore: update provider types and pricing data --- chatlas/data/prices.json | 555 +++++++++++++++++++++++++++++++++------ 1 file changed, 480 insertions(+), 75 deletions(-) diff --git a/chatlas/data/prices.json b/chatlas/data/prices.json index e8c153f9..fda41e4e 100644 --- a/chatlas/data/prices.json +++ b/chatlas/data/prices.json @@ -1,7 +1,7 @@ { "schema_version": 1, "min_ellmer_version": "0.5.0", - "updated_at": "2026-09-07T11:15:25Z", + "updated_at": "2026-09-14T11:25:04Z", "data": [ { "provider": "AWS/Bedrock", @@ -1066,9 +1066,9 @@ "provider": "AWS/Bedrock", "model": "eu.anthropic.claude-3-5-haiku-20241022-v1:0", "variant": "", - "input": 0.25, - "output": 1.25, - "cached_input": 0.025 + "input": 0.8, + "output": 4, + "cached_input": 0.08 }, { "provider": "AWS/Bedrock", @@ -1288,13 +1288,6 @@ "input": 2, "output": 6 }, - { - "provider": "AWS/Bedrock", - "model": "eu.twelvelabs.marengo-embed-2-7-v1:0", - "variant": "", - "input": 70, - "output": 0 - }, { "provider": "AWS/Bedrock", "model": "eu.twelvelabs.pegasus-1-2-v1:0", @@ -1435,6 +1428,13 @@ "output": 10, "cached_input": 0.2 }, + { + "provider": "AWS/Bedrock", + "model": "global.cohere.embed-v4:0", + "variant": "", + "input": 0.12, + "output": 0 + }, { "provider": "AWS/Bedrock", "model": "global.openai.gpt-5.6-luna", @@ -1483,6 +1483,28 @@ "output": 18, "cached_input": 0.4 }, + { + "provider": "AWS/Bedrock", + "model": "global.openai.gpt-6-astra", + "variant": "", + "input": 10, + "output": 50, + "cached_input": 1 + }, + { + "provider": "AWS/Bedrock", + "model": "global.openai.gpt-6-astra", + "variant": "above_272k_tokens", + "input": 20, + "output": 75, + "cached_input": 2 + }, + { + "provider": "AWS/Bedrock", + "model": "global.twelvelabs.pegasus-1-2-v1:0", + "variant": "", + "output": 7.5 + }, { "provider": "AWS/Bedrock", "model": "global.xai.grok-4.6", @@ -1980,6 +2002,38 @@ "output": 19.8, "cached_input": 0.44 }, + { + "provider": "AWS/Bedrock", + "model": "openai.gpt-6-astra", + "variant": "", + "input": 11, + "output": 55, + "cached_input": 1.1 + }, + { + "provider": "AWS/Bedrock", + "model": "openai.gpt-6-astra", + "variant": "above_272k_tokens", + "input": 22, + "output": 82.5, + "cached_input": 2.2 + }, + { + "provider": "AWS/Bedrock", + "model": "openai.gpt-daybreak-blue-5.6-sol", + "variant": "", + "input": 5.5, + "output": 33, + "cached_input": 0.55 + }, + { + "provider": "AWS/Bedrock", + "model": "openai.gpt-daybreak-blue-5.6-sol", + "variant": "above_272k_tokens", + "input": 11, + "output": 49.5, + "cached_input": 1.1 + }, { "provider": "AWS/Bedrock", "model": "openai.gpt-oss-120b", @@ -1998,7 +2052,7 @@ "provider": "AWS/Bedrock", "model": "openai.gpt-oss-20b", "variant": "", - "input": 0.075, + "input": 0.07, "output": 0.3 }, { @@ -2134,13 +2188,6 @@ "input": 0.6, "output": 1.44 }, - { - "provider": "AWS/Bedrock", - "model": "twelvelabs.marengo-embed-2-7-v1:0", - "variant": "", - "input": 70, - "output": 0 - }, { "provider": "AWS/Bedrock", "model": "twelvelabs.pegasus-1-2-v1:0", @@ -2352,6 +2399,14 @@ "output": 1.5, "cached_input": 0.03 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-east-1/anthropic.claude-fable-5-1", + "variant": "", + "input": 12, + "output": 60, + "cached_input": 0.3 + }, { "provider": "AWS/Bedrock", "model": "us-gov-east-1/anthropic.claude-haiku-4-5-20251001-v1:0", @@ -2368,6 +2423,14 @@ "output": 30, "cached_input": 0.6 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-east-1/anthropic.claude-opus-5", + "variant": "", + "input": 6, + "output": 30, + "cached_input": 0.6 + }, { "provider": "AWS/Bedrock", "model": "us-gov-east-1/anthropic.claude-sonnet-4-5-20250929-v1:0", @@ -2420,6 +2483,13 @@ "input": 0.072, "output": 0.288 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-east-1/nvidia.nemotron-nano-9b-v2", + "variant": "", + "input": 0.072, + "output": 0.276 + }, { "provider": "AWS/Bedrock", "model": "us-gov-east-1/nvidia.nemotron-super-3-120b", @@ -2435,6 +2505,13 @@ "output": 19.8, "cached_input": 0.33 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-east-1/openai.gpt-oss-120b", + "variant": "", + "input": 0.18, + "output": 0.72 + }, { "provider": "AWS/Bedrock", "model": "us-gov-east-1/openai.gpt-oss-120b-1:0", @@ -2442,6 +2519,13 @@ "input": 0.18, "output": 0.72 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-east-1/openai.gpt-oss-20b", + "variant": "", + "input": 0.084, + "output": 0.36 + }, { "provider": "AWS/Bedrock", "model": "us-gov-east-1/openai.gpt-oss-20b-1:0", @@ -2449,6 +2533,35 @@ "input": 0.084, "output": 0.36 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-east-1/xai.grok-4.6", + "variant": "", + "input": 2.64, + "output": 7.92, + "cached_input": 0.66 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/amazon.nova-2-multimodal-embeddings-v1:0", + "variant": "", + "input": 0.162, + "output": 0 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/amazon.nova-lite-v1:0", + "variant": "", + "input": 0.072, + "output": 0.288 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/amazon.nova-micro-v1:0", + "variant": "", + "input": 0.042, + "output": 0.168 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/amazon.nova-pro-v1:0", @@ -2515,6 +2628,14 @@ "output": 1.5, "cached_input": 0.03 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/anthropic.claude-fable-5-1", + "variant": "", + "input": 12, + "output": 60, + "cached_input": 0.3 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/anthropic.claude-haiku-4-5-20251001-v1:0", @@ -2531,6 +2652,14 @@ "output": 30, "cached_input": 0.6 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/anthropic.claude-opus-5", + "variant": "", + "input": 6, + "output": 30, + "cached_input": 0.6 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/anthropic.claude-sonnet-4-5-20250929-v1:0", @@ -2555,6 +2684,27 @@ "output": 18, "cached_input": 0.36 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/google.gemma-4-26b-a4b", + "variant": "", + "input": 0.156, + "output": 0.48 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/google.gemma-4-31b", + "variant": "", + "input": 0.168, + "output": 0.48 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/google.gemma-4-e2b", + "variant": "", + "input": 0.048, + "output": 0.096 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/meta.llama3-70b-instruct-v1:0", @@ -2583,6 +2733,13 @@ "input": 0.072, "output": 0.288 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/nvidia.nemotron-nano-9b-v2", + "variant": "", + "input": 0.072, + "output": 0.276 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/nvidia.nemotron-super-3-120b", @@ -2630,6 +2787,13 @@ "output": 23.76, "cached_input": 0.528 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/openai.gpt-oss-120b", + "variant": "", + "input": 0.18, + "output": 0.72 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/openai.gpt-oss-120b-1:0", @@ -2637,6 +2801,13 @@ "input": 0.18, "output": 0.72 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/openai.gpt-oss-20b", + "variant": "", + "input": 0.084, + "output": 0.36 + }, { "provider": "AWS/Bedrock", "model": "us-gov-west-1/openai.gpt-oss-20b-1:0", @@ -2652,6 +2823,30 @@ "output": 3, "cached_input": 0.24 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov-west-1/xai.grok-4.6", + "variant": "", + "input": 2.64, + "output": 7.92, + "cached_input": 0.66 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.anthropic.claude-3-haiku-20240307-v1:0", + "variant": "", + "input": 0.3, + "output": 1.5, + "cached_input": 0.03 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.anthropic.claude-fable-5-1", + "variant": "", + "input": 12, + "output": 60, + "cached_input": 0.3 + }, { "provider": "AWS/Bedrock", "model": "us-gov.anthropic.claude-opus-4-8", @@ -2660,6 +2855,14 @@ "output": 30, "cached_input": 0.6 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.anthropic.claude-opus-5", + "variant": "", + "input": 6, + "output": 30, + "cached_input": 0.6 + }, { "provider": "AWS/Bedrock", "model": "us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0", @@ -2684,6 +2887,56 @@ "output": 12, "cached_input": 0.24 }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.nvidia.nemotron-nano-12b-v2", + "variant": "", + "input": 0.24, + "output": 0.72 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.nvidia.nemotron-nano-3-30b", + "variant": "", + "input": 0.072, + "output": 0.288 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.nvidia.nemotron-nano-9b-v2", + "variant": "", + "input": 0.072, + "output": 0.276 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.nvidia.nemotron-super-3-120b", + "variant": "", + "input": 0.18, + "output": 0.78 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.openai.gpt-oss-120b-1:0", + "variant": "", + "input": 0.18, + "output": 0.72 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.openai.gpt-oss-20b-1:0", + "variant": "", + "input": 0.084, + "output": 0.36 + }, + { + "provider": "AWS/Bedrock", + "model": "us-gov.xai.grok-4.6", + "variant": "", + "input": 2.64, + "output": 7.92, + "cached_input": 0.66 + }, { "provider": "AWS/Bedrock", "model": "us-west-1/meta.llama3-70b-instruct-v1:0", @@ -3031,6 +3284,13 @@ "output": 11, "cached_input": 0.22 }, + { + "provider": "AWS/Bedrock", + "model": "us.cohere.embed-v4:0", + "variant": "", + "input": 0.12, + "output": 0 + }, { "provider": "AWS/Bedrock", "model": "us.deepseek.r1-v1:0", @@ -3186,10 +3446,19 @@ }, { "provider": "AWS/Bedrock", - "model": "us.twelvelabs.marengo-embed-2-7-v1:0", + "model": "us.openai.gpt-6-astra", "variant": "", - "input": 70, - "output": 0 + "input": 11, + "output": 55, + "cached_input": 1.1 + }, + { + "provider": "AWS/Bedrock", + "model": "us.openai.gpt-6-astra", + "variant": "above_272k_tokens", + "input": 22, + "output": 82.5, + "cached_input": 2.2 }, { "provider": "AWS/Bedrock", @@ -7833,6 +8102,13 @@ "output": 6, "cached_input": 0.375 }, + { + "provider": "OpenAI", + "model": "computer-use-preview", + "variant": "", + "input": 3, + "output": 12 + }, { "provider": "OpenAI", "model": "daybreak-blue-latest", @@ -9166,16 +9442,14 @@ "model": "gpt-5.4-pro", "variant": "", "input": 30, - "output": 180, - "cached_input": 3 + "output": 180 }, { "provider": "OpenAI", "model": "gpt-5.4-pro", "variant": "above_272k_tokens", "input": 60, - "output": 270, - "cached_input": 6 + "output": 270 }, { "provider": "OpenAI", @@ -9203,16 +9477,14 @@ "model": "gpt-5.4-pro-2026-03-05", "variant": "", "input": 30, - "output": 180, - "cached_input": 3 + "output": 180 }, { "provider": "OpenAI", "model": "gpt-5.4-pro-2026-03-05", "variant": "above_272k_tokens", "input": 60, - "output": 270, - "cached_input": 6 + "output": 270 }, { "provider": "OpenAI", @@ -9334,16 +9606,14 @@ "model": "gpt-5.5-pro", "variant": "", "input": 30, - "output": 180, - "cached_input": 3 + "output": 180 }, { "provider": "OpenAI", "model": "gpt-5.5-pro", "variant": "above_272k_tokens", "input": 60, - "output": 270, - "cached_input": 6 + "output": 270 }, { "provider": "OpenAI", @@ -9364,16 +9634,14 @@ "model": "gpt-5.5-pro-2026-04-23", "variant": "", "input": 30, - "output": 180, - "cached_input": 3 + "output": 180 }, { "provider": "OpenAI", "model": "gpt-5.5-pro-2026-04-23", "variant": "above_272k_tokens", "input": 60, - "output": 270, - "cached_input": 6 + "output": 270 }, { "provider": "OpenAI", @@ -9798,6 +10066,34 @@ "input": 5, "cached_input": 1.25 }, + { + "provider": "OpenAI", + "model": "gpt-image-2.5-flare", + "variant": "", + "input": 5, + "cached_input": 1.25 + }, + { + "provider": "OpenAI", + "model": "gpt-image-2.5-flare-2026-09-08", + "variant": "", + "input": 5, + "cached_input": 1.25 + }, + { + "provider": "OpenAI", + "model": "gpt-image-2.5-sunburst", + "variant": "", + "input": 5, + "cached_input": 1.25 + }, + { + "provider": "OpenAI", + "model": "gpt-image-2.5-sunburst-2026-09-08", + "variant": "", + "input": 5, + "cached_input": 1.25 + }, { "provider": "OpenAI", "model": "gpt-realtime", @@ -10344,8 +10640,9 @@ "provider": "OpenRouter", "model": "deepseek/deepseek-chat-v3.1", "variant": "", - "input": 0.2, - "output": 0.8 + "input": 0.25, + "output": 0.95, + "cached_input": 0.13 }, { "provider": "OpenRouter", @@ -10405,7 +10702,7 @@ "provider": "OpenRouter", "model": "deepseek/deepseek-v3.2", "variant": "cache_hit", - "input": 0.028 + "input": 0.1345 }, { "provider": "OpenRouter", @@ -10424,9 +10721,9 @@ "provider": "OpenRouter", "model": "deepseek/deepseek-v4-flash", "variant": "", - "input": 0.08778, - "output": 0.17556, - "cached_input": 0.017556 + "input": 0.0854, + "output": 0.1708, + "cached_input": 0.01708 }, { "provider": "OpenRouter", @@ -10448,8 +10745,9 @@ "provider": "OpenRouter", "model": "deepseek/deepseek-v4-pro", "variant": "", - "input": 1.32, - "output": 3.96 + "input": 0.859908, + "output": 1.719816, + "cached_input": 0.071659 }, { "provider": "OpenRouter", @@ -10461,8 +10759,9 @@ "provider": "OpenRouter", "model": "deepseek/deepseek-v4-pro-0813", "variant": "", - "input": 1.32, - "output": 3.96 + "input": 0.57948, + "output": 1.73844, + "cached_input": 0.019316 }, { "provider": "OpenRouter", @@ -10470,6 +10769,14 @@ "variant": "cache_hit", "input": 0.044 }, + { + "provider": "OpenRouter", + "model": "deepseek/deepseek-v4.1-flash", + "variant": "", + "input": 0.15, + "output": 0.6, + "cached_input": 0.003 + }, { "provider": "OpenRouter", "model": "google/gemini-2.0-flash-001", @@ -10730,8 +11037,8 @@ "provider": "OpenRouter", "model": "google/gemma-4-26b-a4b-it", "variant": "", - "input": 0.07, - "output": 0.34 + "input": 0.042, + "output": 0.22 }, { "provider": "OpenRouter", @@ -11069,17 +11376,17 @@ "provider": "OpenRouter", "model": "moonshotai/kimi-k2.7-code", "variant": "", - "input": 0.66, - "output": 3.4, - "cached_input": 0.18 + "input": 0.71, + "output": 3.5, + "cached_input": 0.15 }, { "provider": "OpenRouter", "model": "moonshotai/kimi-k3", "variant": "", - "input": 3, - "output": 15, - "cached_input": 0.3 + "input": 2.1, + "output": 10.53, + "cached_input": 0.235 }, { "provider": "OpenRouter", @@ -11417,6 +11724,54 @@ "output": 1.2, "cached_input": 0.02 }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-luna-pro", + "variant": "", + "input": 0.2, + "output": 1.2, + "cached_input": 0.02 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-luna-pro", + "variant": "above_272k_tokens", + "input": 0.4, + "output": 1.8, + "cached_input": 0.04 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-sol", + "variant": "", + "input": 2, + "output": 10, + "cached_input": 0.2 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-sol", + "variant": "above_272k_tokens", + "input": 4, + "output": 15, + "cached_input": 0.4 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-sol-pro", + "variant": "", + "input": 2, + "output": 10, + "cached_input": 0.2 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-sol-pro", + "variant": "above_272k_tokens", + "input": 4, + "output": 15, + "cached_input": 0.4 + }, { "provider": "OpenRouter", "model": "openai/gpt-5.6-terra", @@ -11425,6 +11780,22 @@ "output": 12, "cached_input": 0.2 }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-terra-pro", + "variant": "", + "input": 2, + "output": 12, + "cached_input": 0.2 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-5.6-terra-pro", + "variant": "above_272k_tokens", + "input": 4, + "output": 18, + "cached_input": 0.4 + }, { "provider": "OpenRouter", "model": "openai/gpt-6-astra", @@ -11441,6 +11812,22 @@ "output": 75, "cached_input": 2 }, + { + "provider": "OpenRouter", + "model": "openai/gpt-6-astra-pro", + "variant": "", + "input": 10, + "output": 50, + "cached_input": 1 + }, + { + "provider": "OpenRouter", + "model": "openai/gpt-6-astra-pro", + "variant": "above_272k_tokens", + "input": 20, + "output": 75, + "cached_input": 2 + }, { "provider": "OpenRouter", "model": "openai/gpt-audio", @@ -11455,6 +11842,14 @@ "input": 0.6, "output": 2.4 }, + { + "provider": "OpenRouter", + "model": "openai/gpt-chat-latest", + "variant": "", + "input": 5, + "output": 30, + "cached_input": 0.5 + }, { "provider": "OpenRouter", "model": "openai/gpt-oss-120b", @@ -11625,8 +12020,8 @@ "provider": "OpenRouter", "model": "qwen/qwen3-14b", "variant": "", - "input": 0.12, - "output": 0.24 + "input": 0.2275, + "output": 0.91 }, { "provider": "OpenRouter", @@ -11639,8 +12034,8 @@ "provider": "OpenRouter", "model": "qwen/qwen3-235b-a22b-2507", "variant": "", - "input": 0.0875, - "output": 0.35 + "input": 0.22, + "output": 0.88 }, { "provider": "OpenRouter", @@ -11660,8 +12055,8 @@ "provider": "OpenRouter", "model": "qwen/qwen3-30b-a3b-instruct-2507", "variant": "", - "input": 0.04815, - "output": 0.19305 + "input": 0.09, + "output": 0.3 }, { "provider": "OpenRouter", @@ -11763,7 +12158,7 @@ "provider": "OpenRouter", "model": "qwen/qwen3-next-80b-a3b-instruct", "variant": "", - "input": 0.1, + "input": 0.09, "output": 1.1, "cached_input": 0.07 }, @@ -11828,8 +12223,8 @@ "provider": "OpenRouter", "model": "qwen/qwen3.5-122b-a10b", "variant": "", - "input": 0.29, - "output": 2.4 + "input": 0.26, + "output": 2.08 }, { "provider": "OpenRouter", @@ -11842,8 +12237,9 @@ "provider": "OpenRouter", "model": "qwen/qwen3.5-35b-a3b", "variant": "", - "input": 0.25, - "output": 1.25 + "input": 0.3125, + "output": 1.25, + "cached_input": 0.15625 }, { "provider": "OpenRouter", @@ -12009,6 +12405,14 @@ "output": 6, "cached_input": 0.25 }, + { + "provider": "OpenRouter", + "model": "qwen/qwen3.8-max-0902", + "variant": "", + "input": 2, + "output": 6, + "cached_input": 0.25 + }, { "provider": "OpenRouter", "model": "switchpoint/router", @@ -12130,8 +12534,9 @@ "provider": "OpenRouter", "model": "z-ai/glm-4.6", "variant": "", - "input": 0.55, - "output": 2.2 + "input": 0.43, + "output": 1.75, + "cached_input": 0.08 }, { "provider": "OpenRouter", @@ -12191,9 +12596,9 @@ "provider": "OpenRouter", "model": "z-ai/glm-5.2", "variant": "", - "input": 0.966, - "output": 3.036, - "cached_input": 0.1932 + "input": 0.6, + "output": 2, + "cached_input": 0.15 }, { "provider": "OpenRouter", @@ -12207,9 +12612,9 @@ "provider": "OpenRouter", "model": "z-ai/glm-5.3-flash", "variant": "", - "input": 0.075, - "output": 0.25, - "cached_input": 0.015 + "input": 0.15, + "output": 0.5, + "cached_input": 0.03 }, { "provider": "OpenRouter",