| 144 | } |
| 145 | |
| 146 | std::vector<float> single_token_embedding( |
| 147 | const VibeVoiceDecoderWeightsRuntime & decoder, |
| 148 | int32_t token, |
| 149 | int64_t hidden_size) { |
| 150 | auto embedding = decoder.embed_tokens({token}); |
| 151 | if (embedding.steps != 1 || embedding.hidden_size != hidden_size || |
| 152 | static_cast<int64_t>(embedding.values.size()) != hidden_size) { |
| 153 | throw std::runtime_error("VibeVoice single token embedding shape mismatch"); |
| 154 | } |
| 155 | return std::move(embedding.values); |
| 156 | } |
| 157 | |
| 158 | int64_t max_generation_steps(const VibeVoicePreparedPrompt & prompt, const VibeVoiceGenerationOptions & options, const VibeVoiceDecoderConfig & config) { |
| 159 | if (prompt.steps <= 0 || config.max_position_embeddings <= prompt.steps) { |
no test coverage detected