Entropic 2.3.8
Local-first agentic inference engine
Loading...
Searching...
No Matches
messages_json.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
10
11#include <nlohmann/json.hpp>
12
13namespace entropic {
14
15namespace {
16
24ContentPart parse_content_part(const nlohmann::json& part) {
25 ContentPart cp;
26 auto type_str = part.value("type", "text");
27 if (type_str == "image") {
28 cp.type = ContentPartType::IMAGE;
29 cp.image_path = part.value("path", "");
30 cp.image_url = part.value("url", "");
31 } else {
32 cp.type = ContentPartType::TEXT;
33 cp.text = part.value("text", "");
34 }
35 return cp;
36}
37
45Message parse_one_message(const nlohmann::json& m) {
46 Message msg;
47 msg.role = m.value("role", "user");
48 if (m.contains("content") && m["content"].is_array()) {
49 for (const auto& part : m["content"]) {
50 msg.content_parts.push_back(parse_content_part(part));
51 }
52 msg.content = extract_text(msg.content_parts);
53 } else {
54 msg.content = m.value("content", "");
55 }
56 return msg;
57}
58
59} // namespace
60
68std::vector<Message> parse_messages_json(const char* json_str) {
69 std::vector<Message> messages;
70 if (json_str == nullptr) { return messages; }
71 auto arr = nlohmann::json::parse(json_str);
72 if (!arr.is_array()) { return messages; }
73 for (const auto& m : arr) {
74 messages.push_back(parse_one_message(m));
75 }
76 return messages;
77}
78
86bool any_message_has_images(const std::vector<Message>& messages) {
87 for (const auto& m : messages) {
88 if (has_images(m.content_parts)) { return true; }
89 }
90 return false;
91}
92
93} // namespace entropic
Multimodal content types for messages.
Shared parser: messages-JSON wire format → vector<Message>.
Activate model on GPU (WARM → ACTIVE).
@ IMAGE
Image content (local path or data URI)
@ TEXT
Plain text content.
bool any_message_has_images(const std::vector< Message > &messages)
Convenience: true if any message carries image content_parts.
bool has_images(const std::vector< ContentPart > &parts)
Check if content parts contain any image parts.
Definition content.cpp:41
std::string extract_text(const std::vector< ContentPart > &parts)
Extract concatenated text from content parts.
Definition content.cpp:20
std::vector< Message > parse_messages_json(const char *json_str)
Parse a JSON array of messages into a vector of Message.