<pre style='margin:0'>
Herby Gillot (herbygillot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/9e321c3ac39782fd6c365d5373b41d9738e1b670">https://github.com/macports/macports-ports/commit/9e321c3ac39782fd6c365d5373b41d9738e1b670</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 9e321c3ac39 whisper: add port (whisper.cpp)
</span>9e321c3ac39 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 9e321c3ac39782fd6c365d5373b41d9738e1b670
</span>Author: Nate Ijams <nate@ijams.me>
AuthorDate: Sat Aug 10 13:02:14 2024 -0500

<span style='display:block; white-space:pre;color:#404040;'>    whisper: add port (whisper.cpp)
</span>---
 audio/whisper/Portfile                      | 120 ++++++++++++++++++++++++++++
 audio/whisper/files/add-metal-path.diff     |  14 ++++
 audio/whisper/files/ggml-hard-coded.diff    |  10 +++
 audio/whisper/files/whisper-add-models.diff |  64 +++++++++++++++
 4 files changed, 208 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/whisper/Portfile b/audio/whisper/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..c18ed1aed71
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/whisper/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,120 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#-*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem          1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           makefile 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name                whisper
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories          audio
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        ggerganov whisper.cpp 1.6.2 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.tarball_from archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             MIT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         {ijams.me:nate @exprez135} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    openmaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         Port of OpenAI's Whisper model in C/C++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    High-performance inference of OpenAI's Whisper automatic speech recognition \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    (ASR) model
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+notes               "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Install this port's variants to include models, or download
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+your own and use the built-in `-m` feature.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Remember that whisper.cpp only functions on 16-bit WAV
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+files. You can use `ffmpeg -i input.mp3 -ar 16000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+output.wav` to convert the file first.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           whisper.cpp-${version}.tar.gz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  26b0b29e46c990b13c9d10d95c11aa429fc8d56d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  da7988072022acc3cfa61b370b3c51baad017f1900c3dc4e68cb276499f66894 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    5088298
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.target        main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+makefile.has_destdir    no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          whisper-add-models.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ggml-hard-coded.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    add-metal-path.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    reinplace "s|__PREFIX__|${prefix}|" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        whisper.cpp \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ggml-metal.metal \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ggml-metal.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    move ${worksrcpath}/main ${worksrcpath}/whisper
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -d ${destroot}${prefix}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -m 755 ${worksrcpath}/whisper ${destroot}${prefix}/bin/whisper
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -d ${destroot}${prefix}/share/whisper/ggml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall ${worksrcpath}/ggml-metal.metal ${destroot}${prefix}/share/whisper/ggml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall ${worksrcpath}/ggml-common.h ${destroot}${prefix}/share/whisper/ggml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Define model variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant tiny description {Install tiny model} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles-append        ggml-tiny.bin:tiny
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites-append     https://huggingface.co/ggerganov/whisper.cpp/resolve/main/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        ggml-tiny.bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  be07e048e1e599ad46341c8d2a135645097a538221678b7acdd1b1919c6e1b21 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    77691713
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${destroot}${prefix}/share/whisper/models
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall ${distpath}/ggml-tiny.bin ${destroot}${prefix}/share/whisper/models/tiny.bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant base description {Install base model} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles-append        ggml-base.bin:base
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites-append     https://huggingface.co/ggerganov/whisper.cpp/resolve/main/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        ggml-base.bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  60ed5bc3dd14eea856493d334349b405782ddcaf0028d4b5df4088345fba2efe \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    147951465
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${destroot}${prefix}/share/whisper/models
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall ${distpath}/ggml-base.bin ${destroot}${prefix}/share/whisper/models/base.bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant small description {Install small model} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles-append        ggml-small.bin:small
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites-append     https://huggingface.co/ggerganov/whisper.cpp/resolve/main/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        ggml-small.bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    487601967
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${destroot}${prefix}/share/whisper/models
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall ${distpath}/ggml-small.bin ${destroot}${prefix}/share/whisper/models/small.bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant medium description {Install medium model} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles-append        ggml-medium.bin:medium
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites-append     https://huggingface.co/ggerganov/whisper.cpp/resolve/main/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        ggml-medium.bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  6c14d5adee5f86394037b4e4e8b59f1673b6cee10e3cf0b11bbdbee79c156208 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    1533763059
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${destroot}${prefix}/share/whisper/models
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall ${distpath}/ggml-medium.bin ${destroot}${prefix}/share/whisper/models/medium.bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant large description {Install large model} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles-append        ggml-large-v3.bin:large
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites-append     https://huggingface.co/ggerganov/whisper.cpp/resolve/main/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        ggml-large.bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  64d182b440b98d5203c4f9bd541544d84c605196c4f7b845dfa11fb23594d1e2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    3095033483
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${destroot}${prefix}/share/whisper/models
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall ${distpath}/ggml-large-v3.bin ${destroot}${prefix}/share/whisper/models/large.bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/whisper/files/add-metal-path.diff b/audio/whisper/files/add-metal-path.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..cda58a7f585
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/whisper/files/add-metal-path.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ggml-metal.m   2024-05-27 02:35:09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CHANGED-ggml-metal.m   2024-08-09 10:44:38
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -360,7 +360,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (path_resource) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 path_source = [path_resource stringByAppendingPathComponent:@"ggml-metal.metal"];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                path_source = [bundle pathForResource:@"ggml-metal" ofType:@"metal"];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          path_resource = @"__PREFIX__/share/whisper/ggml";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          GGML_METAL_LOG_INFO("%s: GGML_METAL_PATH_RESOURCES = %s\n", __func__, path_resource ? [path_resource UTF8String] : "nil");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          path_source = [path_resource stringByAppendingPathComponent:@"ggml-metal.metal"];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          /* path_source = [bundle pathForResource:@"ggml-metal" ofType:@"metal"];*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (path_source == nil) {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/whisper/files/ggml-hard-coded.diff b/audio/whisper/files/ggml-hard-coded.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ef74cda325e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/whisper/files/ggml-hard-coded.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ggml-metal.metal       2024-05-27 02:35:09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CHANGED-ggml-metal.metal       2024-08-09 10:44:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,6 +1,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define GGML_COMMON_DECL_METAL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define GGML_COMMON_IMPL_METAL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include "ggml-common.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "__PREFIX__/share/whisper/ggml/ggml-common.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <metal_stdlib>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/whisper/files/whisper-add-models.diff b/audio/whisper/files/whisper-add-models.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..c56c47bd6df
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/whisper/files/whisper-add-models.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,64 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- whisper.cpp    2024-07-31 09:14:56
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CHANGED.cpp    2024-08-09 10:45:42
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -53,6 +53,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <random>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <functional>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <codecvt>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <dirent.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(_MSC_VER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma warning(disable: 4244 4267) // possible loss of data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3621,17 +3623,50 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct whisper_context * whisper_init_from_file_with_params_no_state(const char * path_model, struct whisper_context_params params) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WHISPER_LOG_INFO("%s: loading model from '%s'\n", __func__, path_model);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef _MSC_VER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // Convert UTF-8 path to wide string (UTF-16) for Windows, resolving character encoding issues.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     std::wstring path_model_wide = converter.from_bytes(path_model);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     auto fin = std::ifstream(path_model_wide, std::ios::binary);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     auto fin = std::ifstream(path_model, std::ios::binary);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!fin) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         WHISPER_LOG_ERROR("%s: failed to open '%s'\n", __func__, path_model);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const std::string fallback_dir = "__PREFIX__/share/whisper/models";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        std::string fallback_path;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        DIR *dir = opendir(fallback_dir.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (dir) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            struct dirent *entry;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            while ((entry = readdir(dir)) != nullptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                std::string filename = entry->d_name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (filename.size() > 4 && filename.substr(filename.size() - 4) == ".bin") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    fallback_path = fallback_dir + "/" + filename;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            closedir(dir);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (fallback_path.empty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            WHISPER_LOG_ERROR("%s: no .bin files found in fallback directory '%s'\n", __func__, fallback_dir.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef _MSC_VER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        std::wstring fallback_path_wide = converter.from_bytes(fallback_path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        fin.open(fallback_path_wide, std::ios::binary);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        fin.open(fallback_path, std::ios::binary);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!fin) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            WHISPER_LOG_ERROR("%s: failed to open fallback file '%s'\n", __func__, fallback_path.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     whisper_model_loader loader = {};
</span></pre><pre style='margin:0'>

</pre>