enumerate and list gpus in the whisper dropdown, improve auto gpu (#1142)
* enumerate and list gpus in the whisper dropdown, improve auto gpu support * add translations * move to release transcribe-rs
This commit is contained in:
parent
214e22dc3d
commit
a6eec9e628
29 changed files with 245 additions and 33 deletions
2
src-tauri/Cargo.lock
generated
2
src-tauri/Cargo.lock
generated
|
|
@ -6993,8 +6993,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "transcribe-rs"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4e2b882795f8cee1a97e70bb8f4265bc159b786421ee525a372ccc6bf990fce"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"derive_builder",
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ rusqlite = { version = "0.37", features = ["bundled"] }
|
|||
tar = "0.4.44"
|
||||
flate2 = "1.0"
|
||||
sha2 = "0.10"
|
||||
transcribe-rs = { version = "0.3.2", features = ["whisper-cpp", "onnx"] }
|
||||
transcribe-rs = { version = "0.3.3", features = ["whisper-cpp", "onnx"] }
|
||||
handy-keys = "0.2.4"
|
||||
ferrous-opencc = "0.2.3"
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
|
|
@ -88,7 +88,7 @@ tauri-plugin-single-instance = "2.3.2"
|
|||
tauri-plugin-updater = "2.10.0"
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
transcribe-rs = { version = "0.3.2", features = ["whisper-vulkan", "ort-directml"] }
|
||||
transcribe-rs = { version = "0.3.3", features = ["whisper-vulkan", "ort-directml"] }
|
||||
windows = { version = "0.61.3", features = [
|
||||
"Win32_Media_Audio_Endpoints",
|
||||
"Win32_System_Com_StructuredStorage",
|
||||
|
|
@ -100,12 +100,12 @@ winreg = "0.55"
|
|||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
tauri-nspanel = { git = "https://github.com/ahkohd/tauri-nspanel", branch = "v2.1" }
|
||||
transcribe-rs = { version = "0.3.2", features = ["whisper-metal"] }
|
||||
transcribe-rs = { version = "0.3.3", features = ["whisper-metal"] }
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
gtk-layer-shell = { version = "0.8", features = ["v0_6"] }
|
||||
gtk = "0.18"
|
||||
transcribe-rs = { version = "0.3.2", features = ["whisper-vulkan"] }
|
||||
transcribe-rs = { version = "0.3.3", features = ["whisper-vulkan"] }
|
||||
|
||||
[patch.crates-io]
|
||||
tauri-runtime = { git = "https://github.com/cjpais/tauri.git", branch = "handy-2.10.2" }
|
||||
|
|
|
|||
|
|
@ -369,6 +369,7 @@ pub fn run(cli_args: CliArgs) {
|
|||
shortcut::change_show_tray_icon_setting,
|
||||
shortcut::change_whisper_accelerator_setting,
|
||||
shortcut::change_ort_accelerator_setting,
|
||||
shortcut::change_whisper_gpu_device,
|
||||
shortcut::get_available_accelerators,
|
||||
shortcut::handy_keys::start_handy_keys_recording,
|
||||
shortcut::handy_keys::stop_handy_keys_recording,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use serde::Serialize;
|
|||
use specta::Type;
|
||||
use std::panic::{catch_unwind, AssertUnwindSafe};
|
||||
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
|
||||
use std::sync::{Arc, Condvar, Mutex, MutexGuard};
|
||||
use std::sync::{Arc, Condvar, Mutex, MutexGuard, OnceLock};
|
||||
use std::thread;
|
||||
use std::time::{Duration, SystemTime};
|
||||
use tauri::{AppHandle, Emitter, Manager};
|
||||
|
|
@ -717,7 +717,16 @@ pub fn apply_accelerator_settings(app: &tauri::AppHandle) {
|
|||
WhisperAcceleratorSetting::Gpu => accel::WhisperAccelerator::Gpu,
|
||||
};
|
||||
accel::set_whisper_accelerator(whisper_pref);
|
||||
info!("Whisper accelerator set to: {}", whisper_pref);
|
||||
accel::set_whisper_gpu_device(settings.whisper_gpu_device);
|
||||
info!(
|
||||
"Whisper accelerator set to: {}, gpu_device: {}",
|
||||
whisper_pref,
|
||||
if settings.whisper_gpu_device == accel::GPU_DEVICE_AUTO {
|
||||
"auto".to_string()
|
||||
} else {
|
||||
settings.whisper_gpu_device.to_string()
|
||||
}
|
||||
);
|
||||
|
||||
let ort_pref = match settings.ort_accelerator {
|
||||
OrtAcceleratorSetting::Auto => accel::OrtAccelerator::Auto,
|
||||
|
|
@ -730,10 +739,35 @@ pub fn apply_accelerator_settings(app: &tauri::AppHandle) {
|
|||
info!("ORT accelerator set to: {}", ort_pref);
|
||||
}
|
||||
|
||||
#[derive(Serialize, Clone, Debug, Type)]
|
||||
pub struct GpuDeviceOption {
|
||||
pub id: i32,
|
||||
pub name: String,
|
||||
pub total_vram_mb: usize,
|
||||
}
|
||||
|
||||
static GPU_DEVICES: OnceLock<Vec<GpuDeviceOption>> = OnceLock::new();
|
||||
|
||||
fn cached_gpu_devices() -> &'static [GpuDeviceOption] {
|
||||
use transcribe_rs::whisper_cpp::gpu::list_gpu_devices;
|
||||
|
||||
GPU_DEVICES.get_or_init(|| {
|
||||
list_gpu_devices()
|
||||
.into_iter()
|
||||
.map(|d| GpuDeviceOption {
|
||||
id: d.id,
|
||||
name: d.name,
|
||||
total_vram_mb: d.total_vram / (1024 * 1024),
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
}
|
||||
|
||||
#[derive(Serialize, Clone, Debug, Type)]
|
||||
pub struct AvailableAccelerators {
|
||||
pub whisper: Vec<String>,
|
||||
pub ort: Vec<String>,
|
||||
pub gpu_devices: Vec<GpuDeviceOption>,
|
||||
}
|
||||
|
||||
/// Return which accelerators are compiled into this build.
|
||||
|
|
@ -750,6 +784,7 @@ pub fn get_available_accelerators() -> AvailableAccelerators {
|
|||
AvailableAccelerators {
|
||||
whisper: whisper_options,
|
||||
ort: ort_options,
|
||||
gpu_devices: cached_gpu_devices().to_vec(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,10 +65,18 @@ impl TranscriptionManager {
|
|||
/// No-op in CI mock.
|
||||
pub fn apply_accelerator_settings(_app: &tauri::AppHandle) {}
|
||||
|
||||
#[derive(Serialize, Clone, Debug, Type)]
|
||||
pub struct GpuDeviceOption {
|
||||
pub id: i32,
|
||||
pub name: String,
|
||||
pub total_vram_mb: usize,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Clone, Debug, Type)]
|
||||
pub struct AvailableAccelerators {
|
||||
pub whisper: Vec<String>,
|
||||
pub ort: Vec<String>,
|
||||
pub gpu_devices: Vec<GpuDeviceOption>,
|
||||
}
|
||||
|
||||
/// Returns empty lists in CI mock.
|
||||
|
|
@ -76,5 +84,6 @@ pub fn get_available_accelerators() -> AvailableAccelerators {
|
|||
AvailableAccelerators {
|
||||
whisper: vec![],
|
||||
ort: vec![],
|
||||
gpu_devices: vec![],
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -397,6 +397,8 @@ pub struct AppSettings {
|
|||
pub whisper_accelerator: WhisperAcceleratorSetting,
|
||||
#[serde(default)]
|
||||
pub ort_accelerator: OrtAcceleratorSetting,
|
||||
#[serde(default = "default_whisper_gpu_device")]
|
||||
pub whisper_gpu_device: i32,
|
||||
#[serde(default)]
|
||||
pub extra_recording_buffer_ms: u64,
|
||||
}
|
||||
|
|
@ -605,6 +607,10 @@ fn default_post_process_prompts() -> Vec<LLMPrompt> {
|
|||
}]
|
||||
}
|
||||
|
||||
fn default_whisper_gpu_device() -> i32 {
|
||||
-1 // auto
|
||||
}
|
||||
|
||||
fn default_typing_tool() -> TypingTool {
|
||||
TypingTool::Auto
|
||||
}
|
||||
|
|
@ -767,6 +773,7 @@ pub fn get_default_settings() -> AppSettings {
|
|||
custom_filler_words: None,
|
||||
whisper_accelerator: WhisperAcceleratorSetting::default(),
|
||||
ort_accelerator: OrtAcceleratorSetting::default(),
|
||||
whisper_gpu_device: default_whisper_gpu_device(),
|
||||
extra_recording_buffer_ms: 0,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1133,7 +1133,16 @@ pub fn change_ort_accelerator_setting(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Return which ORT accelerators are compiled into this build.
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
pub fn change_whisper_gpu_device(app: AppHandle, device: i32) -> Result<(), String> {
|
||||
let mut s = settings::get_settings(&app);
|
||||
s.whisper_gpu_device = device;
|
||||
apply_and_reload_accelerator(&app, s);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Return which accelerators and GPU devices are available for this build.
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
pub fn get_available_accelerators() -> crate::managers::transcription::AvailableAccelerators {
|
||||
|
|
|
|||
|
|
@ -379,8 +379,16 @@ async changeOrtAcceleratorSetting(accelerator: OrtAcceleratorSetting) : Promise<
|
|||
else return { status: "error", error: e as any };
|
||||
}
|
||||
},
|
||||
async changeWhisperGpuDevice(device: number) : Promise<Result<null, string>> {
|
||||
try {
|
||||
return { status: "ok", data: await TAURI_INVOKE("change_whisper_gpu_device", { device }) };
|
||||
} catch (e) {
|
||||
if(e instanceof Error) throw e;
|
||||
else return { status: "error", error: e as any };
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Return which ORT accelerators are compiled into this build.
|
||||
* Return which accelerators and GPU devices are available for this build.
|
||||
*/
|
||||
async getAvailableAccelerators() : Promise<AvailableAccelerators> {
|
||||
return await TAURI_INVOKE("get_available_accelerators");
|
||||
|
|
@ -819,14 +827,15 @@ historyUpdatePayload: "history-update-payload"
|
|||
|
||||
/** user-defined types **/
|
||||
|
||||
export type AppSettings = { bindings: Partial<{ [key in string]: ShortcutBinding }>; push_to_talk: boolean; audio_feedback: boolean; audio_feedback_volume?: number; sound_theme?: SoundTheme; start_hidden?: boolean; autostart_enabled?: boolean; update_checks_enabled?: boolean; selected_model?: string; always_on_microphone?: boolean; selected_microphone?: string | null; clamshell_microphone?: string | null; selected_output_device?: string | null; translate_to_english?: boolean; selected_language?: string; overlay_position?: OverlayPosition; debug_mode?: boolean; log_level?: LogLevel; custom_words?: string[]; model_unload_timeout?: ModelUnloadTimeout; word_correction_threshold?: number; history_limit?: number; recording_retention_period?: RecordingRetentionPeriod; paste_method?: PasteMethod; clipboard_handling?: ClipboardHandling; auto_submit?: boolean; auto_submit_key?: AutoSubmitKey; post_process_enabled?: boolean; post_process_provider_id?: string; post_process_providers?: PostProcessProvider[]; post_process_api_keys?: Partial<{ [key in string]: string }>; post_process_models?: Partial<{ [key in string]: string }>; post_process_prompts?: LLMPrompt[]; post_process_selected_prompt_id?: string | null; mute_while_recording?: boolean; append_trailing_space?: boolean; app_language?: string; experimental_enabled?: boolean; lazy_stream_close?: boolean; keyboard_implementation?: KeyboardImplementation; show_tray_icon?: boolean; paste_delay_ms?: number; typing_tool?: TypingTool; external_script_path: string | null; custom_filler_words?: string[] | null; whisper_accelerator?: WhisperAcceleratorSetting; ort_accelerator?: OrtAcceleratorSetting; extra_recording_buffer_ms?: number }
|
||||
export type AppSettings = { bindings: Partial<{ [key in string]: ShortcutBinding }>; push_to_talk: boolean; audio_feedback: boolean; audio_feedback_volume?: number; sound_theme?: SoundTheme; start_hidden?: boolean; autostart_enabled?: boolean; update_checks_enabled?: boolean; selected_model?: string; always_on_microphone?: boolean; selected_microphone?: string | null; clamshell_microphone?: string | null; selected_output_device?: string | null; translate_to_english?: boolean; selected_language?: string; overlay_position?: OverlayPosition; debug_mode?: boolean; log_level?: LogLevel; custom_words?: string[]; model_unload_timeout?: ModelUnloadTimeout; word_correction_threshold?: number; history_limit?: number; recording_retention_period?: RecordingRetentionPeriod; paste_method?: PasteMethod; clipboard_handling?: ClipboardHandling; auto_submit?: boolean; auto_submit_key?: AutoSubmitKey; post_process_enabled?: boolean; post_process_provider_id?: string; post_process_providers?: PostProcessProvider[]; post_process_api_keys?: Partial<{ [key in string]: string }>; post_process_models?: Partial<{ [key in string]: string }>; post_process_prompts?: LLMPrompt[]; post_process_selected_prompt_id?: string | null; mute_while_recording?: boolean; append_trailing_space?: boolean; app_language?: string; experimental_enabled?: boolean; lazy_stream_close?: boolean; keyboard_implementation?: KeyboardImplementation; show_tray_icon?: boolean; paste_delay_ms?: number; typing_tool?: TypingTool; external_script_path: string | null; custom_filler_words?: string[] | null; whisper_accelerator?: WhisperAcceleratorSetting; ort_accelerator?: OrtAcceleratorSetting; whisper_gpu_device?: number; extra_recording_buffer_ms?: number }
|
||||
export type AudioDevice = { index: string; name: string; is_default: boolean }
|
||||
export type AutoSubmitKey = "enter" | "ctrl_enter" | "cmd_enter"
|
||||
export type AvailableAccelerators = { whisper: string[]; ort: string[] }
|
||||
export type AvailableAccelerators = { whisper: string[]; ort: string[]; gpu_devices: GpuDeviceOption[] }
|
||||
export type BindingResponse = { success: boolean; binding: ShortcutBinding | null; error: string | null }
|
||||
export type ClipboardHandling = "dont_modify" | "copy_to_clipboard"
|
||||
export type CustomSounds = { start: boolean; stop: boolean }
|
||||
export type EngineType = "Whisper" | "Parakeet" | "Moonshine" | "MoonshineStreaming" | "SenseVoice" | "GigaAM" | "Canary"
|
||||
export type GpuDeviceOption = { id: number; name: string; total_vram_mb: number }
|
||||
export type HistoryEntry = { id: number; file_name: string; timestamp: number; saved: boolean; title: string; transcription_text: string; post_processed_text: string | null; post_process_prompt: string | null; post_process_requested: boolean }
|
||||
export type HistoryUpdatePayload = { action: "added"; entry: HistoryEntry } | { action: "updated"; entry: HistoryEntry } | { action: "deleted"; id: number } | { action: "toggled"; id: number }
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -9,12 +9,6 @@ import type {
|
|||
OrtAcceleratorSetting,
|
||||
} from "@/bindings";
|
||||
|
||||
const WHISPER_LABELS: Record<WhisperAcceleratorSetting, string> = {
|
||||
auto: "Auto",
|
||||
cpu: "CPU",
|
||||
gpu: "GPU",
|
||||
};
|
||||
|
||||
const ORT_LABELS: Record<OrtAcceleratorSetting, string> = {
|
||||
auto: "Auto",
|
||||
cpu: "CPU",
|
||||
|
|
@ -28,6 +22,34 @@ interface AccelerationSelectorProps {
|
|||
grouped?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whisper dropdown encodes accelerator + device in a single value:
|
||||
* "auto" → accelerator=auto, gpu_device=-1
|
||||
* "cpu" → accelerator=cpu, gpu_device=-1
|
||||
* "gpu:0" → accelerator=gpu, gpu_device=0
|
||||
* "gpu:1" → accelerator=gpu, gpu_device=1
|
||||
*/
|
||||
function encodeWhisperValue(
|
||||
accelerator: WhisperAcceleratorSetting,
|
||||
gpuDevice: number,
|
||||
): string {
|
||||
if (accelerator === "cpu") return "cpu";
|
||||
if (accelerator === "gpu" && gpuDevice >= 0) return `gpu:${gpuDevice}`;
|
||||
return "auto";
|
||||
}
|
||||
|
||||
function decodeWhisperValue(value: string): {
|
||||
accelerator: WhisperAcceleratorSetting;
|
||||
gpuDevice: number;
|
||||
} {
|
||||
if (value === "cpu") return { accelerator: "cpu", gpuDevice: -1 };
|
||||
if (value.startsWith("gpu:")) {
|
||||
const id = parseInt(value.slice(4), 10);
|
||||
return { accelerator: "gpu", gpuDevice: id };
|
||||
}
|
||||
return { accelerator: "auto", gpuDevice: -1 };
|
||||
}
|
||||
|
||||
export const AccelerationSelector: FC<AccelerationSelectorProps> = ({
|
||||
descriptionMode = "tooltip",
|
||||
grouped = false,
|
||||
|
|
@ -40,13 +62,29 @@ export const AccelerationSelector: FC<AccelerationSelectorProps> = ({
|
|||
|
||||
useEffect(() => {
|
||||
commands.getAvailableAccelerators().then((available) => {
|
||||
setWhisperOptions(
|
||||
available.whisper.map((v) => ({
|
||||
value: v,
|
||||
label: WHISPER_LABELS[v as WhisperAcceleratorSetting] ?? v,
|
||||
})),
|
||||
);
|
||||
// Always include "auto" for ORT even though available() only returns compiled-in backends
|
||||
// Build combined Whisper options: Auto, [GPU devices...], CPU
|
||||
const opts: DropdownOption[] = [
|
||||
{
|
||||
value: "auto",
|
||||
label: t("settings.advanced.acceleration.gpuDevice.auto"),
|
||||
},
|
||||
];
|
||||
|
||||
for (const dev of available.gpu_devices) {
|
||||
const vramLabel =
|
||||
dev.total_vram_mb >= 1024
|
||||
? `${(dev.total_vram_mb / 1024).toFixed(1)} GB`
|
||||
: `${dev.total_vram_mb} MB`;
|
||||
opts.push({
|
||||
value: `gpu:${dev.id}`,
|
||||
label: `${dev.name} (${vramLabel})`,
|
||||
});
|
||||
}
|
||||
|
||||
opts.push({ value: "cpu", label: "CPU" });
|
||||
setWhisperOptions(opts);
|
||||
|
||||
// ORT options (unchanged)
|
||||
const ortVals = available.ort.includes("auto")
|
||||
? available.ort
|
||||
: ["auto", ...available.ort];
|
||||
|
|
@ -57,11 +95,22 @@ export const AccelerationSelector: FC<AccelerationSelectorProps> = ({
|
|||
})),
|
||||
);
|
||||
});
|
||||
}, []);
|
||||
}, [t]);
|
||||
|
||||
const currentWhisper = getSetting("whisper_accelerator") ?? "auto";
|
||||
const currentAccelerator = getSetting("whisper_accelerator") ?? "auto";
|
||||
const currentGpuDevice = getSetting("whisper_gpu_device") ?? -1;
|
||||
const currentWhisper = encodeWhisperValue(
|
||||
currentAccelerator as WhisperAcceleratorSetting,
|
||||
currentGpuDevice as number,
|
||||
);
|
||||
const currentOrt = getSetting("ort_accelerator") ?? "auto";
|
||||
|
||||
const handleWhisperChange = async (value: string) => {
|
||||
const { accelerator, gpuDevice } = decodeWhisperValue(value);
|
||||
await updateSetting("whisper_accelerator", accelerator);
|
||||
await updateSetting("whisper_gpu_device", gpuDevice);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<SettingContainer
|
||||
|
|
@ -74,13 +123,11 @@ export const AccelerationSelector: FC<AccelerationSelectorProps> = ({
|
|||
<Dropdown
|
||||
options={whisperOptions}
|
||||
selectedValue={currentWhisper}
|
||||
onSelect={(value) =>
|
||||
updateSetting(
|
||||
"whisper_accelerator",
|
||||
value as WhisperAcceleratorSetting,
|
||||
)
|
||||
onSelect={handleWhisperChange}
|
||||
disabled={
|
||||
isUpdating("whisper_accelerator") ||
|
||||
isUpdating("whisper_gpu_device")
|
||||
}
|
||||
disabled={isUpdating("whisper_accelerator")}
|
||||
/>
|
||||
</SettingContainer>
|
||||
{ortOptions.length > 2 && (
|
||||
|
|
|
|||
|
|
@ -237,6 +237,11 @@
|
|||
"ort": {
|
||||
"title": "تسريع ONNX",
|
||||
"description": "تسريع الأجهزة لنماذج ONNX (Parakeet، Canary، Moonshine، إلخ). DirectML على Windows تجريبي. قد تفشل النماذج في النسخ."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "جهاز GPU",
|
||||
"description": "حدد وحدة معالجة الرسومات المستخدمة لاستدلال Whisper. يختار تلقائي وحدة GPU المخصصة.",
|
||||
"auto": "تلقائي"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Ускорение за ONNX",
|
||||
"description": "Хардуерно ускорение за ONNX модели (Parakeet, Canary, Moonshine и др.). DirectML на Windows е експериментален. Моделите може да не транскрибират."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU устройство",
|
||||
"description": "Изберете кой GPU да се използва за Whisper. Автоматично избира специализирания GPU.",
|
||||
"auto": "Автоматично"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Akcelerace ONNX",
|
||||
"description": "Hardwarová akcelerace pro modely ONNX (Parakeet, Canary, Moonshine atd.). DirectML na Windows je experimentální. Modely nemusí správně přepisovat."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU zařízení",
|
||||
"description": "Vyberte, který GPU použít pro Whisper. Automaticky vybere dedikovaný GPU.",
|
||||
"auto": "Automaticky"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX-Beschleunigung",
|
||||
"description": "Hardwarebeschleunigung für ONNX-Modelle (Parakeet, Canary, Moonshine usw.). DirectML unter Windows ist experimentell. Modelle können bei der Transkription fehlschlagen."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU-Gerät",
|
||||
"description": "Wählen Sie die GPU für die Whisper-Inferenz. Auto wählt die dedizierte GPU.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX Acceleration",
|
||||
"description": "Hardware acceleration for ONNX models (Parakeet, Canary, Moonshine, etc.). DirectML on Windows is experimental. Models may fail to transcribe."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU Device",
|
||||
"description": "Select which GPU to use for Whisper inference. Auto picks the dedicated GPU.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Aceleración de ONNX",
|
||||
"description": "Aceleración por hardware para modelos ONNX (Parakeet, Canary, Moonshine, etc.). DirectML en Windows es experimental. Los modelos pueden fallar al transcribir."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Dispositivo GPU",
|
||||
"description": "Seleccione qué GPU usar para la inferencia de Whisper. Auto elige la GPU dedicada.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Accélération ONNX",
|
||||
"description": "Accélération matérielle pour les modèles ONNX (Parakeet, Canary, Moonshine, etc.). DirectML sur Windows est expérimental. Les modèles peuvent échouer à transcrire."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Appareil GPU",
|
||||
"description": "Sélectionnez le GPU à utiliser pour l'inférence Whisper. Auto choisit le GPU dédié.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Accelerazione ONNX",
|
||||
"description": "Accelerazione hardware per i modelli ONNX (Parakeet, Canary, Moonshine, ecc.). DirectML su Windows è sperimentale. I modelli potrebbero non riuscire a trascrivere."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Dispositivo GPU",
|
||||
"description": "Seleziona quale GPU utilizzare per l'inferenza Whisper. Auto sceglie la GPU dedicata.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX アクセラレーション",
|
||||
"description": "ONNX モデルのハードウェアアクセラレーション(Parakeet、Canary、Moonshine など)。Windows の DirectML は実験的です。モデルの文字起こしに失敗する場合があります。"
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPUデバイス",
|
||||
"description": "Whisper推論に使用するGPUを選択します。自動は専用GPUを選択します。",
|
||||
"auto": "自動"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX 가속",
|
||||
"description": "ONNX 모델의 하드웨어 가속 (Parakeet, Canary, Moonshine 등). Windows의 DirectML은 실험적입니다. 모델이 전사에 실패할 수 있습니다."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU 장치",
|
||||
"description": "Whisper 추론에 사용할 GPU를 선택합니다. 자동은 전용 GPU를 선택합니다.",
|
||||
"auto": "자동"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Akceleracja ONNX",
|
||||
"description": "Akceleracja sprzętowa dla modeli ONNX (Parakeet, Canary, Moonshine itp.). DirectML na Windows jest eksperymentalne. Modele mogą nie transkrybować poprawnie."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Urządzenie GPU",
|
||||
"description": "Wybierz GPU do inferencji Whisper. Auto wybiera dedykowany GPU.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Aceleração ONNX",
|
||||
"description": "Aceleração por hardware para modelos ONNX (Parakeet, Canary, Moonshine, etc.). DirectML no Windows é experimental. Os modelos podem falhar na transcrição."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Dispositivo GPU",
|
||||
"description": "Selecione qual GPU usar para inferência do Whisper. Auto escolhe a GPU dedicada.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Ускорение ONNX",
|
||||
"description": "Аппаратное ускорение для моделей ONNX (Parakeet, Canary, Moonshine и др.). DirectML на Windows является экспериментальным. Модели могут не выполнять транскрипцию."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Устройство GPU",
|
||||
"description": "Выберите GPU для инференса Whisper. Авто выбирает выделенный GPU.",
|
||||
"auto": "Авто"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX-acceleration",
|
||||
"description": "Hårdvaruacceleration för ONNX-modeller (Parakeet, Canary, Moonshine, etc.). DirectML på Windows är experimentellt. Modeller kan misslyckas med att transkribera."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU-enhet",
|
||||
"description": "Välj vilken GPU som ska användas för Whisper-inferens. Auto väljer den dedikerade GPU:n.",
|
||||
"auto": "Auto"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX Hızlandırma",
|
||||
"description": "ONNX modelleri için donanım hızlandırma (Parakeet, Canary, Moonshine vb.). Windows'ta DirectML deneyseldir. Modeller transkripsiyon yapamayabilir."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU Aygıtı",
|
||||
"description": "Whisper çıkarımı için hangi GPU'nun kullanılacağını seçin. Otomatik, özel GPU'yu seçer.",
|
||||
"auto": "Otomatik"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Прискорення ONNX",
|
||||
"description": "Апаратне прискорення для моделей ONNX (Parakeet, Canary, Moonshine тощо). DirectML на Windows є експериментальним. Моделі можуть не виконувати транскрипцію."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Пристрій GPU",
|
||||
"description": "Виберіть GPU для інференсу Whisper. Автоматично обирає виділений GPU.",
|
||||
"auto": "Авто"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "Tăng tốc ONNX",
|
||||
"description": "Tăng tốc phần cứng cho các mô hình ONNX (Parakeet, Canary, Moonshine, v.v.). DirectML trên Windows là thử nghiệm. Các mô hình có thể không chuyển đổi giọng nói được."
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "Thiết bị GPU",
|
||||
"description": "Chọn GPU để sử dụng cho suy luận Whisper. Tự động chọn GPU chuyên dụng.",
|
||||
"auto": "Tự động"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX 加速",
|
||||
"description": "ONNX 模型的硬體加速(Parakeet、Canary、Moonshine 等)。Windows 上的 DirectML 為實驗性功能。模型可能無法正常轉錄。"
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU 裝置",
|
||||
"description": "選擇用於 Whisper 推理的 GPU。自動選擇獨立 GPU。",
|
||||
"auto": "自動"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,11 @@
|
|||
"ort": {
|
||||
"title": "ONNX 加速",
|
||||
"description": "ONNX 模型的硬件加速(Parakeet、Canary、Moonshine 等)。Windows 上的 DirectML 为实验性功能。模型可能无法正常转录。"
|
||||
},
|
||||
"gpuDevice": {
|
||||
"title": "GPU 设备",
|
||||
"description": "选择用于 Whisper 推理的 GPU。自动选择独立 GPU。",
|
||||
"auto": "自动"
|
||||
}
|
||||
},
|
||||
"startHidden": {
|
||||
|
|
|
|||
|
|
@ -151,6 +151,8 @@ const settingUpdaters: {
|
|||
),
|
||||
ort_accelerator: (value) =>
|
||||
commands.changeOrtAcceleratorSetting(value as OrtAcceleratorSetting),
|
||||
whisper_gpu_device: (value) =>
|
||||
commands.changeWhisperGpuDevice(value as number),
|
||||
extra_recording_buffer_ms: (value) =>
|
||||
commands.changeExtraRecordingBufferSetting(value as number),
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue