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
8
#include <
entropic/types/messages_json.h
>
9
#include <
entropic/types/content.h
>
10
11
#include <nlohmann/json.hpp>
12
13
namespace
entropic
{
14
15
namespace
{
16
24
ContentPart 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
45
Message 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
68
std::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
86
bool
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
content.h
Multimodal content types for messages.
messages_json.h
Shared parser: messages-JSON wire format → vector<Message>.
entropic
Activate model on GPU (WARM → ACTIVE).
Definition
bundled_models.h:20
entropic::ContentPartType::IMAGE
@ IMAGE
Image content (local path or data URI)
entropic::ContentPartType::TEXT
@ TEXT
Plain text content.
entropic::any_message_has_images
bool any_message_has_images(const std::vector< Message > &messages)
Convenience: true if any message carries image content_parts.
Definition
messages_json.cpp:86
entropic::has_images
bool has_images(const std::vector< ContentPart > &parts)
Check if content parts contain any image parts.
Definition
content.cpp:41
entropic::extract_text
std::string extract_text(const std::vector< ContentPart > &parts)
Extract concatenated text from content parts.
Definition
content.cpp:20
entropic::parse_messages_json
std::vector< Message > parse_messages_json(const char *json_str)
Parse a JSON array of messages into a vector of Message.
Definition
messages_json.cpp:68
types
messages_json.cpp
Generated by
1.9.8