mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +00:00 
			
		
		
		
	server : fix possible ambiguity in content type charset (#4501)
This commit is contained in:
		| @@ -2699,7 +2699,7 @@ int main(int argc, char **argv) | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // API key is invalid or not provided |         // API key is invalid or not provided | ||||||
|         res.set_content("Unauthorized: Invalid API Key", "text/plain"); |         res.set_content("Unauthorized: Invalid API Key", "text/plain; charset=utf-8"); | ||||||
|         res.status = 401; // Unauthorized |         res.status = 401; // Unauthorized | ||||||
|  |  | ||||||
|         LOG_WARNING("Unauthorized: Invalid API Key", {}); |         LOG_WARNING("Unauthorized: Invalid API Key", {}); | ||||||
| @@ -2714,28 +2714,28 @@ int main(int argc, char **argv) | |||||||
|     // this is only called if no index.html is found in the public --path |     // this is only called if no index.html is found in the public --path | ||||||
|     svr.Get("/", [](const httplib::Request &, httplib::Response &res) |     svr.Get("/", [](const httplib::Request &, httplib::Response &res) | ||||||
|             { |             { | ||||||
|                 res.set_content(reinterpret_cast<const char*>(&index_html), index_html_len, "text/html"); |                 res.set_content(reinterpret_cast<const char*>(&index_html), index_html_len, "text/html; charset=utf-8"); | ||||||
|                 return false; |                 return false; | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     // this is only called if no index.js is found in the public --path |     // this is only called if no index.js is found in the public --path | ||||||
|     svr.Get("/index.js", [](const httplib::Request &, httplib::Response &res) |     svr.Get("/index.js", [](const httplib::Request &, httplib::Response &res) | ||||||
|             { |             { | ||||||
|                 res.set_content(reinterpret_cast<const char *>(&index_js), index_js_len, "text/javascript"); |                 res.set_content(reinterpret_cast<const char *>(&index_js), index_js_len, "text/javascript; charset=utf-8"); | ||||||
|                 return false; |                 return false; | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     // this is only called if no index.html is found in the public --path |     // this is only called if no index.html is found in the public --path | ||||||
|     svr.Get("/completion.js", [](const httplib::Request &, httplib::Response &res) |     svr.Get("/completion.js", [](const httplib::Request &, httplib::Response &res) | ||||||
|             { |             { | ||||||
|                 res.set_content(reinterpret_cast<const char*>(&completion_js), completion_js_len, "application/javascript"); |                 res.set_content(reinterpret_cast<const char*>(&completion_js), completion_js_len, "application/javascript; charset=utf-8"); | ||||||
|                 return false; |                 return false; | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     // this is only called if no index.html is found in the public --path |     // this is only called if no index.html is found in the public --path | ||||||
|     svr.Get("/json-schema-to-grammar.mjs", [](const httplib::Request &, httplib::Response &res) |     svr.Get("/json-schema-to-grammar.mjs", [](const httplib::Request &, httplib::Response &res) | ||||||
|             { |             { | ||||||
|                 res.set_content(reinterpret_cast<const char*>(&json_schema_to_grammar_mjs), json_schema_to_grammar_mjs_len, "application/javascript"); |                 res.set_content(reinterpret_cast<const char*>(&json_schema_to_grammar_mjs), json_schema_to_grammar_mjs_len, "application/javascript; charset=utf-8"); | ||||||
|                 return false; |                 return false; | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
| @@ -2746,7 +2746,7 @@ int main(int argc, char **argv) | |||||||
|                     { "user_name",      llama.name_user.c_str() }, |                     { "user_name",      llama.name_user.c_str() }, | ||||||
|                     { "assistant_name", llama.name_assistant.c_str() } |                     { "assistant_name", llama.name_assistant.c_str() } | ||||||
|                 }; |                 }; | ||||||
|                 res.set_content(data.dump(), "application/json"); |                 res.set_content(data.dump(), "application/json; charset=utf-8"); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     svr.Post("/completion", [&llama, &validate_api_key](const httplib::Request &req, httplib::Response &res) |     svr.Post("/completion", [&llama, &validate_api_key](const httplib::Request &req, httplib::Response &res) | ||||||
| @@ -2760,12 +2760,12 @@ int main(int argc, char **argv) | |||||||
|                     std::string completion_text; |                     std::string completion_text; | ||||||
|                     task_result result = llama.next_result(task_id); |                     task_result result = llama.next_result(task_id); | ||||||
|                     if (!result.error && result.stop) { |                     if (!result.error && result.stop) { | ||||||
|                         res.set_content(result.result_json.dump(-1, ' ', false, json::error_handler_t::replace), "application/json"); |                         res.set_content(result.result_json.dump(-1, ' ', false, json::error_handler_t::replace), "application/json; charset=utf-8"); | ||||||
|                     } |                     } | ||||||
|                     else |                     else | ||||||
|                     { |                     { | ||||||
|                         res.status = 404; |                         res.status = 404; | ||||||
|                         res.set_content(result.result_json["content"], "text/plain"); |                         res.set_content(result.result_json["content"], "text/plain; charset=utf-8"); | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
| @@ -2836,7 +2836,7 @@ int main(int argc, char **argv) | |||||||
|                     }} |                     }} | ||||||
|                 }; |                 }; | ||||||
|  |  | ||||||
|                 res.set_content(models.dump(), "application/json"); |                 res.set_content(models.dump(), "application/json; charset=utf-8"); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     // TODO: add mount point without "/v1" prefix -- how? |     // TODO: add mount point without "/v1" prefix -- how? | ||||||
| @@ -2858,10 +2858,10 @@ int main(int argc, char **argv) | |||||||
|  |  | ||||||
|                         res.set_content(oaicompat_result.dump(-1, ' ', false, |                         res.set_content(oaicompat_result.dump(-1, ' ', false, | ||||||
|                                             json::error_handler_t::replace), |                                             json::error_handler_t::replace), | ||||||
|                                             "application/json"); |                                             "application/json; charset=utf-8"); | ||||||
|                     } else { |                     } else { | ||||||
|                         res.status = 500; |                         res.status = 500; | ||||||
|                         res.set_content(result.result_json["content"], "text/plain"); |                         res.set_content(result.result_json["content"], "text/plain; charset=utf-8"); | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
| @@ -2925,12 +2925,12 @@ int main(int argc, char **argv) | |||||||
|                     task_result result = llama.next_result(task_id); |                     task_result result = llama.next_result(task_id); | ||||||
|                     if (!result.error && result.stop) |                     if (!result.error && result.stop) | ||||||
|                     { |                     { | ||||||
|                         res.set_content(result.result_json.dump(-1, ' ', false, json::error_handler_t::replace), "application/json"); |                         res.set_content(result.result_json.dump(-1, ' ', false, json::error_handler_t::replace), "application/json; charset=utf-8"); | ||||||
|                     } |                     } | ||||||
|                     else |                     else | ||||||
|                     { |                     { | ||||||
|                         res.status = 404; |                         res.status = 404; | ||||||
|                         res.set_content(result.result_json["content"], "text/plain"); |                         res.set_content(result.result_json["content"], "text/plain; charset=utf-8"); | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
| @@ -2979,11 +2979,11 @@ int main(int argc, char **argv) | |||||||
|     svr.Get("/model.json", [&llama](const httplib::Request &, httplib::Response &res) |     svr.Get("/model.json", [&llama](const httplib::Request &, httplib::Response &res) | ||||||
|             { |             { | ||||||
|                 const json data = llama.get_model_props(); |                 const json data = llama.get_model_props(); | ||||||
|                 return res.set_content(data.dump(), "application/json"); |                 return res.set_content(data.dump(), "application/json; charset=utf-8"); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     svr.Options(R"(/.*)", [](const httplib::Request &, httplib::Response &res) |     svr.Options(R"(/.*)", [](const httplib::Request &, httplib::Response &res) | ||||||
|                 { return res.set_content("", "application/json"); }); |                 { return res.set_content("", "application/json; charset=utf-8"); }); | ||||||
|  |  | ||||||
|     svr.Post("/tokenize", [&llama](const httplib::Request &req, httplib::Response &res) |     svr.Post("/tokenize", [&llama](const httplib::Request &req, httplib::Response &res) | ||||||
|             { |             { | ||||||
| @@ -2994,7 +2994,7 @@ int main(int argc, char **argv) | |||||||
|                     tokens = llama.tokenize(body["content"], false); |                     tokens = llama.tokenize(body["content"], false); | ||||||
|                 } |                 } | ||||||
|                 const json data = format_tokenizer_response(tokens); |                 const json data = format_tokenizer_response(tokens); | ||||||
|                 return res.set_content(data.dump(), "application/json"); |                 return res.set_content(data.dump(), "application/json; charset=utf-8"); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     svr.Post("/detokenize", [&llama](const httplib::Request &req, httplib::Response &res) |     svr.Post("/detokenize", [&llama](const httplib::Request &req, httplib::Response &res) | ||||||
| @@ -3008,7 +3008,7 @@ int main(int argc, char **argv) | |||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 const json data = format_detokenized_response(content); |                 const json data = format_detokenized_response(content); | ||||||
|                 return res.set_content(data.dump(), "application/json"); |                 return res.set_content(data.dump(), "application/json; charset=utf-8"); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     svr.Post("/embedding", [&llama](const httplib::Request &req, httplib::Response &res) |     svr.Post("/embedding", [&llama](const httplib::Request &req, httplib::Response &res) | ||||||
| @@ -3025,7 +3025,7 @@ int main(int argc, char **argv) | |||||||
|                 } |                 } | ||||||
|                 const int task_id = llama.request_completion({ {"prompt", prompt}, { "n_predict", 0} }, false, true, -1); |                 const int task_id = llama.request_completion({ {"prompt", prompt}, { "n_predict", 0} }, false, true, -1); | ||||||
|                 task_result result = llama.next_result(task_id); |                 task_result result = llama.next_result(task_id); | ||||||
|                 return res.set_content(result.result_json.dump(), "application/json"); |                 return res.set_content(result.result_json.dump(), "application/json; charset=utf-8"); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|     svr.set_logger(log_server_request); |     svr.set_logger(log_server_request); | ||||||
| @@ -3046,7 +3046,7 @@ int main(int argc, char **argv) | |||||||
|                 { |                 { | ||||||
|                     snprintf(buf, sizeof(buf), fmt, "Unknown Exception"); |                     snprintf(buf, sizeof(buf), fmt, "Unknown Exception"); | ||||||
|                 } |                 } | ||||||
|                 res.set_content(buf, "text/plain"); |                 res.set_content(buf, "text/plain; charset=utf-8"); | ||||||
|                 res.status = 500; |                 res.status = 500; | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
| @@ -3054,15 +3054,15 @@ int main(int argc, char **argv) | |||||||
|             { |             { | ||||||
|                 if (res.status == 401) |                 if (res.status == 401) | ||||||
|                 { |                 { | ||||||
|                     res.set_content("Unauthorized", "text/plain"); |                     res.set_content("Unauthorized", "text/plain; charset=utf-8"); | ||||||
|                 } |                 } | ||||||
|                 if (res.status == 400) |                 if (res.status == 400) | ||||||
|                 { |                 { | ||||||
|                     res.set_content("Invalid request", "text/plain"); |                     res.set_content("Invalid request", "text/plain; charset=utf-8"); | ||||||
|                 } |                 } | ||||||
|                 else if (res.status == 404) |                 else if (res.status == 404) | ||||||
|                 { |                 { | ||||||
|                     res.set_content("File Not Found", "text/plain"); |                     res.set_content("File Not Found", "text/plain; charset=utf-8"); | ||||||
|                     res.status = 404; |                     res.status = 404; | ||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexey Parfenov
					Alexey Parfenov