| 18 | } |
| 19 | |
| 20 | std::vector<float> Gemma_Embedding::embed(std::string& text, embedding_task_type_t task_type) { |
| 21 | std::string task_prefix = this->_get_task_prefix(task_type); |
| 22 | std::string full_text = "<bos>" + task_prefix + text + "<eos>"; |
| 23 | std::vector<int> tokens = this->tokenizer->encode(full_text); |
| 24 | if (tokens.size() > 2048) { |
| 25 | // cut to 2047 and add <eos> (1) |
| 26 | tokens.resize(2048); |
| 27 | tokens[2047] = 1; |
| 28 | } |
| 29 | |
| 30 | buffer<bf16> y = this->embedding_model_impl->embed(tokens); |
| 31 | std::vector<float> result(y.size()); |
| 32 | for (int i = 0; i < y.size(); i++) { |
| 33 | result[i] = static_cast<float>(y[i]); |
| 34 | } |
| 35 | return result; |
| 36 | } |