Files
Lumotia/crates/core/src/constants.rs
jake 6588130e36 feat(kon): add core crate — types, traits, hardware, model registry, recommendation
- Value objects: ModelId, EngineName, Megabytes, AudioSamples, Segment, Transcript
- KonError enum with thiserror
- Constants centralised: audio pipeline, VAD, RAM thresholds, inference threading
- SpeechToText and TextProcessor provider traits with ProviderRegistry
- Unified model registry (Whisper tiny/base/small/medium + Parakeet CTC int8)
- Hardware detection: probe_ram, probe_cpu, probe_gpu (stub), probe_os
- Recommendation engine: score_model (pure function), rank_recommendations (sorted)
- 5 tests passing, clippy clean

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 20:27:27 +00:00

50 lines
1.7 KiB
Rust

/// Audio pipeline constants.
pub const WHISPER_SAMPLE_RATE: u32 = 16_000;
pub const WHISPER_CHANNELS: u16 = 1;
/// Parakeet mel spectrogram constants.
pub const PARAKEET_N_FFT: usize = 512;
pub const PARAKEET_HOP_LENGTH: usize = 160;
pub const PARAKEET_WIN_LENGTH: usize = 400;
pub const PARAKEET_N_MELS: usize = 80;
pub const PARAKEET_PRE_EMPHASIS: f32 = 0.97;
pub const PARAKEET_BLANK_TOKEN: usize = 1024;
pub const PARAKEET_LOG_GUARD: f32 = 5.960_464_5e-8; // 2^-24
/// Chunk timing for live transcription.
pub const CHUNK_INTERVAL_MS: u64 = 3000;
pub const MIN_CHUNK_SAMPLES: usize = 8000;
/// Post-processing thresholds.
pub const SMART_PARAGRAPH_GAP_SECS: f64 = 2.0;
/// Thread count for inference. Leaves headroom for the UI thread.
pub const MIN_INFERENCE_THREADS: usize = 4;
/// History limits.
pub const HISTORY_MAX_ENTRIES: usize = 100;
/// RAM thresholds for model recommendations (in GB).
pub const RAM_MINIMUM_FOR_LOCAL_STT: f64 = 2.0;
pub const RAM_THRESHOLD_LIGHTWEIGHT: f64 = 4.0;
pub const RAM_THRESHOLD_STANDARD: f64 = 8.0;
pub const RAM_THRESHOLD_COMFORTABLE: f64 = 16.0;
/// VAD configuration defaults.
pub const VAD_SPEECH_THRESHOLD: f64 = 0.5;
pub const VAD_MIN_SPEECH_DURATION_MS: u32 = 250;
pub const VAD_MAX_SPEECH_DURATION_S: u32 = 30;
pub const VAD_MIN_SILENCE_DURATION_MS: u32 = 300;
pub const VAD_SPEECH_PAD_MS: u32 = 100;
/// Model download chunk size for progress reporting.
pub const DOWNLOAD_CHUNK_BYTES: usize = 65_536;
/// Inference thread count based on available parallelism.
pub fn inference_thread_count() -> usize {
std::thread::available_parallelism()
.map(|p| p.get().saturating_sub(1))
.unwrap_or(MIN_INFERENCE_THREADS)
.max(MIN_INFERENCE_THREADS)
}