Skip to content
Draft
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
10 changes: 4 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ rodio = { version = "0.19", default-features = false, features = ["wav"] }
whisper-rs = "0.15.1"

# Parakeet speech-to-text (optional, ONNX-based)
parakeet-rs = { version = "0.3", optional = true }
parakeet-rs = { version = "^0.3.1", optional = true }

# ONNX-based ASR engines (Moonshine, SenseVoice, Paraformer, Dolphin, Omnilingual)
ort = { version = "2.0.0-rc.11", optional = true }
Expand Down Expand Up @@ -101,7 +101,7 @@ ml-diarization = ["dep:ort", "dep:ndarray"]
parakeet = ["dep:parakeet-rs"]
parakeet-cuda = ["parakeet", "parakeet-rs/cuda"]
parakeet-tensorrt = ["parakeet", "parakeet-rs/tensorrt"]
parakeet-rocm = ["parakeet", "parakeet-rs/rocm"]
parakeet-rocm = ["parakeet", "parakeet-rs/migraphx"]
# Dynamic loading for system ONNX Runtime (used by Nix builds)
parakeet-load-dynamic = ["parakeet", "parakeet-rs/load-dynamic"]
# Shared ONNX dependencies for engines using fbank/CTC preprocessing
Expand Down Expand Up @@ -146,3 +146,8 @@ opt-level = 1 # Faster dev builds, whisper still usable
[[bin]]
name = "voxtype"
path = "src/main.rs"

[patch.crates-io]
# Fix MIGraphX provider options for ROCm support
# https://github.com/pykeio/ort/issues/509
ort = { git = "https://github.com/pykeio/ort", rev = "5913ae0a6f4468cf8329ba0da71b560de31481dc" }
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 20 additions & 5 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -93,19 +93,29 @@
# Wrap an ONNX package with runtime dependencies and ORT_DYLIB_PATH
# ONNX engines need ONNX Runtime at runtime for inference
libExt = if pkgs.stdenv.isDarwin then "dylib" else "so";
wrapOnnx = { onnxruntime ? pkgs.onnxruntime, pkg }: pkgs.symlinkJoin {
wrapOnnx = { onnxruntime ? pkgs.onnxruntime, pkg, extraWrapperArgs ? "" }: pkgs.symlinkJoin {
name = "${pkg.pname or "voxtype"}-wrapped-${pkg.version}";
paths = [ pkg ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/voxtype \
--prefix PATH : ${pkgs.lib.makeBinPath runtimeDeps} \
--set ORT_DYLIB_PATH "${onnxruntime}/lib/libonnxruntime.${libExt}" \
--prefix LD_LIBRARY_PATH : "${onnxruntime}/lib"
--prefix LD_LIBRARY_PATH : "${onnxruntime}/lib" \
${extraWrapperArgs}
'';
inherit (pkg) meta;
};

# Extra wrapper args for MIGraphX (ROCm) to set cache directory
migraphxWrapperArgs = ''
--run '
: "''${ORT_MIGRAPHX_MODEL_CACHE_PATH:=''${XDG_CACHE_HOME:-$HOME/.cache}/voxtype/migraphx}"
export ORT_MIGRAPHX_MODEL_CACHE_PATH
mkdir -p "$ORT_MIGRAPHX_MODEL_CACHE_PATH"
'
'';

# ONNX Runtime variants for different GPU backends
onnxruntimeCuda = pkgsUnfree.onnxruntime.override { cudaSupport = true; };
onnxruntimeRocm = pkgs.onnxruntime.override { rocmSupport = true; };
Expand All @@ -117,7 +127,12 @@
version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.version;

src = ./.;
cargoLock.lockFile = ./Cargo.lock;
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"ort-2.0.0-rc.11" = "sha256-3v6wRi3mU/Fbd3fuiGxTRAXHj+VnUTsahU/oc7eiw18=";
};
};

nativeBuildInputs = commonNativeBuildInputs ++ extraNativeBuildInputs;
buildInputs = commonBuildInputs ++ extraBuildInputs;
Expand Down Expand Up @@ -284,12 +299,12 @@
# Paraformer, Dolphin, Omnilingual)
onnx = wrapOnnx { pkg = onnxUnwrapped; };
onnx-cuda = wrapOnnx { onnxruntime = onnxruntimeCuda; pkg = onnxCudaUnwrapped; };
onnx-rocm = wrapOnnx { onnxruntime = onnxruntimeRocm; pkg = onnxRocmUnwrapped; };
onnx-rocm = wrapOnnx { onnxruntime = onnxruntimeRocm; pkg = onnxRocmUnwrapped; extraWrapperArgs = migraphxWrapperArgs; };

# Backwards-compatible aliases (parakeet → onnx)
parakeet = wrapOnnx { pkg = onnxUnwrapped; };
parakeet-cuda = wrapOnnx { onnxruntime = onnxruntimeCuda; pkg = onnxCudaUnwrapped; };
parakeet-rocm = wrapOnnx { onnxruntime = onnxruntimeRocm; pkg = onnxRocmUnwrapped; };
parakeet-rocm = wrapOnnx { onnxruntime = onnxruntimeRocm; pkg = onnxRocmUnwrapped; extraWrapperArgs = migraphxWrapperArgs; };

# Unwrapped packages (for custom wrapping scenarios)
voxtype-unwrapped = mkVoxtypeUnwrapped {};
Expand Down
2 changes: 1 addition & 1 deletion src/transcribe/parakeet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ fn build_execution_config() -> Option<ExecutionConfig> {
#[cfg(feature = "parakeet-rocm")]
{
tracing::info!("Configuring ROCm execution provider for AMD GPU acceleration");
return Some(ExecutionConfig::new().with_execution_provider(ExecutionProvider::ROCm));
return Some(ExecutionConfig::new().with_execution_provider(ExecutionProvider::MIGraphX));
}

#[cfg(not(any(
Expand Down