feat(brain): Stufe E — ARIA sieht Bilder ueber Claude Codes Read-Tool
Wir mussten den Proxy nicht patchen. Claude Code's eingebautes Read-Tool ist multi-modal-faehig — uebergibt man eine Bilddatei, geht die durch das gleiche Vision-Modell wie via Anthropic-Vision-API. ARIA hat eh "Tool-Freigaben — Vollzugriff" pinned (inkl. Read), also muss sie nur wissen dass sie das nutzen darf. prompts._attachments_line erweitert: bei image/* im Anhang haengen wir den Hinweis an "Bilder kannst du via `Read <pfad>` direkt ansehen". ARIA ruft dann selbststaendig Read mit dem Memory-Anhang-Pfad, sieht das Bild und kann antworten was drauf ist. Heisst: Stefan sagt "schau dir mein Cessna-Foto an" → ARIA findet Memory via Cold-Search → sieht die Read-Anweisung → ruft Read auf → Vision-Modell beschreibt das Bild → ARIA antwortet im Chat. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+20
-5
@@ -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/<id>/<name>
|
||||
— 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/<id>/<name>.
|
||||
|
||||
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/<id>/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 <pfad>` direkt ansehen "
|
||||
"(Claude Code Read ist multi-modal-faehig)")
|
||||
return line
|
||||
|
||||
|
||||
def build_hot_memory_section(pinned: List[MemoryPoint]) -> str:
|
||||
|
||||
Reference in New Issue
Block a user