Преминете към основното съдържание

Конфигурация

Модулът config.rs управлява потребителските настройки чрез JSON файл. Конфигурацията включва hotkey комбинации, езикови настройки, LLM параметри, overlay позиция и други предпочитания.

Config struct

pub struct Config {
// Горещи клавиши
pub hotkey: String, // "ctrl+shift+r"
pub translate_hotkey: String, // "ctrl+shift+t"
pub dictation_mode: String, // "hold" или "toggle"

// Аудио
pub language: String, // ISO 639-1 код за ASR ("bg")
pub auto_detect_language: bool, // Автоматично разпознаване на език
pub audio_device: Option<String>,// Име на микрофон (None = default)
pub sound_enabled: bool, // Звукови нотификации
pub mute_on_record: bool, // Mute високоговорителите при запис

// Overlay
pub overlay_x: Option<f32>, // X позиция на overlay-а
pub overlay_y: Option<f32>, // Y позиция
pub overlay_pinned: bool, // Закрепен на място

// Транскрипция
pub postprocess: bool, // Пост-обработка от ASR сървъра

// LLM
pub llm_enabled: bool, // Активиране на LLM
pub llm_mode: String, // "cleanup", "professional", "reformulation", "custom"
pub llm_base_url: String, // OpenAI-compatible API URL
pub llm_model: String, // Модел (напр. "gpt-4o-mini")
pub llm_custom_prompt: String, // Потребителски prompt

// Инжектиране
pub injection_mode: String, // "clipboard" или "keystrokes"

// Интерфейс
pub ui_language: Option<String>, // Език на интерфейса (None = auto-detect)

// Система
pub auto_start: bool, // Стартиране с Windows/macOS
pub licensing_api_url: String, // URL на licensing сървъра
}

Стойности по подразбиране

ПолеСтойност по подразбиранеОписание
hotkeyctrl+shift+rКлавишна комбинация за диктовка
translate_hotkeyctrl+shift+tКлавишна комбинация за превод
dictation_modeholdЗадръж-за-запис режим
languagebgБългарски като ASR език
auto_detect_languagefalseФиксиран език
audio_deviceNoneDefault системен микрофон
sound_enabledtrueЗвуков сигнал вкл./изкл.
mute_on_recordfalseНе mute-ва при запис
overlay_pinnedfalseOverlay-ът може да се мести
postprocesstrueПост-обработка от ASR сървъра
llm_enabledfalseLLM изключен
llm_modecleanupРежим почистване
llm_base_urlhttps://api.openai.com/v1OpenAI API
llm_modelgpt-4o-miniБърз и евтин модел
llm_custom_prompt""Празен custom prompt
injection_modeclipboardClipboard paste
ui_languageNoneАвтоматично от OS
auto_startfalseБез autostart
licensing_api_urlhttps://pro.dictaro.aiProduction licensing

Местоположение на файла

Windows

%APPDATA%\dictaro\settings.json

Пълен път: C:\Users\<user>\AppData\Roaming\dictaro\settings.json

macOS

~/Library/Application Support/dictaro/settings.json

Fallback

Ако dirs::config_dir() не е наличен:

~/AppData/Roaming/dictaro/settings.json

Миграция от старо име

При първо стартиране, ако dictaro/settings.json не съществува но whisper-keyboard/settings.json съществува, файлът се копира автоматично:

Зареждане и запазване

load_config()

Backward compatibility: serde #[serde(default)] на всички полета позволява зареждане на стари конфигурационни файлове, които нямат новите полета (напр. llm_enabled). Липсващите полета получават стойностите си по подразбиране.

save_config()

pub fn save_config(config: &Config) {
// Създава директорията ако не съществува
fs::create_dir_all(parent);
// Записва pretty-printed JSON
let json = serde_json::to_string_pretty(config)?;
fs::write(path, json)?;
}

Примерен settings.json

{
"hotkey": "ctrl+shift+r",
"translate_hotkey": "ctrl+shift+t",
"dictation_mode": "hold",
"language": "bg",
"auto_detect_language": false,
"audio_device": "Microphone (Realtek High Definition Audio)",
"sound_enabled": true,
"overlay_x": 500.0,
"overlay_y": 50.0,
"overlay_pinned": true,
"mute_on_record": false,
"postprocess": true,
"licensing_api_url": "https://pro.dictaro.ai",
"llm_enabled": true,
"llm_mode": "cleanup",
"llm_base_url": "https://api.openai.com/v1",
"llm_model": "gpt-4o-mini",
"llm_custom_prompt": "",
"ui_language": "bg",
"injection_mode": "clipboard",
"auto_start": true
}

Dev Override

Environment variable DICTARO_API_URL може да override-не licensing_api_url:

DICTARO_API_URL=http://localhost:3000 ./dictaro-client

Това е полезно за development и тестване срещу локален licensing сървър.

effective_language()

Помощен метод, който връща None при auto-detect режим и Some(&language) при фиксиран език. Използва се при изпращане на заявка към ASR сървъра:

impl Config {
pub fn effective_language(&self) -> Option<&str> {
if self.auto_detect_language {
None // Сървърът определя езика
} else {
Some(&self.language) // Фиксиран език
}
}
}

Свързани модули

МодулКак използва Config
main.rsЗарежда при стартиране, предава на App и threads
ui/settings.rsРедактира и записва конфигурацията
hotkeys/Чете hotkey, translate_hotkey, dictation_mode
audio/Чете audio_device
llm/Чете llm_* полетата
transcription/Чете language, postprocess
auth/Чете licensing_api_url
autostartЧете auto_start