Some checks failed
Bindings Tests (Go) / ubuntu-22 (push) Failing after 31s
CI (sycl) / ubuntu-22-cmake-sycl (linux/arm/v7, icx, icpx, ON) (push) Failing after 3s
CI (sycl) / ubuntu-22-cmake-sycl (linux/ppc64le, icx, icpx, ON) (push) Failing after 2s
CI (sycl) / ubuntu-22-cmake-sycl-fp16 (linux/amd64, icx, icpx, ON) (push) Failing after 3s
CI (sycl) / ubuntu-22-cmake-sycl-fp16 (linux/arm/v7, icx, icpx, ON) (push) Failing after 3s
CI (sycl) / ubuntu-22-cmake-sycl-fp16 (linux/arm64, icx, icpx, ON) (push) Failing after 3s
CI (sycl) / ubuntu-22-cmake-sycl-fp16 (linux/ppc64le, icx, icpx, ON) (push) Failing after 3s
CI (vad) / vad (push) Failing after 3s
CI (wasm) / emscripten (Release) (push) Failing after 4s
Bindings Tests (Ruby) / ubuntu-22 (push) Failing after 37s
CI (android) / android (push) Failing after 16s
CI (android) / android_java (push) Failing after 3s
CI (clang) / ubuntu-22-clang (linux/amd64, Debug) (push) Failing after 3s
CI (clang) / ubuntu-22-clang (linux/amd64, Release) (push) Failing after 2s
CI (clang) / ubuntu-22-clang (linux/ppc64le, Debug) (push) Failing after 3s
CI (clang) / ubuntu-22-clang (linux/ppc64le, Release) (push) Failing after 3s
CI (cpu) / ggml-ci-x64-cpu-low-perf (push) Failing after 3s
CI (cpu) / ggml-ci-x64-cpu-high-perf (push) Failing after 2s
CI (gcc) / ubuntu-22-gcc (linux/amd64, Debug) (push) Failing after 3s
CI (gcc) / ubuntu-22-gcc (linux/amd64, Release) (push) Failing after 3s
CI (gcc) / ubuntu-22-gcc (linux/ppc64le, Debug) (push) Failing after 3s
CI (gcc) / ubuntu-22-gcc (linux/ppc64le, Release) (push) Failing after 4s
CI (gcc) / ubuntu-22-gcc-arm-v7 (linux/arm/v7, Debug) (push) Failing after 3s
CI (gcc) / ubuntu-22-gcc-arm-v7 (linux/arm/v7, Release) (push) Failing after 3s
CI (quantize) / quantize (push) Failing after 3s
CI (sanitize) / ubuntu-22-gcc-sanitized (ADDRESS) (push) Failing after 3s
CI (sanitize) / ubuntu-22-gcc-sanitized (THREAD) (push) Failing after 3s
CI (sanitize) / ubuntu-22-gcc-sanitized (UNDEFINED) (push) Failing after 2s
CI (sycl) / ubuntu-22-cmake-sycl (linux/amd64, icx, icpx, ON) (push) Failing after 3s
CI (sycl) / ubuntu-22-cmake-sycl (linux/arm64, icx, icpx, ON) (push) Failing after 3s
Examples WASM / deploy-wasm-github-pages (push) Failing after 3s
Examples Tests / addon_node-ubuntu-22 (20.x) (push) Failing after 3s
Examples Tests / addon_node-ubuntu-22 (22.x) (push) Failing after 2s
CI (coreml) / coreml-base-en (push) Has been cancelled
CI (self-hosted) / gpu-vulkan (push) Has been cancelled
CI (self-hosted) / npu-amd-windows (push) Has been cancelled
CI (self-hosted) / gpu-vulkan-nvidia-cm2 (push) Has been cancelled
CI (clang) / ubuntu-22-clang-arm64 (Debug) (push) Has been cancelled
CI (clang) / ubuntu-22-clang-arm64 (Release) (push) Has been cancelled
CI (self-hosted) / gpu-cuda (push) Has been cancelled
CI (self-hosted) / gpu-vulkan-nvidia-cm (push) Has been cancelled
CI (cpu) / ggml-ci-arm64-cpu-low-perf (push) Has been cancelled
CI (cpu) / ggml-ci-arm64-cpu-high-perf (push) Has been cancelled
CI (cpu) / ggml-ci-arm64-cpu-high-perf-sve (push) Has been cancelled
CI (freebsd) / freeBSD-latest (push) Has been cancelled
CI (self-hosted) / gpu-metal (push) Has been cancelled
CI (gcc) / ubuntu-22-gcc-arm64 (Debug) (push) Has been cancelled
CI (gcc) / ubuntu-22-gcc-arm64 (Release) (push) Has been cancelled
CI (macOS) / macOS-latest (generic/platform=iOS) (push) Has been cancelled
CI (macOS) / macOS-latest (generic/platform=macOS) (push) Has been cancelled
CI (macOS) / macOS-latest (generic/platform=tvOS) (push) Has been cancelled
CI (self-hosted) / npu-amd-linux (push) Has been cancelled
CI (windows) / windows-msys2 (Release, clang, clang-x86_64, CLANG64) (push) Has been cancelled
CI (windows) / windows-msys2 (Release, gcc, ucrt-x86_64, UCRT64) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-cuda.Dockerfile platform:linux/amd64 runs_on:ubuntu-24.04 tag:main-cuda]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-intel.Dockerfile platform:linux/amd64 runs_on:ubuntu-24.04 tag:main-intel]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-musa.Dockerfile platform:linux/amd64 runs_on:ubuntu-24.04 tag:main-musa]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-vulkan.Dockerfile platform:linux/amd64 runs_on:ubuntu-24.04 tag:main-vulkan]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-vulkan.Dockerfile platform:linux/arm64 runs_on:ubuntu-24.04-arm tag:main-vulkan-arm64]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main.Dockerfile platform:linux/amd64 runs_on:ubuntu-24.04 tag:main]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main.Dockerfile platform:linux/arm64 runs_on:ubuntu-24.04-arm tag:main-arm64]) (push) Has been cancelled
Mark inactive issues stale / mark-issues (push) Failing after 1s
111 lines
3.1 KiB
C++
111 lines
3.1 KiB
C++
#pragma once
|
|
|
|
#include <algorithm>
|
|
#include <cassert>
|
|
#include <cctype>
|
|
#include <cstdio>
|
|
#include <fstream>
|
|
#include <iterator>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#ifndef TRANSCRIPTION_SIMILARITY_THRESHOLD
|
|
#define TRANSCRIPTION_SIMILARITY_THRESHOLD 1.0
|
|
#endif
|
|
|
|
static std::string read_expected_transcription(const char * path) {
|
|
std::ifstream fin(path);
|
|
assert(fin.is_open());
|
|
|
|
std::string text(
|
|
(std::istreambuf_iterator<char>(fin)),
|
|
std::istreambuf_iterator<char>());
|
|
|
|
while (!text.empty() && (text.back() == '\n' || text.back() == '\r')) {
|
|
text.pop_back();
|
|
}
|
|
|
|
return text;
|
|
}
|
|
|
|
static std::vector<std::string> transcription_words(const std::string & text) {
|
|
std::vector<std::string> words;
|
|
std::string word;
|
|
|
|
for (unsigned char ch : text) {
|
|
if (std::isalnum(ch)) {
|
|
word.push_back((char) std::tolower(ch));
|
|
} else if (!word.empty()) {
|
|
words.push_back(word);
|
|
word.clear();
|
|
}
|
|
}
|
|
|
|
if (!word.empty()) {
|
|
words.push_back(word);
|
|
}
|
|
|
|
return words;
|
|
}
|
|
|
|
static double transcription_lcs_similarity(const std::string & expected, const std::string & actual) {
|
|
const std::vector<std::string> expected_words = transcription_words(expected);
|
|
const std::vector<std::string> actual_words = transcription_words(actual);
|
|
|
|
if (expected_words.empty() && actual_words.empty()) {
|
|
return 1.0;
|
|
}
|
|
|
|
if (expected_words.empty() || actual_words.empty()) {
|
|
return 0.0;
|
|
}
|
|
|
|
std::vector<int> prev(actual_words.size() + 1, 0);
|
|
std::vector<int> cur (actual_words.size() + 1, 0);
|
|
|
|
for (size_t i = 0; i < expected_words.size(); ++i) {
|
|
std::fill(cur.begin(), cur.end(), 0);
|
|
|
|
for (size_t j = 0; j < actual_words.size(); ++j) {
|
|
if (expected_words[i] == actual_words[j]) {
|
|
cur[j + 1] = prev[j] + 1;
|
|
} else {
|
|
cur[j + 1] = std::max(prev[j + 1], cur[j]);
|
|
}
|
|
}
|
|
|
|
prev.swap(cur);
|
|
}
|
|
|
|
const int lcs = prev[actual_words.size()];
|
|
return (2.0 * lcs) / (expected_words.size() + actual_words.size());
|
|
}
|
|
|
|
static bool verify_transcription(const std::string & expected, const std::string & actual) {
|
|
const double threshold = TRANSCRIPTION_SIMILARITY_THRESHOLD;
|
|
|
|
if (threshold >= 1.0) {
|
|
if (actual == expected) {
|
|
return true;
|
|
}
|
|
|
|
fprintf(stderr, "\n\n");
|
|
fprintf(stderr, "[Failed] Transcript mismatched\n");
|
|
fprintf(stderr, "expected:\n%s\n\n", expected.c_str());
|
|
fprintf(stderr, "actual:\n%s\n", actual.c_str());
|
|
return false;
|
|
}
|
|
|
|
const double similarity = transcription_lcs_similarity(expected, actual);
|
|
printf("\nTranscript similarity: %.6f (threshold %.6f)\n", similarity, threshold);
|
|
|
|
if (similarity >= threshold) {
|
|
return true;
|
|
}
|
|
|
|
fprintf(stderr, "\n\nTranscript similarity below threshold: %.6f < %.6f\n", similarity, threshold);
|
|
fprintf(stderr, "Expected:\n%s\n\n", expected.c_str());
|
|
fprintf(stderr, "Actual:\n%s\n", actual.c_str());
|
|
return false;
|
|
}
|