cohere-transcribe 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +21 -0
- data/LICENSE.txt +201 -0
- data/NOTICE +5 -0
- data/README.md +265 -0
- data/THIRD_PARTY_NOTICES.md +67 -0
- data/exe/cohere-transcribe +8 -0
- data/exe/cohere-transcribe-doctor +8 -0
- data/ext/cohere_transcribe_native/CMakeLists.txt +262 -0
- data/ext/cohere_transcribe_native/README.md +26 -0
- data/ext/cohere_transcribe_native/audio_abi.cpp +1416 -0
- data/ext/cohere_transcribe_native/audio_exports.macos +5 -0
- data/ext/cohere_transcribe_native/audio_exports.map +10 -0
- data/ext/cohere_transcribe_native/cohere_abi.cpp +1209 -0
- data/ext/cohere_transcribe_native/exports.macos +40 -0
- data/ext/cohere_transcribe_native/exports.map +45 -0
- data/ext/cohere_transcribe_native/extconf.rb +89 -0
- data/ext/cohere_transcribe_native/test/abi_smoke.rb +232 -0
- data/ext/cohere_transcribe_native/test/audio_matrix_smoke.cpp +121 -0
- data/ext/cohere_transcribe_native/test/audio_reliability_smoke.cpp +198 -0
- data/ext/cohere_transcribe_native/test/native_abi_reliability_smoke.cpp +186 -0
- data/ext/cohere_transcribe_native/test/native_batch_projection_probe.rb +81 -0
- data/ext/cohere_transcribe_native/test/native_cancellation_smoke.cpp +194 -0
- data/lib/cohere/transcribe/alignment/ATTRIBUTION.md +23 -0
- data/lib/cohere/transcribe/alignment/LICENSE.ctc-forced-aligner +407 -0
- data/lib/cohere/transcribe/alignment/LICENSE.torchaudio +25 -0
- data/lib/cohere/transcribe/alignment/LICENSE.uroman +26 -0
- data/lib/cohere/transcribe/alignment/aligner.rb +476 -0
- data/lib/cohere/transcribe/alignment/ctc.rb +224 -0
- data/lib/cohere/transcribe/alignment/text.rb +237 -0
- data/lib/cohere/transcribe/alignment/uroman_data.rb +4950 -0
- data/lib/cohere/transcribe/api.rb +173 -0
- data/lib/cohere/transcribe/asr/batching.rb +472 -0
- data/lib/cohere/transcribe/asr/failure_policy.rb +112 -0
- data/lib/cohere/transcribe/asr/native.rb +676 -0
- data/lib/cohere/transcribe/audio/ATTRIBUTION.md +8 -0
- data/lib/cohere/transcribe/audio/LICENSE.auditok +21 -0
- data/lib/cohere/transcribe/audio/decoder.rb +315 -0
- data/lib/cohere/transcribe/audio/ffmpeg_native.rb +248 -0
- data/lib/cohere/transcribe/audio/segmentation.rb +260 -0
- data/lib/cohere/transcribe/cli.rb +727 -0
- data/lib/cohere/transcribe/configuration.rb +282 -0
- data/lib/cohere/transcribe/constants.rb +14 -0
- data/lib/cohere/transcribe/dense_converter.rb +548 -0
- data/lib/cohere/transcribe/doctor.rb +576 -0
- data/lib/cohere/transcribe/errors.rb +57 -0
- data/lib/cohere/transcribe/gguf_writer.rb +268 -0
- data/lib/cohere/transcribe/hub.rb +436 -0
- data/lib/cohere/transcribe/input.rb +110 -0
- data/lib/cohere/transcribe/licenses/crispasr.txt +21 -0
- data/lib/cohere/transcribe/loader.rb +128 -0
- data/lib/cohere/transcribe/model_identity.rb +440 -0
- data/lib/cohere/transcribe/output/publication.rb +1118 -0
- data/lib/cohere/transcribe/output/rendering.rb +105 -0
- data/lib/cohere/transcribe/output/timing.rb +86 -0
- data/lib/cohere/transcribe/python_text.rb +70 -0
- data/lib/cohere/transcribe/pytorch_checkpoint.rb +1180 -0
- data/lib/cohere/transcribe/runtime/engine.rb +1676 -0
- data/lib/cohere/transcribe/runtime/model_provider.rb +390 -0
- data/lib/cohere/transcribe/runtime/precision.rb +57 -0
- data/lib/cohere/transcribe/runtime/preparation.rb +215 -0
- data/lib/cohere/transcribe/runtime/resources.rb +165 -0
- data/lib/cohere/transcribe/runtime/word_pipeline.rb +364 -0
- data/lib/cohere/transcribe/safetensors.rb +579 -0
- data/lib/cohere/transcribe/state/checkpoint.rb +224 -0
- data/lib/cohere/transcribe/state/contracts.rb +141 -0
- data/lib/cohere/transcribe/state/io.rb +727 -0
- data/lib/cohere/transcribe/state/locking.rb +211 -0
- data/lib/cohere/transcribe/state/manifest.rb +155 -0
- data/lib/cohere/transcribe/state.rb +7 -0
- data/lib/cohere/transcribe/types.rb +535 -0
- data/lib/cohere/transcribe/vad/ATTRIBUTION.md +14 -0
- data/lib/cohere/transcribe/vad/LICENSE.faster-whisper +21 -0
- data/lib/cohere/transcribe/vad/LICENSE.silero-vad +21 -0
- data/lib/cohere/transcribe/vad/silero.rb +344 -0
- data/lib/cohere/transcribe/vad/silero_vad_v6.onnx +0 -0
- data/lib/cohere/transcribe/vad/timestamps.rb +219 -0
- data/lib/cohere/transcribe/version.rb +7 -0
- data/lib/cohere/transcribe.rb +26 -0
- data/sig/cohere/transcribe.rbs +250 -0
- data/vendor/crispasr/AUTHORS +510 -0
- data/vendor/crispasr/LICENSE +21 -0
- data/vendor/crispasr/UPSTREAM.md +9 -0
- data/vendor/crispasr/VERSION +1 -0
- data/vendor/crispasr/ggml/AUTHORS +335 -0
- data/vendor/crispasr/ggml/CMakeLists.txt +512 -0
- data/vendor/crispasr/ggml/LICENSE +21 -0
- data/vendor/crispasr/ggml/README.md +49 -0
- data/vendor/crispasr/ggml/cmake/FindNCCL.cmake +36 -0
- data/vendor/crispasr/ggml/cmake/GitVars.cmake +22 -0
- data/vendor/crispasr/ggml/cmake/common.cmake +50 -0
- data/vendor/crispasr/ggml/cmake/ggml-config.cmake.in +191 -0
- data/vendor/crispasr/ggml/ggml.pc.in +10 -0
- data/vendor/crispasr/ggml/include/ggml-alloc.h +85 -0
- data/vendor/crispasr/ggml/include/ggml-backend.h +431 -0
- data/vendor/crispasr/ggml/include/ggml-blas.h +25 -0
- data/vendor/crispasr/ggml/include/ggml-cann.h +123 -0
- data/vendor/crispasr/ggml/include/ggml-cpp.h +39 -0
- data/vendor/crispasr/ggml/include/ggml-cpu.h +151 -0
- data/vendor/crispasr/ggml/include/ggml-cuda.h +50 -0
- data/vendor/crispasr/ggml/include/ggml-hexagon.h +19 -0
- data/vendor/crispasr/ggml/include/ggml-metal.h +61 -0
- data/vendor/crispasr/ggml/include/ggml-opencl.h +26 -0
- data/vendor/crispasr/ggml/include/ggml-openvino.h +37 -0
- data/vendor/crispasr/ggml/include/ggml-opt.h +256 -0
- data/vendor/crispasr/ggml/include/ggml-rpc.h +35 -0
- data/vendor/crispasr/ggml/include/ggml-sycl.h +49 -0
- data/vendor/crispasr/ggml/include/ggml-virtgpu.h +14 -0
- data/vendor/crispasr/ggml/include/ggml-vulkan.h +29 -0
- data/vendor/crispasr/ggml/include/ggml-webgpu.h +19 -0
- data/vendor/crispasr/ggml/include/ggml-zdnn.h +17 -0
- data/vendor/crispasr/ggml/include/ggml-zendnn.h +22 -0
- data/vendor/crispasr/ggml/include/ggml.h +2887 -0
- data/vendor/crispasr/ggml/include/gguf.h +204 -0
- data/vendor/crispasr/ggml/src/CMakeLists.txt +493 -0
- data/vendor/crispasr/ggml/src/ggml-alloc.c +1323 -0
- data/vendor/crispasr/ggml/src/ggml-backend-dl.cpp +48 -0
- data/vendor/crispasr/ggml/src/ggml-backend-dl.h +44 -0
- data/vendor/crispasr/ggml/src/ggml-backend-impl.h +275 -0
- data/vendor/crispasr/ggml/src/ggml-backend-meta.cpp +2145 -0
- data/vendor/crispasr/ggml/src/ggml-backend-reg.cpp +586 -0
- data/vendor/crispasr/ggml/src/ggml-backend.cpp +2437 -0
- data/vendor/crispasr/ggml/src/ggml-common.h +1900 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/CMakeLists.txt +718 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/amx/amx.cpp +249 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/amx/amx.h +8 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/amx/common.h +115 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/amx/mmq.cpp +2512 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/amx/mmq.h +10 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp +98 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/arm/quants.c +4244 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/arm/repack.cpp +5156 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/loongarch/quants.c +2158 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/powerpc/cpu-feats.cpp +82 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/powerpc/quants.c +2304 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/riscv/cpu-feats.cpp +38 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/riscv/quants.c +4455 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/riscv/repack.cpp +1703 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp +50 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/s390/quants.c +1465 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/wasm/quants.c +1220 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/x86/cpu-feats.cpp +327 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/x86/quants.c +3970 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch/x86/repack.cpp +6407 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/arch-fallback.h +349 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/binary-ops.cpp +154 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/binary-ops.h +16 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/cmake/FindSIMD.cmake +100 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/common.h +95 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/ggml-cpu-impl.h +539 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/ggml-cpu.c +3791 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/ggml-cpu.cpp +703 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/hbm.cpp +55 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/hbm.h +8 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/kleidiai/kernels.cpp +939 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/kleidiai/kernels.h +90 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +1513 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/kleidiai/kleidiai.h +17 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/llamafile/sgemm.cpp +4051 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/llamafile/sgemm.h +25 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/ops.cpp +11662 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/ops.h +121 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/quants.c +1288 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/quants.h +103 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/repack.cpp +4836 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/repack.h +245 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/simd-gemm.h +226 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/simd-mappings.h +1329 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/spacemit/ime.cpp +1025 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/spacemit/ime.h +13 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/spacemit/ime1_kernels.cpp +3196 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/spacemit/ime_kernels.h +26 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/traits.cpp +36 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/traits.h +38 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/unary-ops.cpp +336 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/unary-ops.h +35 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/vec.cpp +681 -0
- data/vendor/crispasr/ggml/src/ggml-cpu/vec.h +1606 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/CMakeLists.txt +272 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/acc.cu +61 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/acc.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/add-id.cu +58 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/add-id.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/arange.cu +34 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/arange.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/argmax.cu +91 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/argmax.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/argsort.cu +265 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/argsort.cuh +19 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/binbcast.cu +534 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/binbcast.cuh +12 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/clamp.cu +45 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/clamp.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/col2im-1d.cu +81 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/col2im-1d.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/common.cuh +1489 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/concat.cu +204 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/concat.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv-transpose-1d.cu +97 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv-transpose-1d.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv2d-dw.cu +161 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv2d-dw.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv2d-transpose.cu +115 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv2d-transpose.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv2d.cu +166 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/conv2d.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/convert.cu +892 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/convert.cuh +66 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/count-equal.cu +64 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/count-equal.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cp-async.cuh +57 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cpy-utils.cuh +217 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cpy.cu +581 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cpy.cuh +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cross-entropy-loss.cu +177 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cross-entropy-loss.cuh +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cumsum.cu +307 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/cumsum.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/dequantize.cuh +99 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/diag.cu +77 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/diag.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/diagmask.cu +40 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/diagmask.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-common.cuh +1212 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-mma-f16.cuh +1860 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-tile.cu +57 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-tile.cuh +1309 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-vec.cuh +600 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-wmma-f16.cu +696 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn-wmma-f16.cuh +51 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn.cu +620 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fattn.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fill.cu +37 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/fill.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/gated_delta_net.cu +273 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/gated_delta_net.cuh +4 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/getrows.cu +332 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/getrows.cuh +15 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/ggml-cuda.cu +5580 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/gla.cu +93 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/gla.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/im2col.cu +274 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/im2col.cuh +6 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mean.cu +75 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mean.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mma.cuh +1333 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmf.cu +191 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmf.cuh +908 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmid.cu +164 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmid.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmq.cu +372 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmq.cuh +4175 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmvf.cu +862 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmvf.cuh +14 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmvq.cu +1161 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/mmvq.cuh +16 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/norm.cu +756 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/norm.cuh +20 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/opt-step-adamw.cu +78 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/opt-step-adamw.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/opt-step-sgd.cu +49 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/opt-step-sgd.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/out-prod.cu +68 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/out-prod.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/pad.cu +106 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/pad.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/pad_reflect_1d.cu +91 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/pad_reflect_1d.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/pool2d.cu +94 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/pool2d.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/quantize.cu +443 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/quantize.cuh +41 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/reduce_rows.cuh +39 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/roll.cu +67 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/roll.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/rope.cu +665 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/rope.cuh +9 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/scale.cu +34 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/scale.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/set-rows.cu +330 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/set-rows.cuh +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/set.cu +39 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/set.cuh +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/softcap.cu +34 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/softcap.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/softmax.cu +472 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/softmax.cuh +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/solve_tri.cu +275 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/solve_tri.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/ssm-conv.cu +197 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/ssm-conv.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/ssm-scan.cu +342 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/ssm-scan.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/sum.cu +41 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/sum.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/sumrows.cu +43 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/sumrows.cuh +4 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_16.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu +6 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_8.cu +11 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_1.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_2.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_4.cu +12 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_16.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu +6 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_4.cu +12 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_8.cu +11 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_32-ncols2_1.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_32-ncols2_2.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_16.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_2.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_4.cu +12 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_8.cu +11 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_64-ncols2_1.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_1.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_2.cu +10 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_4.cu +12 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_8.cu +11 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq112-dv112.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq128-dv128.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq256-dv256.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq40-dv40.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq512-dv512.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq576-dv512.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq64-dv64.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq72-dv72.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq80-dv80.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq96-dv96.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-bf16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-f16.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q4_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q4_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q5_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q5_1.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-q8_0.cu +7 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_1.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_10.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_11.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_12.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_13.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_14.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_15.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_16.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_2.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_3.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_4.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_5.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_6.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_7.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_8.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmf-instance-ncols_9.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq1_s.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq2_s.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq2_xs.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq2_xxs.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq3_s.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq3_xxs.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq4_nl.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-iq4_xs.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-mxfp4.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-nvfp4.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q1_0.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q2_k.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q3_k.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_0.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_1.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_k.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_0.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_1.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_k.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q6_k.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/template-instances/mmq-instance-q8_0.cu +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/top-k.cu +95 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/top-k.cuh +3 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/topk-moe.cu +415 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/topk-moe.cuh +27 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/tri.cu +136 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/tri.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/tsembd.cu +47 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/tsembd.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/unary.cu +644 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/unary.cuh +116 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/upscale.cu +293 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/upscale.cuh +5 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/vecdotq.cuh +1317 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/vendors/cuda.h +28 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/vendors/hip.h +306 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/vendors/musa.h +148 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/wkv.cu +199 -0
- data/vendor/crispasr/ggml/src/ggml-cuda/wkv.cuh +7 -0
- data/vendor/crispasr/ggml/src/ggml-impl.h +783 -0
- data/vendor/crispasr/ggml/src/ggml-metal/CMakeLists.txt +124 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-common.cpp +457 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-common.h +52 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-context.h +41 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-context.m +778 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-device.cpp +2117 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-device.h +299 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-device.m +2093 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-impl.h +1267 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-ops.cpp +5023 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal-ops.h +111 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal.cpp +954 -0
- data/vendor/crispasr/ggml/src/ggml-metal/ggml-metal.metal +11756 -0
- data/vendor/crispasr/ggml/src/ggml-opt.cpp +1094 -0
- data/vendor/crispasr/ggml/src/ggml-quants.c +5491 -0
- data/vendor/crispasr/ggml/src/ggml-quants.h +112 -0
- data/vendor/crispasr/ggml/src/ggml-threading.cpp +12 -0
- data/vendor/crispasr/ggml/src/ggml-threading.h +14 -0
- data/vendor/crispasr/ggml/src/ggml.c +7925 -0
- data/vendor/crispasr/ggml/src/ggml.cpp +26 -0
- data/vendor/crispasr/ggml/src/gguf.cpp +1556 -0
- data/vendor/crispasr/src/cohere-arch.h +137 -0
- data/vendor/crispasr/src/cohere.cpp +5642 -0
- data/vendor/crispasr/src/cohere.h +327 -0
- data/vendor/crispasr/src/cohere_batch_planner.h +82 -0
- data/vendor/crispasr/src/cohere_chunking.h +64 -0
- data/vendor/crispasr/src/cohere_decoder_batch_layout.h +60 -0
- data/vendor/crispasr/src/cohere_encoder_padded_layout.h +27 -0
- data/vendor/crispasr/src/cohere_frontend.cpp +189 -0
- data/vendor/crispasr/src/cohere_frontend.h +31 -0
- data/vendor/crispasr/src/cohere_ragged_controller.h +149 -0
- data/vendor/crispasr/src/cohere_token_renderer.h +181 -0
- data/vendor/crispasr/src/core/attention.h +924 -0
- data/vendor/crispasr/src/core/audio_chunking.h +97 -0
- data/vendor/crispasr/src/core/beam_decode.h +486 -0
- data/vendor/crispasr/src/core/cpu_ops.h +135 -0
- data/vendor/crispasr/src/core/gguf_loader.cpp +1021 -0
- data/vendor/crispasr/src/core/gguf_loader.h +216 -0
- data/vendor/crispasr/src/core/gpu_backend_pref.h +119 -0
- data/vendor/crispasr/src/core/mel.cpp +519 -0
- data/vendor/crispasr/src/core/mel.h +265 -0
- data/vendor/crispasr/src/core/ngram_loop_fix.h +173 -0
- data/vendor/crispasr/src/core/repetition_loop_guard.h +54 -0
- data/vendor/crispasr/src/crispasr_imatrix.cpp +255 -0
- data/vendor/crispasr/src/crispasr_imatrix.h +38 -0
- metadata +596 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.14...3.31)
|
|
2
|
+
|
|
3
|
+
project(cohere_transcribe_native VERSION 0.8.9 LANGUAGES C CXX)
|
|
4
|
+
|
|
5
|
+
option(COHERE_TRANSCRIBE_CUDA "Build the optional ggml CUDA backend" OFF)
|
|
6
|
+
option(COHERE_TRANSCRIBE_METAL "Build the optional ggml Metal backend" OFF)
|
|
7
|
+
option(COHERE_TRANSCRIBE_NATIVE "Tune the CPU backend for the build host" OFF)
|
|
8
|
+
option(COHERE_TRANSCRIBE_OPENMP "Use OpenMP in ggml and Cohere feature extraction" OFF)
|
|
9
|
+
|
|
10
|
+
if(COHERE_TRANSCRIBE_METAL AND NOT APPLE)
|
|
11
|
+
message(FATAL_ERROR "COHERE_TRANSCRIBE_METAL is only supported on Apple platforms")
|
|
12
|
+
endif()
|
|
13
|
+
|
|
14
|
+
if(COHERE_TRANSCRIBE_CUDA AND APPLE)
|
|
15
|
+
message(FATAL_ERROR "The packaged CUDA build is supported on Linux only")
|
|
16
|
+
endif()
|
|
17
|
+
|
|
18
|
+
if(COHERE_TRANSCRIBE_CUDA AND COHERE_TRANSCRIBE_METAL)
|
|
19
|
+
message(FATAL_ERROR "CUDA and Metal cannot be enabled in the same packaged runtime")
|
|
20
|
+
endif()
|
|
21
|
+
|
|
22
|
+
get_filename_component(COHERE_TRANSCRIBE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
|
|
23
|
+
set(CRISPASR_VENDOR "${COHERE_TRANSCRIBE_ROOT}/vendor/crispasr")
|
|
24
|
+
set(GGML_VENDOR "${CRISPASR_VENDOR}/ggml")
|
|
25
|
+
|
|
26
|
+
if(NOT EXISTS "${CRISPASR_VENDOR}/src/cohere.cpp" OR NOT EXISTS "${GGML_VENDOR}/CMakeLists.txt")
|
|
27
|
+
message(FATAL_ERROR "The vendored CrispASR/ggml source snapshot is incomplete")
|
|
28
|
+
endif()
|
|
29
|
+
|
|
30
|
+
# ggml diagnostics retain __FILE__ strings in release builds. Map the
|
|
31
|
+
# installation and build roots to stable names so identical source gems do not
|
|
32
|
+
# produce path-dependent shared libraries. Keep the more specific build map
|
|
33
|
+
# last because RubyGems normally builds beneath the extracted source root.
|
|
34
|
+
set(COHERE_TRANSCRIBE_SOURCE_PREFIX_MAP
|
|
35
|
+
"-ffile-prefix-map=${COHERE_TRANSCRIBE_ROOT}=/cohere-transcribe-source")
|
|
36
|
+
set(COHERE_TRANSCRIBE_BUILD_PREFIX_MAP
|
|
37
|
+
"-ffile-prefix-map=${CMAKE_BINARY_DIR}=/cohere-transcribe-build")
|
|
38
|
+
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
|
|
39
|
+
add_compile_options(
|
|
40
|
+
"$<$<COMPILE_LANGUAGE:C>:${COHERE_TRANSCRIBE_SOURCE_PREFIX_MAP}>"
|
|
41
|
+
"$<$<COMPILE_LANGUAGE:C>:${COHERE_TRANSCRIBE_BUILD_PREFIX_MAP}>"
|
|
42
|
+
)
|
|
43
|
+
endif()
|
|
44
|
+
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
|
45
|
+
add_compile_options(
|
|
46
|
+
"$<$<COMPILE_LANGUAGE:CXX>:${COHERE_TRANSCRIBE_SOURCE_PREFIX_MAP}>"
|
|
47
|
+
"$<$<COMPILE_LANGUAGE:CXX>:${COHERE_TRANSCRIBE_BUILD_PREFIX_MAP}>"
|
|
48
|
+
)
|
|
49
|
+
endif()
|
|
50
|
+
|
|
51
|
+
# ggml is linked statically into one private libcrispasr artifact. This avoids
|
|
52
|
+
# relying on loader search paths or shipping a family of versioned sibling
|
|
53
|
+
# libraries while retaining the upstream target definitions unchanged.
|
|
54
|
+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static dependency libraries" FORCE)
|
|
55
|
+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
56
|
+
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
57
|
+
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
58
|
+
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
|
59
|
+
|
|
60
|
+
set(GGML_BACKEND_DL OFF CACHE BOOL "" FORCE)
|
|
61
|
+
set(GGML_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
62
|
+
set(GGML_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
63
|
+
set(GGML_CCACHE OFF CACHE BOOL "" FORCE)
|
|
64
|
+
set(GGML_CPU ON CACHE BOOL "" FORCE)
|
|
65
|
+
set(GGML_CPU_ALL_VARIANTS OFF CACHE BOOL "" FORCE)
|
|
66
|
+
set(GGML_CUDA ${COHERE_TRANSCRIBE_CUDA} CACHE BOOL "" FORCE)
|
|
67
|
+
set(GGML_CUDA_NCCL OFF CACHE BOOL "" FORCE)
|
|
68
|
+
set(GGML_METAL ${COHERE_TRANSCRIBE_METAL} CACHE BOOL "" FORCE)
|
|
69
|
+
set(GGML_METAL_EMBED_LIBRARY ${COHERE_TRANSCRIBE_METAL} CACHE BOOL "" FORCE)
|
|
70
|
+
set(GGML_NATIVE ${COHERE_TRANSCRIBE_NATIVE} CACHE BOOL "" FORCE)
|
|
71
|
+
set(GGML_OPENMP ${COHERE_TRANSCRIBE_OPENMP} CACHE BOOL "" FORCE)
|
|
72
|
+
set(GGML_BLAS OFF CACHE BOOL "" FORCE)
|
|
73
|
+
set(GGML_ACCELERATE OFF CACHE BOOL "" FORCE)
|
|
74
|
+
set(GGML_LLAMAFILE ON CACHE BOOL "" FORCE)
|
|
75
|
+
set(GGML_ALL_WARNINGS OFF CACHE BOOL "" FORCE)
|
|
76
|
+
set(GGML_FATAL_WARNINGS OFF CACHE BOOL "" FORCE)
|
|
77
|
+
set(GGML_RPC OFF CACHE BOOL "" FORCE)
|
|
78
|
+
set(GGML_VULKAN OFF CACHE BOOL "" FORCE)
|
|
79
|
+
set(GGML_HIP OFF CACHE BOOL "" FORCE)
|
|
80
|
+
set(GGML_SYCL OFF CACHE BOOL "" FORCE)
|
|
81
|
+
set(GGML_OPENCL OFF CACHE BOOL "" FORCE)
|
|
82
|
+
set(GGML_OPENVINO OFF CACHE BOOL "" FORCE)
|
|
83
|
+
|
|
84
|
+
# With GGML_NATIVE=OFF, upstream ggml otherwise selects a common AVX2/FMA
|
|
85
|
+
# profile on x86. Disable those opt-ins for a baseline source gem; builders
|
|
86
|
+
# can explicitly request host tuning with COHERE_TRANSCRIBE_NATIVE=ON.
|
|
87
|
+
if(NOT COHERE_TRANSCRIBE_NATIVE)
|
|
88
|
+
foreach(feature SSE42 AVX AVX_VNNI AVX2 BMI2 FMA F16C AVX512
|
|
89
|
+
AVX512_VBMI AVX512_VNNI AVX512_BF16
|
|
90
|
+
AMX_TILE AMX_INT8 AMX_BF16)
|
|
91
|
+
set(GGML_${feature} OFF CACHE BOOL "" FORCE)
|
|
92
|
+
endforeach()
|
|
93
|
+
endif()
|
|
94
|
+
|
|
95
|
+
# Cohere model tensors contain hierarchical names longer than ggml's stock
|
|
96
|
+
# default. This matches the defining setting in the pinned CrispASR build.
|
|
97
|
+
add_compile_definitions(GGML_MAX_NAME=128)
|
|
98
|
+
|
|
99
|
+
add_subdirectory("${GGML_VENDOR}" "${CMAKE_CURRENT_BINARY_DIR}/ggml" EXCLUDE_FROM_ALL)
|
|
100
|
+
|
|
101
|
+
if(COHERE_TRANSCRIBE_CUDA)
|
|
102
|
+
# NVCC forwards prefix maps through the host compiler. A response file
|
|
103
|
+
# preserves paths containing spaces, while object-directory temporaries
|
|
104
|
+
# avoid PID-derived tmpxft names that otherwise survive the final link.
|
|
105
|
+
# Its device frontend also derives internal module names from the absolute
|
|
106
|
+
# source path. Keep NVCC's per-file basename and give that path component a
|
|
107
|
+
# stable identity shared by equivalent source trees.
|
|
108
|
+
set(COHERE_TRANSCRIBE_CUDA_PREFIX_MAP_RESPONSE "cohere_cuda_prefix_map.rsp")
|
|
109
|
+
set(COHERE_TRANSCRIBE_CUDA_SOURCE_IDENTITY
|
|
110
|
+
"/cohere-transcribe-source/vendor/crispasr/ggml/src/ggml-cuda")
|
|
111
|
+
file(GENERATE
|
|
112
|
+
OUTPUT "${CMAKE_BINARY_DIR}/${COHERE_TRANSCRIBE_CUDA_PREFIX_MAP_RESPONSE}"
|
|
113
|
+
CONTENT "\"${COHERE_TRANSCRIBE_SOURCE_PREFIX_MAP}\"\n\"${COHERE_TRANSCRIBE_BUILD_PREFIX_MAP}\"\n"
|
|
114
|
+
)
|
|
115
|
+
target_compile_options(ggml-cuda PRIVATE
|
|
116
|
+
"$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:-Xcompiler=@${COHERE_TRANSCRIBE_CUDA_PREFIX_MAP_RESPONSE}>"
|
|
117
|
+
"$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:--objdir-as-tempdir>"
|
|
118
|
+
"$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:-Xcudafe=--orig_src_path_name=${COHERE_TRANSCRIBE_CUDA_SOURCE_IDENTITY}>"
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# CUDA 12.9 added NVCC's supported random-seed option for stable PTX and
|
|
122
|
+
# object output. Give each translation unit a distinct seed derived from
|
|
123
|
+
# its canonical relative path, as required by NVCC. CUDA's ggml subproject
|
|
124
|
+
# already requires CMake 3.18, which supplies TARGET_DIRECTORY here.
|
|
125
|
+
get_target_property(COHERE_TRANSCRIBE_CUDA_SOURCES ggml-cuda SOURCES)
|
|
126
|
+
foreach(COHERE_TRANSCRIBE_CUDA_SOURCE IN LISTS COHERE_TRANSCRIBE_CUDA_SOURCES)
|
|
127
|
+
if(COHERE_TRANSCRIBE_CUDA_SOURCE MATCHES "\\.cu$")
|
|
128
|
+
if(IS_ABSOLUTE "${COHERE_TRANSCRIBE_CUDA_SOURCE}")
|
|
129
|
+
set(COHERE_TRANSCRIBE_CUDA_SOURCE_ABSOLUTE
|
|
130
|
+
"${COHERE_TRANSCRIBE_CUDA_SOURCE}")
|
|
131
|
+
else()
|
|
132
|
+
get_filename_component(COHERE_TRANSCRIBE_CUDA_SOURCE_ABSOLUTE
|
|
133
|
+
"${COHERE_TRANSCRIBE_CUDA_SOURCE}" ABSOLUTE
|
|
134
|
+
BASE_DIR "${GGML_VENDOR}/src/ggml-cuda")
|
|
135
|
+
endif()
|
|
136
|
+
file(RELATIVE_PATH COHERE_TRANSCRIBE_CUDA_SOURCE_RELATIVE
|
|
137
|
+
"${GGML_VENDOR}/src/ggml-cuda"
|
|
138
|
+
"${COHERE_TRANSCRIBE_CUDA_SOURCE_ABSOLUTE}")
|
|
139
|
+
string(MAKE_C_IDENTIFIER "${COHERE_TRANSCRIBE_CUDA_SOURCE_RELATIVE}"
|
|
140
|
+
COHERE_TRANSCRIBE_CUDA_SOURCE_SEED)
|
|
141
|
+
set_property(SOURCE "${COHERE_TRANSCRIBE_CUDA_SOURCE}"
|
|
142
|
+
TARGET_DIRECTORY ggml-cuda APPEND PROPERTY COMPILE_OPTIONS
|
|
143
|
+
"$<$<AND:$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>,$<VERSION_GREATER_EQUAL:$<CUDA_COMPILER_VERSION>,12.9>>:--frandom-seed=cohere-transcribe-${COHERE_TRANSCRIBE_CUDA_SOURCE_SEED}>")
|
|
144
|
+
endif()
|
|
145
|
+
endforeach()
|
|
146
|
+
|
|
147
|
+
find_package(CUDAToolkit REQUIRED)
|
|
148
|
+
if(CUDAToolkit_VERSION VERSION_LESS "12.9")
|
|
149
|
+
message(STATUS
|
|
150
|
+
"NVCC ${CUDAToolkit_VERSION} predates --frandom-seed; "
|
|
151
|
+
"its generated CUDA objects may differ byte-for-byte across rebuilds")
|
|
152
|
+
endif()
|
|
153
|
+
endif()
|
|
154
|
+
|
|
155
|
+
find_package(Threads REQUIRED)
|
|
156
|
+
|
|
157
|
+
# ggml's upstream fatal-error path can fork and attach gdb/lldb to itself.
|
|
158
|
+
# A library embedded in a Ruby process must never launch a debugger behind the
|
|
159
|
+
# caller's back, so retain its in-process backtrace while compiling the
|
|
160
|
+
# subprocess branch out of this packaged build. The vendored source keeps its
|
|
161
|
+
# upstream default when it is built outside this CMake project.
|
|
162
|
+
target_compile_definitions(ggml-base PRIVATE GGML_BACKTRACE_NO_DEBUGGER)
|
|
163
|
+
|
|
164
|
+
add_library(crispasr SHARED
|
|
165
|
+
cohere_abi.cpp
|
|
166
|
+
"${CRISPASR_VENDOR}/src/cohere.cpp"
|
|
167
|
+
"${CRISPASR_VENDOR}/src/cohere_frontend.cpp"
|
|
168
|
+
"${CRISPASR_VENDOR}/src/core/gguf_loader.cpp"
|
|
169
|
+
"${CRISPASR_VENDOR}/src/core/mel.cpp"
|
|
170
|
+
"${CRISPASR_VENDOR}/src/crispasr_imatrix.cpp"
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
target_compile_features(crispasr PRIVATE cxx_std_20)
|
|
174
|
+
target_include_directories(crispasr PRIVATE
|
|
175
|
+
"${CRISPASR_VENDOR}/src"
|
|
176
|
+
"${GGML_VENDOR}/include"
|
|
177
|
+
"${GGML_VENDOR}/src"
|
|
178
|
+
)
|
|
179
|
+
target_link_libraries(crispasr PRIVATE ggml ggml-base ggml-cpu Threads::Threads)
|
|
180
|
+
|
|
181
|
+
if(COHERE_TRANSCRIBE_OPENMP)
|
|
182
|
+
find_package(OpenMP REQUIRED COMPONENTS CXX)
|
|
183
|
+
target_link_libraries(crispasr PRIVATE OpenMP::OpenMP_CXX)
|
|
184
|
+
endif()
|
|
185
|
+
|
|
186
|
+
if(COHERE_TRANSCRIBE_METAL)
|
|
187
|
+
target_compile_definitions(crispasr PRIVATE GGML_USE_METAL)
|
|
188
|
+
target_link_libraries(crispasr PRIVATE ggml-metal)
|
|
189
|
+
endif()
|
|
190
|
+
|
|
191
|
+
if(COHERE_TRANSCRIBE_CUDA)
|
|
192
|
+
target_compile_definitions(crispasr PRIVATE GGML_USE_CUDA)
|
|
193
|
+
target_link_libraries(crispasr PRIVATE ggml-cuda)
|
|
194
|
+
endif()
|
|
195
|
+
|
|
196
|
+
if(MSVC)
|
|
197
|
+
target_compile_definitions(crispasr PRIVATE _USE_MATH_DEFINES NOMINMAX)
|
|
198
|
+
else()
|
|
199
|
+
target_compile_options(crispasr PRIVATE -O3)
|
|
200
|
+
endif()
|
|
201
|
+
|
|
202
|
+
set_target_properties(crispasr PROPERTIES
|
|
203
|
+
OUTPUT_NAME crispasr
|
|
204
|
+
CXX_VISIBILITY_PRESET hidden
|
|
205
|
+
VISIBILITY_INLINES_HIDDEN YES
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
if(APPLE)
|
|
209
|
+
target_link_options(crispasr PRIVATE
|
|
210
|
+
"LINKER:-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/exports.macos")
|
|
211
|
+
elseif(UNIX)
|
|
212
|
+
# GNU ld records the version script in its generated dependency file.
|
|
213
|
+
# Keep that entry relative and space-free so Ninja can parse it when the
|
|
214
|
+
# source or build root contains spaces.
|
|
215
|
+
set(COHERE_TRANSCRIBE_EXPORTS_MAP "cohere_exports.map")
|
|
216
|
+
configure_file(
|
|
217
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/exports.map"
|
|
218
|
+
"${CMAKE_BINARY_DIR}/${COHERE_TRANSCRIBE_EXPORTS_MAP}"
|
|
219
|
+
COPYONLY
|
|
220
|
+
)
|
|
221
|
+
target_link_options(crispasr PRIVATE
|
|
222
|
+
"LINKER:--version-script=${COHERE_TRANSCRIBE_EXPORTS_MAP}")
|
|
223
|
+
endif()
|
|
224
|
+
|
|
225
|
+
# Audio decoding remains independent from the model runtime. This tiny
|
|
226
|
+
# adapter dynamically loads a compatible FFmpeg runtime when present, so the
|
|
227
|
+
# source gem neither links to a particular libav major nor needs FFmpeg -dev
|
|
228
|
+
# headers. Keeping it in a separate library lets libsndfile-only installs use
|
|
229
|
+
# the gem even when FFmpeg is absent.
|
|
230
|
+
add_library(cohere_audio SHARED audio_abi.cpp)
|
|
231
|
+
target_compile_features(cohere_audio PRIVATE cxx_std_20)
|
|
232
|
+
target_link_libraries(cohere_audio PRIVATE ${CMAKE_DL_LIBS})
|
|
233
|
+
if(MSVC)
|
|
234
|
+
target_compile_definitions(cohere_audio PRIVATE NOMINMAX)
|
|
235
|
+
else()
|
|
236
|
+
target_compile_options(cohere_audio PRIVATE -O3)
|
|
237
|
+
endif()
|
|
238
|
+
set_target_properties(cohere_audio PROPERTIES
|
|
239
|
+
OUTPUT_NAME cohere_audio
|
|
240
|
+
CXX_VISIBILITY_PRESET hidden
|
|
241
|
+
VISIBILITY_INLINES_HIDDEN YES
|
|
242
|
+
)
|
|
243
|
+
if(APPLE)
|
|
244
|
+
target_link_options(cohere_audio PRIVATE
|
|
245
|
+
"LINKER:-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/audio_exports.macos")
|
|
246
|
+
elseif(UNIX)
|
|
247
|
+
set(COHERE_TRANSCRIBE_AUDIO_EXPORTS_MAP "cohere_audio_exports.map")
|
|
248
|
+
configure_file(
|
|
249
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/audio_exports.map"
|
|
250
|
+
"${CMAKE_BINARY_DIR}/${COHERE_TRANSCRIBE_AUDIO_EXPORTS_MAP}"
|
|
251
|
+
COPYONLY
|
|
252
|
+
)
|
|
253
|
+
target_link_options(cohere_audio PRIVATE
|
|
254
|
+
"LINKER:--version-script=${COHERE_TRANSCRIBE_AUDIO_EXPORTS_MAP}")
|
|
255
|
+
endif()
|
|
256
|
+
|
|
257
|
+
# A dedicated component lets extconf install only the private runtime and not
|
|
258
|
+
# ggml's headers, CMake package metadata, or static archives.
|
|
259
|
+
install(TARGETS crispasr cohere_audio
|
|
260
|
+
RUNTIME DESTINATION . COMPONENT cohere_transcribe_runtime
|
|
261
|
+
LIBRARY DESTINATION . COMPONENT cohere_transcribe_runtime NAMELINK_COMPONENT cohere_transcribe_runtime
|
|
262
|
+
)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Native Cohere runtime
|
|
2
|
+
|
|
3
|
+
This extension builds the vendored Cohere backend and ggml into one private `libcrispasr` shared library, plus a small `libcohere_audio` adapter for direct FFmpeg C-ABI decoding. It does not require Python, the `ffmpeg` executable, or a neighboring CrispASR checkout. The audio adapter dynamically supports FFmpeg 4 through 8 runtime libraries and fails cleanly when no compatible tuple is installed; no FFmpeg development headers are needed to build the gem.
|
|
4
|
+
|
|
5
|
+
The Cohere session ABI exposes a logical batch capacity of 24. A logical call runs the padded encoder in consecutive microbatches of at most eight lanes, gathers their valid states, then invokes the ragged decoder once for all logical lanes. Calls above 24 are rejected. Failures expose a thread-local kind (`invalid_argument`, `out_of_memory`, `invariant`, `runtime`, or `cancelled`) and bounded diagnostic message so Ruby can split only OOM batches and distinguish fatal session errors without parsing text.
|
|
6
|
+
|
|
7
|
+
Dense inference is cooperatively cancellable through `crispasr_session_cancel`. Cancelling an idle session is a no-op, so a late request cannot poison the next operation. CPU and Metal execution use ggml's abort callback, with additional checks between inference stages and decoder steps. CUDA observes those bounded checkpoints after the current ggml graph returns because its graph execution is not asynchronously interruptible. The Ruby binding runs the foreign call on a private worker so its caller remains interruptible; on `Interrupt` or another caller-side asynchronous exception it requests cancellation, hard-joins that worker, and then re-raises the original caller exception. Session close and other inference calls remain serialized until that worker has fully unwound.
|
|
8
|
+
|
|
9
|
+
The audio ABI uses `avio_open2` with FFmpeg's public `AVIOInterruptCB` for cooperative cancellation and monotonic deadlines. Duration inspection is a metadata probe and does not materialize PCM. Interruption is cooperative: the callback can wake FFmpeg I/O, while codec/resampler work is checked whenever it returns control to the adapter.
|
|
10
|
+
|
|
11
|
+
The gemspec should register `ext/cohere_transcribe_native/extconf.rb` in `spec.extensions` and include both `ext/` and `vendor/` in `spec.files`. The build installs the library into `lib/cohere/transcribe/native`, which is already one of the runtime binding's search paths.
|
|
12
|
+
|
|
13
|
+
Packaged builds define `GGML_BACKTRACE_NO_DEBUGGER`: fatal ggml diagnostics use the platform's in-process backtrace implementation and never fork or execute `gdb`/`lldb`. The upstream debugger-attaching behavior remains unchanged when the vendored ggml snapshot is built outside this gem's CMake project.
|
|
14
|
+
|
|
15
|
+
CPU is the default. Optional build flags are:
|
|
16
|
+
|
|
17
|
+
- `COHERE_TRANSCRIBE_NATIVE=1`: tune CPU code for the build machine.
|
|
18
|
+
- `COHERE_TRANSCRIBE_OPENMP=1`: enable OpenMP.
|
|
19
|
+
- `COHERE_TRANSCRIBE_CUDA=1`: enable CUDA on Linux (CUDA toolkit and CMake 3.18+ required).
|
|
20
|
+
- `COHERE_TRANSCRIBE_METAL=1`: enable embedded Metal on macOS (Xcode tools required).
|
|
21
|
+
- `COHERE_TRANSCRIBE_NATIVE_JOBS=N`: set CMake build parallelism.
|
|
22
|
+
- `COHERE_TRANSCRIBE_CMAKE_ARGS=...`: append advanced CMake arguments.
|
|
23
|
+
|
|
24
|
+
CUDA follows ggml's upstream architecture set. To make a smaller build for one known GPU, append (for example) `COHERE_TRANSCRIBE_CMAKE_ARGS=-DCMAKE_CUDA_ARCHITECTURES=86`.
|
|
25
|
+
|
|
26
|
+
Run `make check` after `extconf.rb` to load both produced libraries and verify the C ABIs expected by the Ruby Fiddle bindings.
|