Skip to content

Commit d4c45a0

Browse files
committed
Implements support for multimodal content in Agent messages.
(cherry picked from commit 78bbb25)
1 parent 410eafd commit d4c45a0

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.genexus.util.saia;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.ObjectCodec;
5+
import com.fasterxml.jackson.databind.DeserializationContext;
6+
import com.fasterxml.jackson.databind.JsonDeserializer;
7+
import com.fasterxml.jackson.databind.JsonNode;
8+
9+
import java.io.IOException;
10+
import java.util.ArrayList;
11+
12+
class ContentDeserializer extends JsonDeserializer<OpenAIResponse.Content> {
13+
public ContentDeserializer() {}
14+
15+
@Override
16+
public OpenAIResponse.Content deserialize(JsonParser p, DeserializationContext ct) throws IOException {
17+
ObjectCodec codec = p.getCodec();
18+
JsonNode node = codec.readTree(p);
19+
20+
if (node.isTextual()) {
21+
return new OpenAIResponse.StringContent(node.asText());
22+
} else if (node.isArray()) {
23+
ArrayList<OpenAIResponse.StructuredContentItem> items = new ArrayList<>();
24+
for (JsonNode itemNode : node) {
25+
OpenAIResponse.StructuredContentItem item = codec.treeToValue(itemNode, OpenAIResponse.StructuredContentItem.class);
26+
items.add(item);
27+
}
28+
return new OpenAIResponse.StructuredContent(items);
29+
}
30+
31+
throw new IOException("Invalid content format");
32+
}
33+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.genexus.util.saia;
2+
3+
import com.fasterxml.jackson.core.JsonGenerator;
4+
import com.fasterxml.jackson.databind.JsonSerializer;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.databind.SerializerProvider;
7+
8+
import java.io.IOException;
9+
10+
class ContentSerializer extends JsonSerializer<OpenAIResponse.Content> {
11+
public ContentSerializer() {
12+
}
13+
14+
@Override
15+
public void serialize(OpenAIResponse.Content value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
16+
ObjectMapper mapper = (ObjectMapper) gen.getCodec();
17+
18+
if (value instanceof OpenAIResponse.StringContent) {
19+
gen.writeString(((OpenAIResponse.StringContent) value).getValue());
20+
} else if (value instanceof OpenAIResponse.StructuredContent) {
21+
gen.writeStartArray();
22+
for (OpenAIResponse.StructuredContentItem item : ((OpenAIResponse.StructuredContent) value).getItems()) {
23+
mapper.writeValue(gen, item);
24+
}
25+
gen.writeEndArray();
26+
} else {
27+
gen.writeNull();
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)