#pragma once #include "engine/framework/tokenizers/tokenizer.h" #include #include #include #include #include namespace engine::tokenizers { enum class SentencePieceType : int32_t { Normal = 1, Unknown = 2, Control = 3, UserDefined = 4, Unused = 5, Byte = 6, }; struct SentencePiecePiece { int id = 0; float score = 0.0F; std::string text; SentencePieceType type = SentencePieceType::Normal; }; std::vector load_sentencepiece_model(const std::filesystem::path & model_path); std::vector tokenize_sentencepiece( const std::vector & pieces, const std::string & text); std::string decode_sentencepiece( const std::vector & pieces, const std::vector & token_ids); class SentencePieceTokenizer final : public ITokenizer { public: explicit SentencePieceTokenizer(std::vector pieces); std::string family() const override; TokenizedText tokenize(const std::string & text) const override; private: std::vector pieces_; }; std::shared_ptr load_sentencepiece_tokenizer( const std::filesystem::path & model_path); } // namespace engine::tokenizers