#pragma once #include #include #include #include #include #include #include namespace ling3 { class Tokenizer { public: explicit Tokenizer(std::span data); ~Tokenizer(); Tokenizer(const Tokenizer &) = delete; Tokenizer & operator=(const Tokenizer &) = delete; Tokenizer(Tokenizer &&) noexcept; Tokenizer & operator=(Tokenizer &&) noexcept; std::vector Encode(std::string_view text) const; std::string Decode(std::span tokens, bool skip_special = false) const; std::string_view Piece(std::uint32_t token) const; std::size_t vocab_size() const noexcept; bool uses_official_unicode_rules() const noexcept; private: struct Impl; std::unique_ptr impl_; }; } // namespace ling3