throw std::runtime_error("Expected 'messages' to be an array");
}
for (auto & msg : messages) {
+ std::string role = json_value(msg, "role", std::string());
+ if (role != "assistant" && !msg.contains("content")) {
+ throw std::runtime_error("All non-assistant messages must contain 'content'");
+ }
+ if (role == "assistant") {
+ if (!msg.contains("content") && !msg.contains("tool_calls")) {
+ throw std::runtime_error("Assistant message must contain either 'content' or 'tool_calls'!");
+ }
+ if (!msg.contains("content")) {
+ continue; // avoid errors with no content
+ }
+ }
json & content = msg.at("content");
if (content.is_string() || content.is_null()) {
continue;