diff --git a/homelab-ai-bot/core/__pycache__/mail_client.cpython-313.pyc b/homelab-ai-bot/core/__pycache__/mail_client.cpython-313.pyc index 7f87041d..5c912a25 100644 Binary files a/homelab-ai-bot/core/__pycache__/mail_client.cpython-313.pyc and b/homelab-ai-bot/core/__pycache__/mail_client.cpython-313.pyc differ diff --git a/homelab-ai-bot/core/mail_client.py b/homelab-ai-bot/core/mail_client.py index 7ba649d6..f8cb9530 100644 --- a/homelab-ai-bot/core/mail_client.py +++ b/homelab-ai-bot/core/mail_client.py @@ -242,16 +242,20 @@ def classify_mails(mails: list[dict], api_key: str) -> list[dict]: {"role": "system", "content": CLASSIFY_PROMPT}, {"role": "user", "content": mail_text}, ], - "max_tokens": 400, + "max_tokens": 2000, "temperature": 0, }, - timeout=30, + timeout=60, ) r.raise_for_status() content = r.json()["choices"][0]["message"]["content"] content = content.strip() - if content.startswith("```"): - content = content.split("\n", 1)[-1].rsplit("```", 1)[0] + if "```" in content: + content = content.split("```", 1)[-1] + if content.startswith("json"): + content = content[4:] + content = content.rsplit("```", 1)[0] + content = content.strip() classifications = json.loads(content) cat_map = {c["idx"]: c["cat"] for c in classifications} @@ -264,8 +268,11 @@ def classify_mails(mails: list[dict], api_key: str) -> list[dict]: return mails +BATCH_SIZE = 40 + + def get_smart_digest(hours: int = 24, api_key: str = "") -> dict: - """Intelligente Mail-Zusammenfassung: holt Mails, klassifiziert per LLM, gruppiert.""" + """Intelligente Mail-Zusammenfassung: holt Mails, klassifiziert per LLM in Batches, gruppiert.""" m = _connect() if not m: return {"error": "IMAP-Verbindung fehlgeschlagen"} @@ -276,7 +283,7 @@ def get_smart_digest(hours: int = 24, api_key: str = "") -> dict: ids = data[0].split() if data[0] else [] mails = [] - for mid in ids[-50:]: + for mid in ids: _, msg_data = m.fetch(mid, "(BODY.PEEK[HEADER])") parsed = _parse_mail(msg_data) if parsed: @@ -291,7 +298,12 @@ def get_smart_digest(hours: int = 24, api_key: str = "") -> dict: return {"total": 0, "mails": [], "summary": {}} if api_key: - mails = classify_mails(mails, api_key) + classified = [] + for i in range(0, len(mails), BATCH_SIZE): + batch = mails[i:i + BATCH_SIZE] + batch = classify_mails(batch, api_key) + classified.extend(batch) + mails = classified summary = {} for m_item in mails: