Skip to content

Commit 80ef387

Browse files
committed
Honor scoped specs and gate Granite tests
1 parent c5b4ef2 commit 80ef387

2 files changed

Lines changed: 46 additions & 28 deletions

File tree

CMakeLists.txt

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,31 +1817,6 @@ add_executable(miocodec_wavlm_parity EXCLUDE_FROM_ALL
18171817

18181818
target_link_libraries(miocodec_wavlm_parity PRIVATE engine_runtime ggml)
18191819

1820-
add_executable(test_granite5asr_golden_transcription
1821-
tests/granite5asr/test_granite5asr_golden_transcription.cpp
1822-
)
1823-
target_compile_definitions(test_granite5asr_golden_transcription PRIVATE
1824-
ENGINE_REPO_ROOT="${CMAKE_CURRENT_SOURCE_DIR}"
1825-
)
1826-
target_link_libraries(test_granite5asr_golden_transcription PRIVATE engine_runtime ggml)
1827-
target_include_directories(test_granite5asr_golden_transcription PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
1828-
if (ENGINE_ENABLE_OPENMP)
1829-
target_link_libraries(test_granite5asr_golden_transcription PRIVATE OpenMP::OpenMP_CXX)
1830-
endif()
1831-
1832-
add_executable(granite5asr_warm_bench
1833-
tests/granite5asr/granite5asr_warm_bench.cpp
1834-
)
1835-
target_compile_definitions(granite5asr_warm_bench PRIVATE
1836-
ENGINE_REPO_ROOT="${CMAKE_CURRENT_SOURCE_DIR}"
1837-
)
1838-
target_link_libraries(granite5asr_warm_bench PRIVATE engine_runtime ggml)
1839-
target_include_directories(granite5asr_warm_bench PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
1840-
if (ENGINE_ENABLE_OPENMP)
1841-
target_link_libraries(granite5asr_warm_bench PRIVATE OpenMP::OpenMP_CXX)
1842-
endif()
1843-
1844-
18451820
# F5/Habibi tests: parity harnesses + e2e sample generator. Only when the
18461821
# f5_tts model is linked (they call model-internal symbols) AND test hooks
18471822
# are explicitly enabled — F5_MEL_TEST must never leak into production
@@ -1861,6 +1836,18 @@ if (f5_tts IN_LIST AUDIOCPP_LINKED_MODELS AND ENGINE_F5_TEST_HOOKS)
18611836
endif()
18621837

18631838
if (ENGINE_BUILD_TESTS)
1839+
add_executable(test_granite5asr_golden_transcription
1840+
tests/granite5asr/test_granite5asr_golden_transcription.cpp
1841+
)
1842+
target_compile_definitions(test_granite5asr_golden_transcription PRIVATE
1843+
ENGINE_REPO_ROOT="${CMAKE_CURRENT_SOURCE_DIR}"
1844+
)
1845+
target_link_libraries(test_granite5asr_golden_transcription PRIVATE engine_runtime ggml)
1846+
target_include_directories(test_granite5asr_golden_transcription PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
1847+
if (ENGINE_ENABLE_OPENMP)
1848+
target_link_libraries(test_granite5asr_golden_transcription PRIVATE OpenMP::OpenMP_CXX)
1849+
endif()
1850+
18641851
add_executable(torch_bin_parity
18651852
tests/vibevoice/torch_bin_parity.cpp
18661853
)
@@ -1972,6 +1959,9 @@ if (ENGINE_BUILD_WARMBENCH)
19721959
add_engine_warmbench(controlfoley_warm_bench tests/controlfoley/controlfoley_warm_bench.cpp)
19731960
add_engine_warmbench(fun_asr_nano_warm_bench tests/fun_asr_nano/fun_asr_nano_warm_bench.cpp)
19741961
add_engine_warmbench(granite5asr_warm_bench tests/granite5asr/granite5asr_warm_bench.cpp)
1962+
target_compile_definitions(granite5asr_warm_bench PRIVATE
1963+
ENGINE_REPO_ROOT="${CMAKE_CURRENT_SOURCE_DIR}"
1964+
)
19751965
add_engine_warmbench(higgs_audio_stt_warm_bench tests/higgs_audio_stt/higgs_audio_stt_warm_bench.cpp)
19761966
add_engine_warmbench(higgs_audio_tts_warm_bench tests/higgs_audio_tts/higgs_audio_tts_warm_bench.cpp)
19771967
add_engine_warmbench(hviske_asr_warm_bench tests/hviske_asr/hviske_asr_warm_bench.cpp)

app/server/runtime.cpp

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "engine/framework/debug/trace.h"
1414
#include "engine/framework/io/json.h"
1515
#include "engine/framework/model_spec/metadata.h"
16+
#include "engine/framework/model_spec/package.h"
1617
#include "engine/framework/runtime/errors.h"
1718
#include "engine/framework/runtime/registry.h"
1819

@@ -85,8 +86,28 @@ std::optional<int> parse_busy_timeout_override(const Value & body) {
8586
return requested;
8687
}
8788

88-
bool model_accepts_request_option(std::string_view family, std::string_view option) {
89-
const auto contract = engine::model_spec::model_contract(family);
89+
bool is_missing_model_contract_error(std::string_view message) {
90+
return message.find("model contract spec not found for family '") != std::string_view::npos ||
91+
message.find("does not embed an audio.cpp model spec") != std::string_view::npos ||
92+
message.find("embeds a legacy model spec") != std::string_view::npos;
93+
}
94+
95+
bool model_accepts_request_option(
96+
std::string_view family,
97+
std::string_view option,
98+
const std::optional<std::filesystem::path> & model_spec_override,
99+
const std::filesystem::path & model_path) {
100+
std::optional<engine::model_spec::ModelContract> contract;
101+
{
102+
engine::model_spec::ScopedSpecOverride scoped(model_spec_override, model_path);
103+
try {
104+
contract = engine::model_spec::model_contract(family);
105+
} catch (const std::runtime_error & ex) {
106+
if (!is_missing_model_contract_error(ex.what())) {
107+
throw;
108+
}
109+
}
110+
}
90111
if (!contract.has_value()) {
91112
return true;
92113
}
@@ -1848,8 +1869,15 @@ engine::runtime::TaskRequest ServerState::build_speech_request(const LoadedModel
18481869

18491870
bool voice_field_is_preset = false;
18501871
const auto * preset = select_voice_preset(model, body, voice_field_is_preset);
1872+
const auto effective_model_spec_override = model.config.model_spec_override.has_value()
1873+
? model.config.model_spec_override
1874+
: config_.model_spec_override;
18511875
const bool can_inject_reference_text =
1852-
model_accepts_request_option(model.config.family, "reference_text");
1876+
model_accepts_request_option(
1877+
model.config.family,
1878+
"reference_text",
1879+
effective_model_spec_override,
1880+
model.config.path);
18531881

18541882
engine::runtime::VoiceCondition voice;
18551883
bool has_voice = false;

0 commit comments

Comments
 (0)