From a413c562a36c600dcf8a0f8a7cf5753cc440bc51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 19:16:58 +0800 Subject: [PATCH 1/7] docs: update Pro pricing to reflect permanent 75% discount --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ef6a2d29d..90deb49a1 100644 --- a/README.md +++ b/README.md @@ -462,11 +462,10 @@ DeepSeek Platform defaults to `https://api.deepseek.com/beta` so beta-gated API Legacy aliases `deepseek-chat` / `deepseek-reasoner` map to `deepseek-v4-flash` and retire after July 24, 2026. NVIDIA NIM variants use your NVIDIA account terms. -*DeepSeek Pro rates currently reflect a limited-time 75% discount, which remains valid until 15:59 UTC on 31 May 2026. After that time, the TUI cost estimator will revert to the base Pro rates.* +*DeepSeek Pro rates now reflect a permanent 75% discount. The TUI cost estimator will continue to display these permanently discounted Pro rates.* > [!Note] -> For the latest DeepSeek-V4-Pro pricing, including the current 75% discount valid until 15:59 UTC on 31 May 2026, please consult the official [DeepSeek pricing page](https://api-docs.deepseek.com/zh-cn/quick_start/pricing). All rates listed in the README correspond to the officially published values. - +> DeepSeek-V4-Pro was previously offered at a 75% discount originally scheduled to end at 15:59 UTC on 31 May 2026. This discount has now been made permanent. For the latest pricing, please consult the official [DeepSeek pricing page](https://api-docs.deepseek.com/zh-cn/quick_start/pricing). All rates listed in the README correspond to the officially published values. --- ## Publishing Your Own Skill From 1c0e88764b346f5a9fad8a7748067e9b4d0f6e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 19:35:33 +0800 Subject: [PATCH 2/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 90deb49a1..668f0cc24 100644 --- a/README.md +++ b/README.md @@ -465,7 +465,7 @@ Legacy aliases `deepseek-chat` / `deepseek-reasoner` map to `deepseek-v4-flash` *DeepSeek Pro rates now reflect a permanent 75% discount. The TUI cost estimator will continue to display these permanently discounted Pro rates.* > [!Note] -> DeepSeek-V4-Pro was previously offered at a 75% discount originally scheduled to end at 15:59 UTC on 31 May 2026. This discount has now been made permanent. For the latest pricing, please consult the official [DeepSeek pricing page](https://api-docs.deepseek.com/zh-cn/quick_start/pricing). All rates listed in the README correspond to the officially published values. +> DeepSeek-V4-Pro was previously offered at a 75% discount originally scheduled to end at 15:59 UTC on 31 May 2026. This discount has now been made permanent. For the latest pricing, please consult the official [DeepSeek pricing page](https://api-docs.deepseek.com/quick_start/pricing). All rates listed in the README correspond to the officially published values. --- ## Publishing Your Own Skill From a2bf1d50e4c22f08c5a41cc89280ccf050727ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 19:39:14 +0800 Subject: [PATCH 3/7] Update DeepSeek Pro pricing to permanent discount MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新 DeepSeek Pro 的定价信息为永久 75% 折扣,并调整相关说明。 --- README.zh-CN.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.zh-CN.md b/README.zh-CN.md index 89eb04f53..600f74809 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -445,11 +445,10 @@ LANG=zh_CN.UTF-8 deepseek run 旧别名 `deepseek-chat` / `deepseek-reasoner` 映射到 `deepseek-v4-flash`。NVIDIA NIM 变体使用你的 NVIDIA 账号条款。 -*DeepSeek Pro 价格是限时 75% 折扣,有效期到 2026-05-31 15:59 UTC;该时间之后 TUI 成本估算会回退到 Pro 基础价格。* +*DeepSeek Pro 价格现已改为永久 75% 折扣。TUI 成本估算器将持续显示此永久折扣价格。* > [!Note] -> 关于 DeepSeek-V4-Pro 的最新定价信息,请参阅官方 [DeepSeek 定价页面](https://api-docs.deepseek.com/zh-cn/quick_start/pricing),请注意目前可享受 75% 的折扣,该优惠有效期至 **2026 年 5 月 31 日 23:59(北京时间)**。此外,README 文档中所列出的所有价格,均与官方发布的数值保持一致。 - +> DeepSeek-V4-Pro 此前提供的 75% 折扣原定于北京时间 2026 年 5 月 31 日 23:59 结束,现已改为永久折扣。关于最新定价信息,请参阅官方 [DeepSeek 定价页面](https://api-docs.deepseek.com/zh-cn/quick_start/pricing)。README 文档中所列出的所有价格,均与官方发布的数值保持一致。 --- ## 创建和安装技能 From 3e914ec56e1c308d99d5189baeb4eefd12e3b41c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 19:40:51 +0800 Subject: [PATCH 4/7] Revise DeepSeek Pro pricing to permanent discount Updated pricing information for DeepSeek Pro to reflect permanent discount. --- README.ja-JP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ja-JP.md b/README.ja-JP.md index 220e85e20..a7fc29c27 100644 --- a/README.ja-JP.md +++ b/README.ja-JP.md @@ -335,7 +335,7 @@ UI のロケールはモデルの言語とは別です。`settings.toml` で `lo レガシーエイリアス `deepseek-chat` / `deepseek-reasoner` は `deepseek-v4-flash` にマップされます。NVIDIA NIM のバリアントはあなたの NVIDIA アカウント条件に従います。 -*DeepSeek Pro の料金は現在、期間限定で 75% の割引が適用されており、2026 年 5 月 31 日 15:59 UTC まで有効です。それ以降、TUI のコスト見積もりは Pro の通常料金に戻ります。* +**DeepSeek Pro の料金は現在、恒久的な 75% 割引が適用されています。TUI のコスト見積もりは、この恒久割引価格を継続して表示します。* --- From affa269859fbf6cc66736188742c707535f3735e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 19:46:46 +0800 Subject: [PATCH 5/7] Remove temporary discount logic for v4 Pro model --- crates/tui/src/pricing.rs | 92 +++++++++++++++------------------------ 1 file changed, 36 insertions(+), 56 deletions(-) diff --git a/crates/tui/src/pricing.rs b/crates/tui/src/pricing.rs index 750f9830b..2b1b02c91 100644 --- a/crates/tui/src/pricing.rs +++ b/crates/tui/src/pricing.rs @@ -70,12 +70,6 @@ struct ModelPricing { cny: CurrencyPricing, } -fn v4_pro_discount_ends_at() -> DateTime { - Utc.with_ymd_and_hms(2026, 5, 31, 15, 59, 0) - .single() - .expect("valid DeepSeek V4 Pro discount end timestamp") -} - /// Look up pricing for a model name. fn pricing_for_model(model: &str) -> Option { pricing_for_model_at(model, Utc::now()) @@ -92,34 +86,19 @@ fn pricing_for_model_at(model: &str, now: DateTime) -> Option return None; } if lower.contains("v4-pro") || lower.contains("v4pro") { - if now <= v4_pro_discount_ends_at() { - // DeepSeek lists these as a limited-time 75% discount through - // 2026-05-31 15:59 UTC. - return Some(ModelPricing { - usd: CurrencyPricing { - input_cache_hit_per_million: 0.003625, - input_cache_miss_per_million: 0.435, - output_per_million: 0.87, - }, - cny: CurrencyPricing { - input_cache_hit_per_million: 0.025, - input_cache_miss_per_million: 3.0, - output_per_million: 6.0, - }, - }); - } - Some(ModelPricing { + // DeepSeek lists these as a permanent 75% discount. + return Some(ModelPricing { usd: CurrencyPricing { - input_cache_hit_per_million: 0.0145, - input_cache_miss_per_million: 1.74, - output_per_million: 3.48, + input_cache_hit_per_million: 0.003625, + input_cache_miss_per_million: 0.435, + output_per_million: 0.87, }, cny: CurrencyPricing { - input_cache_hit_per_million: 0.1, - input_cache_miss_per_million: 12.0, - output_per_million: 24.0, + input_cache_hit_per_million: 0.025, + input_cache_miss_per_million: 3.0, + output_per_million: 6.0, }, - }) + }); } else { // deepseek-v4-flash pricing. Some(ModelPricing { @@ -248,12 +227,10 @@ mod tests { } #[test] - fn v4_pro_uses_limited_time_discount_before_expiry() { - let before_expiry = Utc - .with_ymd_and_hms(2026, 5, 31, 15, 58, 59) - .single() - .unwrap(); - let pricing = pricing_for_model_at("deepseek-v4-pro", before_expiry).unwrap(); + fn v4_pro_always_uses_permanent_discount() { + // Discount is now permanent, should apply at any time. + let now = Utc::now(); + let pricing = pricing_for_model_at("deepseek-v4-pro", now).unwrap(); assert_eq!(pricing.usd.input_cache_hit_per_million, 0.003625); assert_eq!(pricing.usd.input_cache_miss_per_million, 0.435); @@ -264,30 +241,33 @@ mod tests { } #[test] - fn v4_pro_returns_to_base_rates_after_discount_expiry() { - let after_expiry = Utc - .with_ymd_and_hms(2026, 5, 31, 16, 0, 0) - .single() - .unwrap(); - let pricing = pricing_for_model_at("deepseek-v4-pro", after_expiry).unwrap(); - - assert_eq!(pricing.usd.input_cache_hit_per_million, 0.0145); - assert_eq!(pricing.usd.input_cache_miss_per_million, 1.74); - assert_eq!(pricing.usd.output_per_million, 3.48); - assert_eq!(pricing.cny.input_cache_hit_per_million, 0.1); - assert_eq!(pricing.cny.input_cache_miss_per_million, 12.0); - assert_eq!(pricing.cny.output_per_million, 24.0); - } - - #[test] - fn v4_pro_discount_still_applies_just_before_old_may5_expiry() { - // Regression for #267: extension to 2026-05-31 15:59 UTC. - let after_old_expiry = Utc.with_ymd_and_hms(2026, 5, 6, 0, 0, 0).single().unwrap(); - let pricing = pricing_for_model_at("deepseek-v4-pro", after_old_expiry).unwrap(); + fn v4_pro_discount_does_not_revert_to_base_rates_in_future() { + // Permanent discount should still apply far in the future. + let far_future = Utc.with_ymd_and_hms(2030, 1, 1, 0, 0, 0).single().unwrap(); + let pricing = pricing_for_model_at("deepseek-v4-pro", far_future).unwrap(); assert_eq!(pricing.usd.input_cache_hit_per_million, 0.003625); assert_eq!(pricing.usd.input_cache_miss_per_million, 0.435); assert_eq!(pricing.usd.output_per_million, 0.87); + assert_eq!(pricing.cny.input_cache_hit_per_million, 0.025); + assert_eq!(pricing.cny.input_cache_miss_per_million, 3.0); + assert_eq!(pricing.cny.output_per_million, 6.0); + } + + #[test] + fn v4_pro_permanent_discount_applies_consistently() { + // Permanent discount applies at various points in time. + let dates = [ + Utc.with_ymd_and_hms(2026, 5, 6, 0, 0, 0).single().unwrap(), + Utc.with_ymd_and_hms(2026, 6, 1, 0, 0, 0).single().unwrap(), + Utc.with_ymd_and_hms(2027, 1, 1, 0, 0, 0).single().unwrap(), + ]; + for date in dates { + let pricing = pricing_for_model_at("deepseek-v4-pro", date).unwrap(); + assert_eq!(pricing.cny.input_cache_hit_per_million, 0.025); + assert_eq!(pricing.cny.input_cache_miss_per_million, 3.0); + assert_eq!(pricing.cny.output_per_million, 6.0); + } } #[test] From b37f9092cbc4e03376eca83cfab13a119f658e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 19:58:00 +0800 Subject: [PATCH 6/7] Revise DeepSeek Pro pricing and discount details Updated pricing information for DeepSeek Pro to reflect permanent 75% discount and adjusted note regarding discount expiration. --- README.ja-JP.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.ja-JP.md b/README.ja-JP.md index a7fc29c27..dc3e31cbf 100644 --- a/README.ja-JP.md +++ b/README.ja-JP.md @@ -337,6 +337,9 @@ UI のロケールはモデルの言語とは別です。`settings.toml` で `lo **DeepSeek Pro の料金は現在、恒久的な 75% 割引が適用されています。TUI のコスト見積もりは、この恒久割引価格を継続して表示します。* +> [!Note] +> DeepSeek-V4-Pro の 75% 割引は、当初 2026 年 5 月 31 日 23:59(北京時間)に終了する予定でしたが、現在は恒久的な割引となりました。最新の価格情報については、公式の [DeepSeek 価格ページ](https://api-docs.deepseek.com/quick_start/pricing) をご確認ください。README に記載されているすべての料金は、公式に公開されている数値と一致しています。 + --- ## 自分のスキルを公開する From 17a66c13c43ff4a3b976f17a5b3a53a6e359ed2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5F=E2=80=AD=E2=81=A7HachiMahiro=E5=93=88=E5=9F=BA?= =?UTF-8?q?=E5=AF=BB=E2=81=A7=E2=80=AD?= Date: Sat, 23 May 2026 20:09:30 +0800 Subject: [PATCH 7/7] Refactor pricing_for_model_at function parameters --- crates/tui/src/pricing.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/tui/src/pricing.rs b/crates/tui/src/pricing.rs index 2b1b02c91..c4bfebe4b 100644 --- a/crates/tui/src/pricing.rs +++ b/crates/tui/src/pricing.rs @@ -2,7 +2,7 @@ //! //! Pricing based on DeepSeek's published rates (per million tokens). -use chrono::{DateTime, TimeZone, Utc}; +use chrono::{DateTime, Utc}; use crate::models::Usage; @@ -75,7 +75,7 @@ fn pricing_for_model(model: &str) -> Option { pricing_for_model_at(model, Utc::now()) } -fn pricing_for_model_at(model: &str, now: DateTime) -> Option { +fn pricing_for_model_at(model: &str, _now: DateTime) -> Option { let lower = model.to_lowercase(); if lower.starts_with("deepseek-ai/") { // NVIDIA NIM-hosted DeepSeek uses NVIDIA's catalog/account terms, not @@ -87,7 +87,7 @@ fn pricing_for_model_at(model: &str, now: DateTime) -> Option } if lower.contains("v4-pro") || lower.contains("v4pro") { // DeepSeek lists these as a permanent 75% discount. - return Some(ModelPricing { + Some(ModelPricing { usd: CurrencyPricing { input_cache_hit_per_million: 0.003625, input_cache_miss_per_million: 0.435, @@ -98,7 +98,7 @@ fn pricing_for_model_at(model: &str, now: DateTime) -> Option input_cache_miss_per_million: 3.0, output_per_million: 6.0, }, - }); + }) } else { // deepseek-v4-flash pricing. Some(ModelPricing { @@ -220,6 +220,7 @@ pub fn format_cost_estimate(estimate: CostEstimate, currency: CostCurrency) -> S #[cfg(test)] mod tests { use super::*; + use chrono::TimeZone; #[test] fn nvidia_nim_deepseek_model_does_not_use_deepseek_platform_pricing() {