diff --git a/aria-brain/prompts.py b/aria-brain/prompts.py index 5ba12df..5d21cc4 100644 --- a/aria-brain/prompts.py +++ b/aria-brain/prompts.py @@ -54,25 +54,40 @@ TYPE_HEADINGS = { def _attachments_line(p: MemoryPoint) -> str: """Eine Zeile die ARIA verraet welche Dateien an einer Memory haengen. - Bilder/Files liegen physisch unter /shared/memory-attachments// - — ARIA kann sie via Bash anschauen (file, head, base64...) wenn relevant. - Sehen kann sie sie erst mit der Multi-Modal-Pipeline (Stufe E).""" + Bilder/Files liegen physisch unter /shared/memory-attachments//. + + Multi-Modal-Hinweis: Claude Code's `Read`-Tool kann Bilder direkt + anschauen (PNG/JPG/GIF/WebP) — sie laufen dann durch das gleiche + Vision-Modell wie via Anthropic-Vision-API. Heisst: ARIA muss nur + `Read /shared/memory-attachments//foto.jpg` aufrufen und sieht + das Bild wirklich, ohne dass wir Multi-Modal-Messages durch den + Proxy schleusen muessen. Wir geben ihr den Hinweis in der Zeile mit. + """ atts = getattr(p, "attachments", None) or [] if not atts: return "" + base_dir = f"/shared/memory-attachments/{p.id}/" if p.id else "" items = [] + has_image = False for a in atts: if not isinstance(a, dict): continue name = a.get("name", "?") mime = a.get("mime", "") + if mime.startswith("image/"): + has_image = True size = a.get("size") size_part = f", {size // 1024} KB" if isinstance(size, int) and size else "" items.append(f"{name} ({mime}{size_part})") if not items: return "" - base_dir = f"/shared/memory-attachments/{p.id}/" if p.id else "" - return f"📎 Anhaenge: {', '.join(items)}" + (f" — Pfad: {base_dir}" if base_dir else "") + line = f"📎 Anhaenge: {', '.join(items)}" + if base_dir: + line += f" — Pfad: {base_dir}" + if has_image and base_dir: + line += (" — Bilder kannst du via `Read ` direkt ansehen " + "(Claude Code Read ist multi-modal-faehig)") + return line def build_hot_memory_section(pinned: List[MemoryPoint]) -> str: