feat(ai-nutritionist): 图片与文字合并为一次 KieAI 多模态请求
- 后端: buildGeminiRequestBody 支持 content[] 中 Map 形式的多模态项 - 前端: sendMessage 将多图+文字合并为一条 content 数组,一次 sendToAI(multimodal) - 仅发图时补默认文案「请描述或分析这张图片」,统一走 KieAI Made-with: Cursor
This commit is contained in:
@@ -409,9 +409,9 @@ public class ToolKieAIServiceImpl implements ToolKieAIService {
|
||||
List<?> list = (List<?>) content;
|
||||
List<Map<String, Object>> parts = new ArrayList<>();
|
||||
for (Object item : list) {
|
||||
Map<String, Object> part = new HashMap<>();
|
||||
if (item instanceof KieAIGeminiChatRequest.ContentItem) {
|
||||
KieAIGeminiChatRequest.ContentItem ci = (KieAIGeminiChatRequest.ContentItem) item;
|
||||
Map<String, Object> part = new HashMap<>();
|
||||
part.put("type", ci.getType());
|
||||
if ("text".equals(ci.getType())) {
|
||||
part.put("text", ci.getText());
|
||||
@@ -421,6 +421,27 @@ public class ToolKieAIServiceImpl implements ToolKieAIService {
|
||||
part.put("image_url", iu);
|
||||
}
|
||||
parts.add(part);
|
||||
} else if (item instanceof Map) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> map = (Map<String, Object>) item;
|
||||
String t = (String) map.get("type");
|
||||
if ("text".equals(t)) {
|
||||
part.put("type", "text");
|
||||
part.put("text", map.get("text"));
|
||||
parts.add(part);
|
||||
} else if ("image_url".equals(t)) {
|
||||
Object iu = map.get("image_url");
|
||||
if (iu instanceof Map) {
|
||||
String url = (String) ((Map<?, ?>) iu).get("url");
|
||||
if (url != null) {
|
||||
part.put("type", "image_url");
|
||||
Map<String, Object> iuOut = new HashMap<>();
|
||||
iuOut.put("url", url);
|
||||
part.put("image_url", iuOut);
|
||||
parts.add(part);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
m.put("content", parts);
|
||||
|
||||
Reference in New Issue
Block a user