#define NOMINMAX #include "voice-input/voice_batch_protocol.h" #include "tests/includes/test_framework.h" #include #include TEST_CASE(voice_batch_protocol_preserves_provider_fields_and_padding) { VoiceInputConfig config; config.asr_provider = "openai"; config.language = "zh-cn"; config.asr_model = "fixture-asr"; const std::vector samples(160, 0.125f); const auto openai = VoiceInput::BuildBatchTranscription(samples, config); REQUIRE(openai.body.find("name=\"language\"\r\n\r\nzh") != std::string::npos); REQUIRE(openai.body.find("fixture-asr") != std::string::npos); config.asr_provider = "siliconflow"; const auto siliconflow = VoiceInput::BuildBatchTranscription(samples, config); REQUIRE(siliconflow.body.find("name=\"language\"") == std::string::npos); const auto wave = siliconflow.body.find("RIFF"); REQUIRE(wave != std::string::npos); // Tiny clips still contain a full second of padded PCM, as required by the existing provider adapter. const auto *bytes = reinterpret_cast(siliconflow.body.data() + wave); const unsigned data_bytes = bytes[40] | (bytes[41] << 8) | (bytes[42] << 16) | (bytes[43] << 24); REQUIRE_EQ(data_bytes, 32000u); const std::vector long_clip(61 * metasequoia::voice::sample_rate, 0.125f); REQUIRE(VoiceInput::BuildBatchTranscription(long_clip, config).body.size() > long_clip.size() * 2); } TEST_CASE(voice_batch_protocol_preserves_polish_prompt_and_thinking_settings) { VoiceInputConfig config; config.polish_model = "fixture-polish"; config.polish_prompt = "fixture prompt"; config.polish_provider = "deepseek"; auto body = nlohmann::json::parse(VoiceInput::BuildBatchPolish("原始文本", config)); REQUIRE_EQ(body["model"].get(), "fixture-polish"); REQUIRE_EQ(body["messages"][0]["content"].get(), "fixture prompt"); REQUIRE_EQ(body["messages"][1]["content"].get(), "\n原始文本\n"); REQUIRE_EQ(body["thinking"]["type"].get(), "disabled"); config.polish_provider = "siliconflow"; body = nlohmann::json::parse(VoiceInput::BuildBatchPolish("原始文本", config)); REQUIRE_EQ(body["enable_thinking"].get(), false); REQUIRE(!body.contains("thinking")); }