Commit 96fe8f3

benny-dou <60535774+benny-dou@users.noreply.github.com>
2026-03-03 04:50:39
feat(ai): include quote text in contexts for better response quality
1 parent 20d5958
Changed files (2)
src
ai
messages
src/ai/texts/contexts.py
@@ -88,7 +88,11 @@ async def single_openai_chat_context(client: Client, message: Message) -> dict:
             clean_texts = clean_context(info["html"] or info["text"]) if role == "user" and info["entity_urls"] else clean_context(info["text"])
             if not clean_texts:
                 continue
-            texts = f"[username]: {sender}\n[message]:\n{clean_texts}" if role == "user" and sender else clean_texts
+            if role == "user" and sender:  # noqa: SIM108
+                texts = f"<quote>{info['quote_text']}</quote>\n[username]: {sender}\n[message]:\n{clean_texts}"
+            else:
+                texts = f"<quote>{info['quote_text']}</quote>\n{clean_texts}"
+            texts = texts.removeprefix("<quote></quote>\n")  # remove quote mark if no quote_text
             contexts.append({"type": "text", "text": texts})
         except Exception as e:
             logger.warning(f"Download media from message failed: {e}")
@@ -199,7 +203,11 @@ async def single_openai_response_context(client: Client, message: Message, opena
             clean_texts = clean_context(info["html"] or info["text"]) if role == "user" and info["entity_urls"] else clean_context(info["text"])
             if not clean_texts:
                 continue
-            texts = f"[username]: {sender}\n[message]:\n{clean_texts}" if role == "user" and sender else clean_texts
+            if role == "user" and sender:  # noqa: SIM108
+                texts = f"<quote>{info['quote_text']}</quote>\n[username]: {sender}\n[message]:\n{clean_texts}"
+            else:
+                texts = f"<quote>{info['quote_text']}</quote>\n{clean_texts}"
+            texts = texts.removeprefix("<quote></quote>\n")  # remove quote mark if no quote_text
             contexts.append({"type": "input_text", "text": texts})
         except Exception as e:
             logger.warning(f"Download media from message failed: {e}")
@@ -327,7 +335,11 @@ async def get_gemini_contexts(client: Client, message: Message, gemini: genai.Cl
                 clean_texts = clean_context(info["text"])
                 if not clean_texts:
                     continue
-                texts = f"[username]: {sender}\n[message]:\n{clean_texts}" if role == "user" and sender else clean_texts
+                if role == "user" and sender:  # noqa: SIM108
+                    texts = f"<quote>{info['quote_text']}</quote>\n[username]: {sender}\n[message]:\n{clean_texts}"
+                else:
+                    texts = f"<quote>{info['quote_text']}</quote>\n{clean_texts}"
+                texts = texts.removeprefix("<quote></quote>\n")  # remove quote mark if no quote_text
                 parts.append(Part.from_text(text=texts))
             except Exception as e:
                 logger.warning(f"Download media from message failed: {e}")
src/messages/parser.py
@@ -109,6 +109,7 @@ def parse_msg(message: Message, *, silent: bool = False, verbose: bool = False,
         "media_group_id": int(media_group_id),
         "is_bot": bool(is_bot),
         "text": str(text),
+        "quote_text": glom(message, "quote.text", default="") or "",
         "html": getattr(text, "html", ""),
         "full_name": str(full_name),
         "handle": str(handle),