feat(transcription): wire OnnxNpuTranscriber behind npu feature (T3.4)

This commit is contained in:
iamdoubz committed 2026-07-02 16:14:16 -05:00
1 parent f8731adae3
commit f58c0f2d6c
1 file changed
+14 -31
+14 -31
View File
@@ -1,8 +1,9 @@
//! Transcription engine (Phase 1 CPU; Phase 3 acceleration). FR-TRX-*.
//!
//! Primary engine: whisper-rs (whisper.cpp) for CPU/Vulkan/CUDA. The NPU path is
//! a second `Transcriber` impl using ONNX Runtime (ort + DirectML) — same trait,
//! same `TranscriptSegment` output (ADR-0003/0004). Callers never branch on engine.
//! a second `Transcriber` impl using ONNX Runtime (ort + OpenVINO EP on Intel
//! NPUs) — same trait, same `TranscriptSegment` output (ADR-0003/0004). Callers
//! never branch on engine.
use crate::models::{BackendId, TranscriptSegment};
use std::path::Path;
@@ -198,35 +199,17 @@ fn audio_ctx_for_window(n_samples: usize) -> i32 {
((window_secs / 30.0) * 1500.0).ceil().clamp(64.0, 1500.0) as i32
}
/// ONNX Runtime + DirectML transcriber for the NPU tier (T3.4).
///
/// ponytail: the encoder/decoder inference loop (ORT session + DirectML
/// execution provider, greedy decode over a Whisper ONNX export) is a
/// multi-day integration on its own and untestable without NPU hardware in
/// this environment — ships as a real `Transcriber` impl that fails loudly
/// instead of a silent no-op. `hardware::WinHardwareDetector` reports NPU as
/// unavailable (see hardware/mod.rs) so nothing routes here until it's built.
#[cfg(feature = "directml")]
pub struct OnnxNpuTranscriber;
#[cfg(feature = "directml")]
impl Transcriber for OnnxNpuTranscriber {
fn load(_model: &Path, _backend: BackendId) -> Result<Self, TrxError> {
Err(TrxError::Load(
"NPU (ONNX Runtime + DirectML) transcription is not yet implemented (T3.4)".into(),
))
}
fn transcribe_stream(&self, _audio: AudioWindow, _out: SegmentSink) -> Result<(), TrxError> {
Err(TrxError::Inference(
"NPU backend not yet implemented".into(),
))
}
fn transcribe_file(&self, _wav: &Path) -> Result<Vec<TranscriptSegment>, TrxError> {
Err(TrxError::Inference(
"NPU backend not yet implemented".into(),
))
}
}
// NPU tier (T3.4): Whisper ONNX on the Intel NPU via ONNX Runtime + OpenVINO.
// A real `OnnxNpuTranscriber` implementing the same `Transcriber` trait; see
// `npu.rs`. Gated on the `npu` feature so the CPU-only build never pulls `ort`.
#[cfg(feature = "npu")]
pub mod mel;
#[cfg(feature = "npu")]
pub mod npu;
#[cfg(feature = "npu")]
pub mod onnx_models;
#[cfg(feature = "npu")]
pub use npu::OnnxNpuTranscriber;
/// Streaming window worker (Phase 1, T1.5/T1.6): accumulates raw 16kHz-mono
/// chunks from the `audio` service into fixed-size, **non-overlapping** windows