#pragma once #include "engine/framework/tokenizers/llama_bpe.h" #include #include #include namespace engine::models::plapre { struct PlapreAudioReference { std::vector text; std::vector codes; }; struct PlaprePromptControls { std::optional voice_reference; std::optional> context_text; std::optional> context_codes; bool same_speaker = true; std::optional> duration_frames; std::vector pronunciations; }; class PlaprePromptBuilder { public: explicit PlaprePromptBuilder(const tokenizers::LlamaBpeTokenizer & tokenizer); std::vector generate(const std::vector & text, const PlaprePromptControls & controls) const; std::vector edit(const std::vector & text, const std::vector & original_codes, int64_t start, int64_t end, const std::vector & pronunciations) const; std::vector stop_ids(bool editing) const; std::vector audio_codes(const std::vector & generated) const; private: std::vector pronunciation_prefix(const std::vector & references) const; void append_audio(std::vector & prompt, const std::vector & codes, size_t start, size_t end) const; std::unordered_map tokens_; }; } // namespace engine::models::plapre