| 1382 | } |
| 1383 | |
| 1384 | std::string format_anthropic_sse(const json & data) { |
| 1385 | std::ostringstream ss; |
| 1386 | |
| 1387 | auto send_event = [&ss](const json & event_obj) { |
| 1388 | if (event_obj.contains("event") && event_obj.contains("data")) { |
| 1389 | ss << "event: " << event_obj.at("event").get<std::string>() << "\n"; |
| 1390 | ss << "data: " << safe_json_to_str(event_obj.at("data")) << "\n\n"; |
| 1391 | } else { |
| 1392 | ss << "data: " << safe_json_to_str(event_obj) << "\n\n"; |
| 1393 | } |
| 1394 | }; |
| 1395 | |
| 1396 | if (data.is_array()) { |
| 1397 | for (const auto & event : data) { |
| 1398 | send_event(event); |
| 1399 | } |
| 1400 | } else { |
| 1401 | send_event(data); |
| 1402 | } |
| 1403 | |
| 1404 | return ss.str(); |
| 1405 | } |
| 1406 | |
| 1407 | bool is_valid_utf8(const std::string & str) { |
| 1408 | const unsigned char* bytes = reinterpret_cast<const unsigned char*>(str.data()); |
no test coverage detected