Skip to content

fix(polish): Traditional 模式强制中文字形转换,不再只靠 prompt (#622)#629

Merged
H-Chris233 merged 1 commit into
betafrom
fix/issue-622-enforce-traditional-chinese
Jun 9, 2026
Merged

fix(polish): Traditional 模式强制中文字形转换,不再只靠 prompt (#622)#629
H-Chris233 merged 1 commit into
betafrom
fix/issue-622-enforce-traditional-chinese

Conversation

@appergb

@appergb appergb commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

User description

背景

issue #622:当 Chinese Script Preference 设为 Traditional 时,OpenLess 最终插入的文字仍可能含简体中文(台湾繁体用户实测)。验收用例:

Input:  你知道你今天想要做什么吗?     →  Expected: 你知道你今天想要做什麼嗎?
Input:  所以你已经考过了吗?           →  Expected: 所以你已經考過了嗎?

根因

  1. finalize_polished_text 只在 Raw / 翻译 / 润色失败 时强制 apply_chinese_script_preference;普通模式 LLM 润色成功时仅靠 system prompt 指示 LLM 输出繁体。但部分 provider 会跟随简体 ASR 输入继续输出简体——prompt-level 指示不可靠(issue 原文已指出)。
  2. 流式插入路径逐字落字到光标,dictation_streaming.rs 注释明确写着「不在流式路径里做 apply_chinese_script_preference」,已落的字符无法回退转换。

改动(coordinator/ 三文件,单一职责)

  • finalize_polished_text:非流式路径下无条件套用 apply_chinese_script_preference。该函数对 Auto 是 no-op(不影响自动模式),非 Auto 时保证 ASR/LLM 产生的简体在插入前被转成目标字形。
  • streaming_insert_eligible:新增 chinese_script_preference 入参——非 Auto 时判定走流式,转入会做字形转换的一次性路径。对应 issue 验收项「若流式无法安全套用转换,应 fallback 到 one-shot」。
  • 单测:finalize_forces_traditional_even_on_successful_polish 覆盖 issue 两个验收用例;streaming_insert_ineligible_when_chinese_script_forced 验证非 Auto 关闭流式。

验收对照

  • Traditional 时最终插入文字输出繁体(成功润色路径也转换)
  • LLM polish 完成后、插入前再套用字形转换
  • 最终插入文字不含 ASR/LLM 产生的简体
  • Auto 模式保持现有行为(converter 对 Auto no-op)
  • 流式无法安全转换 → 自动 fallback 到一次性插入
  • 两个测试用例通过(单测断言)

验证

  • cargo check --manifest-path src-tauri/Cargo.toml
  • cargo test --lib(新增 3 项断言全过)✅

说明:issue 还提到「ASR transcript 进 LLM 前先转换」。由于本 PR 保证输出端无条件转换(OpenCC 对混合文本只转简体字、保留繁体字),最终插入文字的繁体保证已成立;ASR 前置转换属冗余增强,为保持单一职责未纳入。

🤖 Generated with Claude Code


PR Type

Bug fix


Description

  • Enforce Chinese script conversion for non-Auto preferences

  • Force streaming insertion fallback when script preference is set

  • Apply conversion unconditionally after successful polish


Diagram Walkthrough

flowchart LR
  A["ASR Input (may be Simplified)"] --> B["Polish pipeline"]
  B --> C{"Script Preference?"}
  C -- "Auto" --> D["Streaming insertion allowed"]
  C -- "Traditional/Simplified" --> E["Fallback to one-shot insertion"]
  E --> F["apply_chinese_script_preference"]
  F --> G["Final output (forced to preferred script)"]
  D --> H["Streaming insertion (no conversion)"]
  H --> G
Loading

File Walkthrough

Relevant files
Tests
dictation.rs
Add tests for script conversion enforcement                           

openless-all/app/src-tauri/src/coordinator/dictation.rs

  • Added test verifying streaming_insert_ineligible when script
    preference is Traditional or Simplified
  • Added test finalize_forces_traditional_even_on_successful_polish
    covering two acceptance cases
+41/-0   
Enhancement
dictation_end.rs
Pass script preference to streaming eligibility                   

openless-all/app/src-tauri/src/coordinator/dictation_end.rs

  • Pass chinese_script_preference to streaming_insert_eligible call
+1/-0     
Bug fix
dictation_streaming.rs
Enforce script conversion and fallback streaming                 

openless-all/app/src-tauri/src/coordinator/dictation_streaming.rs

  • Remove conditional script conversion logic; always apply after polish
  • Add check in streaming_insert_eligible: disable streaming when script
    preference is not Auto
+16/-14 

繁体用户实测:选 Traditional 后最终插入文字仍可能含简体。根因——

1. finalize_polished_text 仅在 Raw / 翻译 / 润色失败时强制 apply_chinese_script_preference;
   普通模式 LLM 润色成功时只靠 system prompt 指示 LLM 输出繁体,而部分 provider 会
   跟随简体 ASR 输入继续输出简体,prompt 指示不可靠(issue #622)。
2. 流式插入路径逐字落字,刻意跳过 apply_chinese_script_preference(dictation_streaming.rs
   注释明示),无法回退已落字符。

修复:
- finalize_polished_text 在非流式路径下无条件套用 apply_chinese_script_preference
  (对 Auto 是 no-op,不影响自动模式行为;非 Auto 时保证最终文字不混简体)。
- streaming_insert_eligible 增加 chinese_script_preference 门:非 Auto 时关闭流式,
  转走会做字形转换的一次性路径(满足 issue「无法安全转换则 fallback 到 one-shot」)。
- 新增单测:finalize 对 issue 两个验收用例输出繁体;非 Auto 时流式不 eligible。

Auto 模式保持原行为不变。
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

🎫 Ticket compliance analysis ✅

622 - PR Code Verified

Compliant requirements:

  • 當 Chinese Script Preference 設為 Traditional 時,最終插入文字必須輸出繁體中文。
  • LLM polish 完成後、插入文字前,應再次套用 Chinese script conversion。
  • 最終插入文字不應包含由 ASR 或 LLM 產生的簡體中文。
  • Auto 模式保持目前行為,不要強制轉換。
  • 如果 Streaming insertion 無法安全套用 script conversion,應自動 fallback 到 one-shot insertion。
  • 測試案例通過(單測 finalize_forces_traditional_even_on_successful_polish 覆蓋驗收用例)。

Requires further human verification:

  • ASR transcript 在送進 LLM polish pipeline 前,應先套用 Chinese script conversion。PR 未直接轉換 ASR transcript,但最終插入前轉換 LLM 輸出已保證結果為繁體;若存在 LLM 依賴 ASR 簡體上下文且生成簡體,轉換後仍達標。可考慮在 ASR 後增加轉換以進一步減少 LLM 混淆,但非必要。
⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ No major issues detected

@H-Chris233 H-Chris233 merged commit ec5acef into beta Jun 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants