Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion openless-all/app/src-tauri/capabilities/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"core:event:default",
"shell:allow-open",
"updater:default",
"autostart:default"
"autostart:default",
"dialog:default"
]
}
8 changes: 5 additions & 3 deletions openless-all/app/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,7 @@ export const en: typeof zhCN = {
volcengineResourceIdLabel: 'Resource ID',
volcengineMappingNote: 'Secret Key is not required right now. Resource ID defaults to volc.bigasr.sauc.duration.',
localAsrActiveNotice: 'Local ASR ({{name}}) is currently active. Switch or disable it from the Advanced tab.',
localAsrTakeoverHint: 'Once "{{name}}" is enabled, the ASR provider will be taken over.',
localAsrHint: 'Local Qwen3-ASR runs entirely on this machine. No API key needed — just download the model from HuggingFace.',
foundryLocalAsrHint: 'Windows local Whisper runs on this device and does not need an ASR API key. First use downloads Foundry Local runtime components and a Whisper model; LLM polishing still uses your configured LLM provider.',
localAsrPerformanceWarning: 'Local inference runs on CPU + Apple Silicon Accelerate; each transcription takes **several seconds longer than cloud ASR**, and Chinese / dialect accuracy is **typically lower** than Volcengine or Whisper turbo. Use it for offline, privacy-sensitive, or no-cloud-API scenarios.',
Expand Down Expand Up @@ -475,9 +476,10 @@ export const en: typeof zhCN = {
advanced: {
localAsrTitle: 'Local ASR models (experimental)',
localAsrDesc: 'Move transcription from cloud ASR to on-device inference. Offline / privacy-sensitive use only.',
localAsrWarningShort: 'Local ASR is several seconds slower than cloud, typically less accurate, and on under-spec hardware can drop words (output only part of your speech).',
qwen3Desc: 'Alibaba Qwen3-ASR, cross-platform. Models download from HuggingFace.',
foundryDesc: 'Microsoft Foundry Local Whisper. Windows only.',
localAsrWarningShort: 'Local inference is slower; under-spec hardware may drop words.',
qwen3Desc: 'Once enabled, the ASR provider will be taken over.',
foundryDesc: 'Once enabled, the ASR provider will be taken over.',
notSupportedHere: 'Not supported on this platform — no inference module bundled.',
enable: 'Enable',
alreadyActive: 'Active',
disableLocalLabel: 'Disable local ASR',
Expand Down
8 changes: 5 additions & 3 deletions openless-all/app/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,7 @@ export const ja: typeof zhCN = {
volcengineResourceIdLabel: 'Resource ID',
volcengineMappingNote: 'Secret Key は現在不要。Resource ID のデフォルトは volc.bigasr.sauc.duration。',
localAsrActiveNotice: '現在「{{name}}」を使用中。「詳細設定」タブから切り替えまたは無効化できます。',
localAsrTakeoverHint: '「{{name}}」を有効化すると ASR プロバイダーが引き継がれます。',
localAsrHint: 'ローカル Qwen3-ASR は本機で実行されるため API Key 不要。HuggingFace からモデルをダウンロードすればすぐに利用できます。',
foundryLocalAsrHint: 'Windows ローカル Whisper は本機で実行され、ASR API Key は不要です。初回使用時に Foundry Local ランタイムコンポーネントと Whisper モデルをダウンロードします。LLM 整文は引き続き設定済みの LLM プロバイダーを使用します。',
localAsrPerformanceWarning: 'ローカル推論は CPU + Apple Silicon Accelerate で動作するため、1 回の転写時間は **クラウド ASR より数秒長くなります**。中国語認識精度や方言/訛り対応も **通常は** Volcengine / Whisper turbo に劣ります。ネットワーク制限下またはプライバシー重視の場合に選択してください。',
Expand Down Expand Up @@ -477,9 +478,10 @@ export const ja: typeof zhCN = {
advanced: {
localAsrTitle: 'ローカル ASR モデル(実験的)',
localAsrDesc: '転写をクラウドから本機推論に切り替えます。オフライン/プライバシー重視向け。',
localAsrWarningShort: 'ローカル ASR はクラウドより数秒遅く、精度も通常は低め。スペック不足のマシンでは欠字(音声の一部のみ出力)が起きる場合があります。',
qwen3Desc: 'Alibaba Qwen3-ASR、クロスプラットフォーム。モデルは HuggingFace からダウンロード。',
foundryDesc: 'Microsoft Foundry Local Whisper、Windows のみ。',
localAsrWarningShort: 'ローカル推論は遅く、スペック不足では欠字の可能性があります。',
qwen3Desc: '有効化すると ASR プロバイダーが引き継がれます。',
foundryDesc: '有効化すると ASR プロバイダーが引き継がれます。',
notSupportedHere: 'このプラットフォームでは未対応(推論モジュール未組込)。',
enable: '有効化',
alreadyActive: '有効',
disableLocalLabel: 'ローカル ASR を無効化',
Expand Down
8 changes: 5 additions & 3 deletions openless-all/app/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,7 @@ export const ko: typeof zhCN = {
volcengineResourceIdLabel: 'Resource ID',
volcengineMappingNote: 'Secret Key 는 현재 입력 불필요. Resource ID 기본값은 volc.bigasr.sauc.duration.',
localAsrActiveNotice: '현재 "{{name}}" 사용 중. "고급" 탭에서 전환 또는 비활성화할 수 있습니다.',
localAsrTakeoverHint: '"{{name}}" 활성화 시 ASR 프로바이더가 인수됩니다.',
localAsrHint: '로컬 Qwen3-ASR 은 본 기기에서 실행되며 API Key 가 필요 없습니다. HuggingFace 에서 모델을 로컬로 다운로드하면 즉시 사용 가능합니다.',
foundryLocalAsrHint: 'Windows 로컬 Whisper 는 이 기기에서 실행되며 ASR API Key 가 필요 없습니다. 첫 사용 시 Foundry Local 런타임 구성 요소와 Whisper 모델을 다운로드합니다. LLM 정리는 계속 설정된 LLM 공급자를 사용합니다.',
localAsrPerformanceWarning: '로컬 추론은 CPU + Apple Silicon Accelerate 에서 동작하므로, 한 번의 전사 시간이 **클라우드 ASR 보다 몇 초 더 걸립니다**. 중국어 인식 정확도와 방언/억양 대응도 **일반적으로** Volcengine / Whisper turbo 에 미치지 못합니다. 네트워크 제한 또는 프라이버시가 중요한 경우에 사용하세요.',
Expand Down Expand Up @@ -477,9 +478,10 @@ export const ko: typeof zhCN = {
advanced: {
localAsrTitle: '로컬 ASR 모델 (실험적)',
localAsrDesc: '전사를 클라우드에서 로컬 추론으로 전환합니다. 오프라인 / 프라이버시용에만 권장됩니다.',
localAsrWarningShort: '로컬 ASR 은 클라우드보다 몇 초 느리고 정확도도 일반적으로 낮습니다. 사양이 부족한 기기에서는 글자 누락(음성의 일부만 출력)이 발생할 수 있습니다.',
qwen3Desc: 'Alibaba Qwen3-ASR, 크로스 플랫폼. 모델은 HuggingFace 에서 다운로드.',
foundryDesc: 'Microsoft Foundry Local Whisper, Windows 전용.',
localAsrWarningShort: '로컬 추론은 느리며, 사양 부족 시 글자 누락이 발생할 수 있습니다.',
qwen3Desc: '활성화하면 ASR 프로바이더가 인수됩니다.',
foundryDesc: '활성화하면 ASR 프로바이더가 인수됩니다.',
notSupportedHere: '이 플랫폼에서는 미지원 (추론 모듈 미내장).',
enable: '활성화',
alreadyActive: '활성',
disableLocalLabel: '로컬 ASR 비활성화',
Expand Down
8 changes: 5 additions & 3 deletions openless-all/app/src/i18n/zh-CN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ export const zhCN = {
volcengineResourceIdLabel: 'Resource ID',
volcengineMappingNote: 'Secret Key 当前无需填写。Resource ID 默认使用 volc.bigasr.sauc.duration。',
localAsrActiveNotice: '当前已启用「{{name}}」,可在「高级」中切换或禁用。',
localAsrTakeoverHint: '启动「{{name}}」后,ASR 提供商将被接管。',
localAsrHint: '本地 Qwen3-ASR 在本机运行,无需 API Key。模型从 HuggingFace 下载到本地后即可使用。',
foundryLocalAsrHint: 'Windows 本地 Whisper 在本机运行,无需 ASR API Key。首次使用会下载 Foundry Local 运行组件和 Whisper 模型;LLM 润色仍按你配置的 LLM 提供商调用。',
localAsrPerformanceWarning: '本地推理跑在 CPU + Apple Silicon Accelerate 上,单次转写时间会**比云端 ASR 长几秒**;中文识别准确率与方言/口音表现也**通常不如**火山引擎 / Whisper turbo。请按需取舍:网络受限或对隐私敏感时再用本地。',
Expand Down Expand Up @@ -473,9 +474,10 @@ export const zhCN = {
advanced: {
localAsrTitle: '本地 ASR 模型(实验性)',
localAsrDesc: '把转写从云端切到本机推理。仅推荐离线 / 隐私敏感场景。',
localAsrWarningShort: '本地 ASR 比云端慢若干秒、准确率更低;配置不足时可能吞字(仅输出部分语音)。',
qwen3Desc: 'Alibaba Qwen3-ASR,跨平台。模型从 HuggingFace 下载。',
foundryDesc: 'Microsoft Foundry Local Whisper,仅 Windows。',
localAsrWarningShort: '本地推理较慢,配置不足时可能吞字。',
qwen3Desc: '启动之后,ASR 提供商将被接管。',
foundryDesc: '启动之后,ASR 提供商将被接管。',
notSupportedHere: '本平台暂不支持,未集成推理模块。',
enable: '启用',
alreadyActive: '已启用',
disableLocalLabel: '禁用本地 ASR',
Expand Down
8 changes: 5 additions & 3 deletions openless-all/app/src/i18n/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,7 @@ export const zhTW: typeof zhCN = {
volcengineResourceIdLabel: 'Resource ID',
volcengineMappingNote: 'Secret Key 當前無需填寫。Resource ID 默認使用 volc.bigasr.sauc.duration。',
localAsrActiveNotice: '當前已啓用「{{name}}」,可在「高級」中切換或停用。',
localAsrTakeoverHint: '啓動「{{name}}」後,ASR 提供商將被接管。',
localAsrHint: '本地 Qwen3-ASR 在本機運行,無需 API Key。模型從 HuggingFace 下載到本地後即可使用。',
foundryLocalAsrHint: 'Windows 本地 Whisper 在本機運行,無需 ASR API Key。首次使用會下載 Foundry Local 運行組件和 Whisper 模型;LLM 潤色仍按你配置的 LLM 提供商調用。',
localAsrPerformanceWarning: '本地推理跑在 CPU + Apple Silicon Accelerate 上,**首次轉寫需要加載模型(數秒)**,之後單次轉寫也會比雲端 ASR 慢若干秒;中文識別準確率與方言/口音表現通常不如火山引擎 / Whisper turbo。適用場景:離線 / 隱私敏感 / 不願付費雲 API。',
Expand Down Expand Up @@ -475,9 +476,10 @@ export const zhTW: typeof zhCN = {
advanced: {
localAsrTitle: '本地 ASR 模型(實驗性)',
localAsrDesc: '把轉寫從雲端切到本機推理。僅推薦離線 / 隱私敏感場景。',
localAsrWarningShort: '本地 ASR 比雲端慢若干秒、準確率更低;配置不足時可能吞字(僅輸出部分語音)。',
qwen3Desc: 'Alibaba Qwen3-ASR,跨平臺。模型從 HuggingFace 下載。',
foundryDesc: 'Microsoft Foundry Local Whisper,僅 Windows。',
localAsrWarningShort: '本地推理較慢,配置不足時可能吞字。',
qwen3Desc: '啓動之後,ASR 提供商將被接管。',
foundryDesc: '啓動之後,ASR 提供商將被接管。',
notSupportedHere: '本平臺暫不支持,未集成推理模塊。',
enable: '啓用',
alreadyActive: '已啓用',
disableLocalLabel: '停用本地 ASR',
Expand Down
14 changes: 14 additions & 0 deletions openless-all/app/src/pages/LocalAsr.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,13 @@ import { Btn, Card, PageHeader, Pill } from './_atoms';
// Foundry Local Whisper 后端只在 Windows 编译实体(foundry_local_sdk 仅 Windows),
// 非 Windows 平台 runtime 是 stub 永远 unavailable。前端这一页对应的卡片、状态拉取、
// 事件订阅都必须按 OS 隔离,避免 macOS / Linux 用户看到 Windows 专属的 UI。
//
// 同理 Qwen3-ASR 后端只在 macOS 编译实体(qwen_engine / cache / local_provider 全是
// `#[cfg(target_os = "macos")]`),Qwen3 模型管理 UI 也按 IS_MAC 守严——之前用
// `!IS_WINDOWS` 会让假设的 Linux 渲染路径暴露死 UI(pr_agent #403 'Linux regression'
// 修法)。
const IS_WINDOWS = detectOS() === 'win';
const IS_MAC = detectOS() === 'mac';

interface RemoteSize {
totalBytes: number;
Expand Down Expand Up @@ -772,6 +778,11 @@ export function LocalAsr({ embedded = false }: LocalAsrProps = {}) {
</Card>
)}

{/* Qwen3 模型管理区——只在 macOS 渲染(后端 #[cfg(target_os = "macos")] 独占)。
Windows / Linux 看见镜像源 / 下载 / 模型列表都是 dead UI。Foundry 块自身已经
被上方 IS_WINDOWS 守卫,错误 Card(共享 setError,被 Foundry handler 也写)
保持无条件露出。 */}
{IS_MAC && (<>
{!engineAvailable && (
<Card style={{ marginBottom: 16, background: 'rgba(255, 235, 200, 0.4)' }}>
<div style={{ fontSize: 13, color: 'var(--ol-ink-2)' }}>
Expand Down Expand Up @@ -870,13 +881,15 @@ export function LocalAsr({ embedded = false }: LocalAsrProps = {}) {
</div>
</Card>
)}
</>)}

{error && (
<Card style={{ marginBottom: 16, background: 'rgba(255, 220, 220, 0.5)' }}>
<div style={{ fontSize: 13, color: '#9b2c2c' }}>{error}</div>
</Card>
)}

{IS_MAC && (
<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
{models.map(model => (
<ModelRow
Expand All @@ -897,6 +910,7 @@ export function LocalAsr({ embedded = false }: LocalAsrProps = {}) {
/>
))}
</div>
)}
</Wrapper>
);
}
Expand Down
Loading
Loading