Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 6d8d048

Browse files
committed
fix: tojson string
1 parent 3364989 commit 6d8d048

File tree

3 files changed

+21
-18
lines changed

3 files changed

+21
-18
lines changed

engine/extensions/remote-engine/remote_engine.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -647,8 +647,8 @@ void RemoteEngine::HandleChatCompletion(
647647
}
648648
} catch (const std::exception& e) {
649649
// Log error and potentially rethrow or handle accordingly
650-
LOG_WARN << "Error in TransformRequest: " << e.what();
651-
LOG_WARN << "Using original request body";
650+
LOG_WARN << "Error: " << e.what();
651+
LOG_WARN << "Using original body";
652652
response_str = response_json.toStyledString();
653653
}
654654

engine/extensions/template_renderer.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ TemplateRenderer::TemplateRenderer() {
2121
const auto& value = *args[0];
2222

2323
if (value.is_string()) {
24-
return nlohmann::json(std::string("\"") + value.get<std::string>() +
25-
"\"");
24+
std::string v = value.get<std::string>();
25+
v = std::regex_replace(v, std::regex("\""), "\\\"");
26+
return nlohmann::json(std::string("\"") + v + "\"");
2627
}
2728
return value;
2829
});
@@ -53,6 +54,7 @@ std::string TemplateRenderer::Render(const std::string& tmpl,
5354
return result;
5455
} catch (const std::exception& e) {
5556
LOG_ERROR << "Template rendering failed: " << e.what();
57+
LOG_ERROR << "Data: " << data.toStyledString();
5658
LOG_ERROR << "Template: " << tmpl;
5759
throw std::runtime_error(std::string("Template rendering failed: ") +
5860
e.what());

engine/test/components/test_remote_engine.cc

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ TEST_F(RemoteEngineTest, OpenAiToAnthropicRequest) {
1818
"messages": [
1919
{% for message in input_request.messages %}
2020
{% if not loop.is_first %}
21-
{"role": "{{ message.role }}", "content": "{{ message.content }}" } {% if not loop.is_last %},{% endif %}
21+
{"role": "{{ message.role }}", "content": {{ tojson(message.content) }} } {% if not loop.is_last %},{% endif %}
2222
{% endif %}
2323
{% endfor %}
2424
]
2525
{% else %}
2626
"messages": [
2727
{% for message in input_request.messages %}
28-
{"role": " {{ message.role}}", "content": "{{ message.content }}" } {% if not loop.is_last %},{% endif %}
28+
{"role": " {{ message.role}}", "content": {{ tojson(message.content) }} } {% if not loop.is_last %},{% endif %}
2929
{% endfor %}
3030
]
3131
{% endif %}
@@ -187,28 +187,28 @@ TEST_F(RemoteEngineTest, CohereRequest) {
187187
{% for key, value in input_request %}
188188
{% if key == "messages" %}
189189
{% if input_request.messages.0.role == "system" %}
190-
"preamble": "{{ input_request.messages.0.content }}",
190+
"preamble": {{ tojson(input_request.messages.0.content) }},
191191
{% if length(input_request.messages) > 2 %}
192192
"chatHistory": [
193193
{% for message in input_request.messages %}
194194
{% if not loop.is_first and not loop.is_last %}
195-
{"role": {% if message.role == "user" %} "USER" {% else %} "CHATBOT" {% endif %}, "content": "{{ message.content }}" } {% if loop.index < length(input_request.messages) - 2 %},{% endif %}
195+
{"role": {% if message.role == "user" %} "USER" {% else %} "CHATBOT" {% endif %}, "content": {{ tojson(message.content) }} } {% if loop.index < length(input_request.messages) - 2 %},{% endif %}
196196
{% endif %}
197197
{% endfor %}
198198
],
199199
{% endif %}
200-
"message": "{{ last(input_request.messages).content }}"
200+
"message": {{ tojson(last(input_request.messages).content) }}
201201
{% else %}
202202
{% if length(input_request.messages) > 2 %}
203203
"chatHistory": [
204204
{% for message in input_request.messages %}
205205
{% if not loop.is_last %}
206-
{ "role": {% if message.role == "user" %} "USER" {% else %} "CHATBOT" {% endif %}, "content": "{{ message.content }}" } {% if loop.index < length(input_request.messages) - 2 %},{% endif %}
206+
{ "role": {% if message.role == "user" %} "USER" {% else %} "CHATBOT" {% endif %}, "content": {{ tojson(message.content) }} } {% if loop.index < length(input_request.messages) - 2 %},{% endif %}
207207
{% endif %}
208208
{% endfor %}
209209
],
210210
{% endif %}
211-
"message": "{{ last(input_request.messages).content }}"
211+
"message": {{ tojson(last(input_request.messages).content) }}
212212
{% endif %}
213213
{% if not loop.is_last %},{% endif %}
214214
{% else if key == "system" or key == "model" or key == "temperature" or key == "store" or key == "max_tokens" or key == "stream" or key == "presence_penalty" or key == "metadata" or key == "frequency_penalty" or key == "tools" or key == "tool_choice" or key == "logprobs" or key == "top_logprobs" or key == "logit_bias" or key == "n" or key == "modalities" or key == "prediction" or key == "response_format" or key == "service_tier" or key == "seed" or key == "stop" or key == "stream_options" or key == "top_p" or key == "parallel_tool_calls" or key == "user" %}
@@ -249,7 +249,7 @@ TEST_F(RemoteEngineTest, CohereRequest) {
249249
{
250250
std::string message_without_system = R"({
251251
"messages": [
252-
{"role": "user", "content": "Hello, world"}
252+
{"role": "user", "content": "Hello, \"the\" world"}
253253
],
254254
"model": "command-r-plus-08-2024",
255255
"max_tokens": 1024,
@@ -273,15 +273,15 @@ TEST_F(RemoteEngineTest, CohereResponse) {
273273
{% if input_request.stream %}
274274
{"object": "chat.completion.chunk",
275275
"model": "{{ input_request.model }}",
276-
"choices": [{"index": 0, "delta": { {% if input_request.event_type == "text-generation" %} "role": "assistant", "content": "{{ input_request.text }}" {% else %} "role": "assistant", "content": null {% endif %} },
276+
"choices": [{"index": 0, "delta": { {% if input_request.event_type == "text-generation" %} "role": "assistant", "content": {{ tojson(input_request.text) }} {% else %} "role": "assistant", "content": null {% endif %} },
277277
{% if input_request.event_type == "stream-end" %} "finish_reason": "{{ input_request.finish_reason }}" {% else %} "finish_reason": null {% endif %} }]
278278
}
279279
{% else %}
280280
{"id": "{{ input_request.generation_id }}",
281281
"created": null,
282282
"object": "chat.completion",
283283
"model": "{{ input_request.model }}",
284-
"choices": [{ "index": 0, "message": { "role": "assistant", "content": {% if not input_request.text %} null {% else %} "{{input_request.text}}" {% endif %}, "refusal": null }, "logprobs": null, "finish_reason": "{{ input_request.finish_reason }}" } ], "usage": { "prompt_tokens": {{ input_request.meta.tokens.input_tokens }}, "completion_tokens": {{ input_request.meta.tokens.output_tokens }}, "total_tokens": {{ input_request.meta.tokens.input_tokens + input_request.meta.tokens.output_tokens }}, "prompt_tokens_details": { "cached_tokens": 0 }, "completion_tokens_details": { "reasoning_tokens": 0, "accepted_prediction_tokens": 0, "rejected_prediction_tokens": 0 } }, "system_fingerprint": "fp_6b68a8204b"} {% endif %})";
284+
"choices": [{ "index": 0, "message": { "role": "assistant", "content": {% if not input_request.text %} null {% else %} {{ tojson(input_request.text) }} {% endif %}, "refusal": null }, "logprobs": null, "finish_reason": "{{ input_request.finish_reason }}" } ], "usage": { "prompt_tokens": {{ input_request.meta.tokens.input_tokens }}, "completion_tokens": {{ input_request.meta.tokens.output_tokens }}, "total_tokens": {{ input_request.meta.tokens.input_tokens + input_request.meta.tokens.output_tokens }}, "prompt_tokens_details": { "cached_tokens": 0 }, "completion_tokens_details": { "reasoning_tokens": 0, "accepted_prediction_tokens": 0, "rejected_prediction_tokens": 0 } }, "system_fingerprint": "fp_6b68a8204b"} {% endif %})";
285285
std::string message = R"({
286286
"event_type": "text-generation",
287287
"text": " help"
@@ -337,7 +337,7 @@ TEST_F(RemoteEngineTest, CohereResponse) {
337337
// non-stream
338338
message = R"(
339339
{
340-
"text": "Isaac Newton was born on 25 December 1642 (Old Style) \n\nor 4 January 1643 (New Style).",
340+
"text": "Isaac Newton was 'born' on 25 \"December\" 1642 (Old Style) \n\nor 4 January 1643 (New Style).",
341341
"generation_id": "0385c7cf-4247-43a3-a450-b25b547a31e1",
342342
"citations": [
343343
{
@@ -409,9 +409,10 @@ TEST_F(RemoteEngineTest, CohereResponse) {
409409
data["model"] = "cohere";
410410
res = rdr.Render(tpl, data);
411411
res_json = json_helper::ParseJsonString(res);
412-
EXPECT_EQ(res_json["choices"][0]["message"]["content"].asString(),
413-
"Isaac Newton was born on 25 December 1642 (Old Style) \n\nor 4 "
414-
"January 1643 (New Style).");
412+
EXPECT_EQ(
413+
res_json["choices"][0]["message"]["content"].asString(),
414+
"Isaac Newton was 'born' on 25 \"December\" 1642 (Old Style) \n\nor 4 "
415+
"January 1643 (New Style).");
415416
}
416417

417418
TEST_F(RemoteEngineTest, HeaderTemplate) {

0 commit comments

Comments
 (0)