fix: gemini no content bug

This commit is contained in:
zhayujie
2023-12-15 14:23:36 +08:00
parent 23a237074e
commit eca1892e2a

View File

@@ -26,21 +26,24 @@ class GoogleGeminiBot(Bot):
self.sessions = SessionManager(BaiduWenxinSession, model=conf().get("model") or "gpt-3.5-turbo") self.sessions = SessionManager(BaiduWenxinSession, model=conf().get("model") or "gpt-3.5-turbo")
def reply(self, query, context: Context = None) -> Reply: def reply(self, query, context: Context = None) -> Reply:
if context.type != ContextType.TEXT: try:
logger.warn(f"[Gemini] Unsupported message type, type={context.type}") if context.type != ContextType.TEXT:
return Reply(ReplyType.TEXT, None) logger.warn(f"[Gemini] Unsupported message type, type={context.type}")
logger.info(f"[Gemini] query={query}") return Reply(ReplyType.TEXT, None)
session_id = context["session_id"] logger.info(f"[Gemini] query={query}")
session = self.sessions.session_query(query, session_id) session_id = context["session_id"]
gemini_messages = self._convert_to_gemini_messages(session.messages) session = self.sessions.session_query(query, session_id)
genai.configure(api_key=self.api_key) gemini_messages = self._convert_to_gemini_messages(self._filter_messages(session.messages))
model = genai.GenerativeModel('gemini-pro') genai.configure(api_key=self.api_key)
response = model.generate_content(gemini_messages) model = genai.GenerativeModel('gemini-pro')
reply_text = response.text response = model.generate_content(gemini_messages)
self.sessions.session_reply(reply_text, session_id) reply_text = response.text
logger.info(f"[Gemini] reply={reply_text}") self.sessions.session_reply(reply_text, session_id)
return Reply(ReplyType.TEXT, reply_text) logger.info(f"[Gemini] reply={reply_text}")
return Reply(ReplyType.TEXT, reply_text)
except Exception as e:
logger.error("[Gemini] fetch reply error, may contain unsafe content")
logger.error(e)
def _convert_to_gemini_messages(self, messages: list): def _convert_to_gemini_messages(self, messages: list):
res = [] res = []
@@ -56,3 +59,17 @@ class GoogleGeminiBot(Bot):
"parts": [{"text": msg.get("content")}] "parts": [{"text": msg.get("content")}]
}) })
return res return res
def _filter_messages(self, messages: list):
res = []
turn = "user"
for i in range(len(messages) - 1, -1, -1):
message = messages[i]
if message.get("role") != turn:
continue
res.insert(0, message)
if turn == "user":
turn = "assistant"
elif turn == "assistant":
turn = "user"
return res