11#include " inference_service.h"
22#include < drogon/HttpTypes.h>
33#include " utils/engine_constants.h"
4+ #include " utils/file_manager_utils.h"
45#include " utils/function_calling/common.h"
6+ #include " utils/gguf_metadata_reader.h"
7+ #include " utils/jinja_utils.h"
58
69namespace services {
710cpp::result<void , InferResult> InferenceService::HandleChatCompletion (
@@ -24,6 +27,41 @@ cpp::result<void, InferResult> InferenceService::HandleChatCompletion(
2427 return cpp::fail (std::make_pair (stt, res));
2528 }
2629
30+ {
31+ if (json_body->isMember (" files" ) && !(*json_body)[" files" ].empty ()) {
32+ auto file = (*json_body)[" files" ][0 ].asString ();
33+ auto model_metadata_res = cortex_utils::ReadGgufMetadata (
34+ file_manager_utils::ToAbsoluteCortexDataPath (
35+ std::filesystem::path (file)));
36+ if (model_metadata_res.has_value ()) {
37+ auto metadata = model_metadata_res.value ().get ();
38+ if (!metadata->tokenizer ->chat_template .empty ()) {
39+ auto messages = (*json_body)[" messages" ];
40+ Json::Value messages_jsoncpp (Json::arrayValue);
41+ for (auto message : messages) {
42+ messages_jsoncpp.append (message);
43+ }
44+
45+ Json::Value tools (Json::arrayValue);
46+ Json::Value template_data_json;
47+ template_data_json[" messages" ] = messages_jsoncpp;
48+ // template_data_json["tools"] = tools;
49+
50+ auto prompt_result = jinja::RenderTemplate (
51+ metadata->tokenizer ->chat_template , template_data_json,
52+ metadata->tokenizer ->bos_token , metadata->tokenizer ->eos_token );
53+ if (prompt_result.has_value ()) {
54+ (*json_body)[" prompt" ] = prompt_result.value ();
55+ } else {
56+ CTL_ERR (" Failed to render prompt: " + prompt_result.error ());
57+ }
58+ }
59+ }
60+ }
61+ }
62+
63+ CTL_INF (" Prompt is: " + json_body->get (" prompt" , " " ).asString ());
64+
2765 auto cb = [q, tool_choice](Json::Value status, Json::Value res) {
2866 if (!tool_choice.isNull ()) {
2967 res[" tool_choice" ] = tool_choice;
@@ -297,4 +335,4 @@ bool InferenceService::HasFieldInReq(std::shared_ptr<Json::Value> json_body,
297335 }
298336 return true ;
299337}
300- } // namespace services
338+ } // namespace services
0 commit comments