diff --git a/modules/dnn/src/tokenizer/core_bpe.cpp b/modules/dnn/src/tokenizer/core_bpe.cpp index ac73f451bf..6600e8d5ee 100644 --- a/modules/dnn/src/tokenizer/core_bpe.cpp +++ b/modules/dnn/src/tokenizer/core_bpe.cpp @@ -141,7 +141,7 @@ CoreBPE::CoreBPE(ByteVecRankMap encoder, std::sort(sortedTokenBytes_.begin(), sortedTokenBytes_.end()); } -std::optional> +std::vector CoreBPE::decodeBytes(const std::vector& tokens) const { std::vector out; out.reserve(tokens.size() * 2); @@ -157,7 +157,7 @@ CoreBPE::decodeBytes(const std::vector& tokens) const { if (sit != specialDecoder_.end()) { tokenBytes = &sit->second; } else { - return std::nullopt; + return std::vector(); } } out.insert(out.end(), tokenBytes->begin(), tokenBytes->end()); diff --git a/modules/dnn/src/tokenizer/core_bpe.hpp b/modules/dnn/src/tokenizer/core_bpe.hpp index bc0b8aeffa..a0c383496b 100644 --- a/modules/dnn/src/tokenizer/core_bpe.hpp +++ b/modules/dnn/src/tokenizer/core_bpe.hpp @@ -45,7 +45,6 @@ #include #include #include -#include #include #include @@ -148,7 +147,7 @@ public: * @param tokens Token ids. * @return Decoded bytes on success, or @c std::nullopt if any id is unknown. */ - std::optional> decodeBytes(const std::vector& tokens) const; + std::vector decodeBytes(const std::vector& tokens) const; private: ByteVecRankMap encoder_; diff --git a/modules/dnn/src/tokenizer/tokenizer.cpp b/modules/dnn/src/tokenizer/tokenizer.cpp index 8928970eec..6fdad454e6 100644 --- a/modules/dnn/src/tokenizer/tokenizer.cpp +++ b/modules/dnn/src/tokenizer/tokenizer.cpp @@ -47,11 +47,10 @@ struct BpeTokenizerImpl : public Tokenizer::Impl { std::string decode(const std::vector& tokens) override { CV_Assert(coreBPE); std::vector t32(tokens.begin(), tokens.end()); - auto opt_bytes = coreBPE->decodeBytes(t32); - if (!opt_bytes) + const std::vector opt_bytes = coreBPE->decodeBytes(t32); + if (opt_bytes.empty()) CV_Error(cv::Error::StsError, "Invalid decode."); - const auto& bytes = *opt_bytes; - return std::string(reinterpret_cast(bytes.data()), bytes.size()); + return std::string(reinterpret_cast(opt_bytes.data()), opt_bytes.size()); } };