]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
server : add `/detokenize` endpoint (#2802)
authorBruce MacDonald <redacted>
Sat, 26 Aug 2023 23:11:45 +0000 (16:11 -0700)
committerGitHub <redacted>
Sat, 26 Aug 2023 23:11:45 +0000 (07:11 +0800)
* Add a /detokenize endpoint to the example server

* remove trailing white-space

examples/server/README.md
examples/server/server.cpp

index 7105e9020bd3f6f186cf97ccbb8169dcc4457b27..5176080463839618087ff6dd90bfd6ef7d6ba907 100644 (file)
@@ -164,6 +164,12 @@ node index.js
 
     Note that the special `BOS` token is not added in front of the text and also a space character is not inserted automatically as it is for `/completion`.
 
+-   **POST** `/detokenize`: Convert tokens to text.
+
+    *Options:*
+
+    `tokens`: Set the tokens to detokenize.
+
 -   **POST** `/embedding`: Generate embedding of a given text just as [the embedding example](../embedding) does.
 
     *Options:*
index 3300553f9b397ab6519a43c63063de485735f674..a4b4d641859365ef4572bd9eceda0926bb183ec7 100644 (file)
@@ -1104,6 +1104,12 @@ static json format_tokenizer_response(const std::vector<llama_token> &tokens)
         {"tokens", tokens}};
 }
 
+static json format_detokenized_response(std::string content)
+{
+    return json{
+        {"content", content}};
+}
+
 template <typename T>
 static T json_value(const json &body, const std::string &key, const T &default_value)
 {
@@ -1501,6 +1507,21 @@ int main(int argc, char **argv)
         const json data = format_tokenizer_response(tokens);
         return res.set_content(data.dump(), "application/json"); });
 
+    svr.Post("/detokenize", [&llama](const Request &req, Response &res)
+             {
+        auto lock = llama.lock();
+
+        const json body = json::parse(req.body);
+        std::string content;
+        if (body.count("tokens") != 0)
+        {
+            const std::vector<llama_token> tokens = body["tokens"];
+            content = tokens_to_str(llama.ctx, tokens.cbegin(), tokens.cend());
+        }
+
+        const json data = format_detokenized_response(content);
+        return res.set_content(data.dump(), "application/json"); });
+
     svr.Post("/embedding", [&llama](const Request &req, Response &res)
              {
         auto lock = llama.lock();