for (const auto & output_text : item.at("content")) {
const std::string type = json_value(output_text, "type", std::string());
- if (type != "output_text") {
- throw std::invalid_argument("'type' must be 'output_text'");
- }
- if (!exists_and_is_string(output_text, "text")) {
- throw std::invalid_argument("'Output text' requires 'text'");
+ if (type == "output_text") {
+ if (!exists_and_is_string(output_text, "text")) {
+ throw std::invalid_argument("'Output text' requires 'text'");
+ // Ignore annotations and logprobs for now
+ chatcmpl_content.push_back({
+ {"text", output_text.at("text")},
+ {"type", "text"},
+ });
+ }
+ } else if (type == "refusal") {
+ if (!exists_and_is_string(output_text, "refusal")) {
+ throw std::invalid_argument("'Refusal' requires 'refusal'");
+ // Ignore annotations and logprobs for now
+ chatcmpl_content.push_back({
+ {"refusal", output_text.at("refusal")},
+ {"type", "refusal"},
+ });
+ }
+ } else {
+ throw std::invalid_argument("'type' must be one of 'output_text' or 'refusal'");
}
- // Ignore annotations and logprobs for now
- chatcmpl_content.push_back({
- {"text", output_text.at("text")},
- {"type", "text"},
- });
}
if (merge_prev) {