From 0eb2d177713538fe11c7362128efe4dc2d970a0f Mon Sep 17 00:00:00 2001 From: Debanjum Date: Sun, 30 Mar 2025 23:45:40 +0530 Subject: [PATCH] Warn and drop invalid messages when format messages for gemini Previously we were setting message content part with empty text. This results in error from Gemini API. Warn and drop such messages instead. Log empty message content found during construction to root-cause the issue but allow Khoj to respond without the offending messages in context for call to Gemini API. --- src/khoj/processor/conversation/google/utils.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/khoj/processor/conversation/google/utils.py b/src/khoj/processor/conversation/google/utils.py index a5b8b74b..4d9b42d9 100644 --- a/src/khoj/processor/conversation/google/utils.py +++ b/src/khoj/processor/conversation/google/utils.py @@ -294,11 +294,21 @@ def format_messages_for_gemini( else: image = get_image_from_base64(image_data, type="bytes") message_content += [gtypes.Part.from_bytes(data=image.content, mime_type=image.type)] + elif not is_none_or_empty(item.get("text")): + message_content += [gtypes.Part.from_text(text=item["text"])] else: - message_content += [gtypes.Part.from_text(text=item.get("text", ""))] + logger.error(f"Dropping invalid message content part: {item}") + if not message_content: + logger.error(f"Dropping empty message content") + messages.remove(message) + continue message.content = message_content elif isinstance(message.content, str): message.content = [gtypes.Part.from_text(text=message.content)] + else: + logger.error(f"Dropping invalid type: {type(message.content)} of message content: {message.content}") + messages.remove(message) + continue if message.role == "assistant": message.role = "model"