Zum Inhalt

Wie mintbot Dateien handhabt

Wenn du ein Foto, Dokument, eine Sprachnachricht, Tabelle, einen Screenshot oder eine PDF an deinen mintbot-Agenten schickst — über Telegram, das Web-Panel oder die API — dann läuft die Datei nicht durch mintbots zentrale Infrastruktur, bevor sie das Sprachmodell erreicht. Sie landet direkt auf dem eigenen VPS deines Agenten, bleibt dort so lange du willst, und das LLM bekommt eine für sich optimierte Kopie.

Das ist eine leise Designentscheidung mit lauten Folgen. Es lohnt sich, das auszubuchstabieren, denn es ist einer der größten Punkte, an denen mintbot sich vom Consumer-LLM-Chat unterscheidet.

Der Ablauf von Anfang bis Ende

  1. Upload landet auf dem Agent-VPS. Ein Foto aus Telegram, eine ins Web-Panel gezogene PDF, ein Sprachmemo, ein in den Chat eingefügter Screenshot. Die lokale API des Agenten nimmt die Bytes entgegen, schnüffelt am Magic Header, um herauszufinden, was die Datei wirklich ist (Handys und Browser kennzeichnen sie überraschend oft falsch), hasht sie mit SHA-256 und schreibt sie unter /var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext> auf den eigenen VPS deines Agenten. Ein Eintrag landet im lokalen Katalog mit Quelle (telegram / panel / api), Uploader-ID, MIME-Typ und Originaldateinamen.

  2. Das Original ist heilig. Ab diesem Punkt verändert nichts innerhalb von mintbot die gespeicherte Datei je wieder. Adapter, die sie für das LLM vorbereiten, geben nur Arbeitskopien aus — verkleinerte JPEGs, umkodierten Text, extrahierte Thumbnails. Das Byte-für-Byte-Original bleibt auf der Platte, bis du es über den Dateimanager des Agenten löschst. Es gibt keinen zentralen Speicher, keinen Retention-Timer, kein Übergreifen zwischen Agenten: Jeder Agent-VPS kennt nur die Uploads seines eigenen Besitzers.

  3. Das Modell bekommt eine LLM-optimierte Version. Wenn der Agent entscheidet, dem LLM die Datei zu zeigen, wählt ein kleiner Dispatcher anhand von MIME-Typ und Endung den richtigen Adapter, und der Adapter gibt Inhaltsblöcke aus, die das Modell lesen kann:

    Adapter Verarbeitet Ausgabe
    Image JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF und alles andere, was Pillow öffnen kann Auf 1568 px lange Kante skaliert, neu als JPEG q85 kodiert, base64-inline im Modellkontext
    PDF .pdf ≤ 32 MB Base64-inline als natives PDF (Anthropic-Modelle lesen es direkt)
    Text .md, .csv, .json, .yaml, Quellcode (.py, .js, .ts, .go, .rs, …), Logs, Diffs UTF-8 dekodiert (latin-1 als Fallback), inline als Text bis zu einer Größengrenze
    Audio .mp3, .ogg, .opus, .m4a, .wav, .flac Telegram-Sprachnachrichten werden vom Bot bereits inline transkribiert; Direkt-Uploads bekommen aktuell einen Platzhalter, Whisper STT folgt in einer späteren Welle
    Video .mp4, .mov, .webm, .mkv Vorerst Platzhalter; ffmpeg-Keyframe + Audio-Transkript-Extraktion landen in einer späteren Welle
    Office docs .docx, .xlsx, .pptx, .odt, .ods, .odp Vorerst Platzhalter; native Textextraktion (python-docx / openpyxl / python-pptx) folgt in einer späteren Welle
    Unknown Alles andere Text-Platzhalter: „der User hat eine <mime>-Datei angehängt, sie liegt auf der Platte unter Upload-ID <id>" — so kann das Modell zumindest darüber reden, was geschickt wurde

    Jede Transformation wird neben dem Original als <sha256>.cache/v<N>.json gecacht, sodass das Modell beim zweiten Mal sofort lädt. Wird die Adapterversion erhöht, wird der Cache automatisch invalidiert.

  4. Keine ablaufenden URLs im Modellkontext. Wenn ein Bild oder PDF zum LLM geht, wird es in derselben Runde base64-inline eingebettet — keine URL, die später ins Leere laufen kann, kein signierter Link mit Timer. Bei größeren Dateien, bei denen das Modell nur einen Verweis braucht, ist die URL eine interne https://agent<id>.<domain>/<panel_token>/api/local/uploads/<upload_id>/raw — geschützt durch das eigene Panel-Token deines Agenten und gültig, solange die Datei auf der Platte liegt.

Warum das den Consumer-LLM-Chat schlägt

Wenn du ein Foto in ChatGPT oder eine PDF in Claude.ai hochlädst, geht die Datei in den Speicher des Anbieters, wird dieser Unterhaltung zugeordnet und die Retention-Policy des Anbieters entscheidet, wann sie verschwindet. Ab einem gewissen Alter ist die Datei weg, selbst wenn du die Unterhaltung, in der sie war, noch sehen kannst. Anbieter wechseln heißt von vorne anfangen.

Ein klassischer Telegram-Bot-Fallstrick macht den Kontrast greifbar. Telegram selbst behält für jedes Foto eine permanente file_id, aber Drittanbieter-Bots, die eine Telegram-file_id abrufen, bekommen eine temporäre URL, die nach 24 Stunden abläuft. Ältere Bots, die auf das Foto von gestern verweisen, liefern einen 404. mintbot löst das ein für alle Mal: Sieht er eine Telegram-Datei zum ersten Mal, holt er die Bytes über die ewig gültige file_id neu ab und kopiert sie in das Archiv deines Agenten. Ab diesem Moment gehört das Foto dir.

Aus diesem Design folgen drei Dinge:

  • Die Dateien gehören dir, nicht dem LLM-Anbieter. Wechselst du nächsten Monat von Claude zu GPT-5, kommt deine Dateihistorie unangetastet mit, weil sie auf deinem VPS liegt — nicht im Speicher eines Anbieters.
  • Du kannst später nochmal fragen. „Vor drei Monaten hast du für mich einen Vertrag analysiert — kannst du ihn mit diesem neuen Entwurf vergleichen?" funktioniert, weil das Original noch auf der Platte ist. Im Consumer-Chat ist die ältere Datei in der Regel weg.
  • Das Modell bekommt immer die Version, die es am besten verarbeiten kann. Vision-Modelle bekommen das skalierte JPEG, Text-Leser bekommen UTF-8, PDF-Leser bekommen natives PDF. Handys können HEIC hochladen und es funktioniert einfach — Pillows HEIF-Plugin wird beim Start geladen, und der Magic-Byte-Sniffer fängt Handys ab, die den Upload als application/octet-stream falsch kennzeichnen.

Wo du deine Dateien verwaltest

Das Web-Panel des Agenten bringt in der Topbar einen Dateimanager mit. Er durchsucht den gesamten Agent-VPS, und das Upload-Archiv unter /var/lib/mintbot-agent/uploads/ ist der Teil, den deine Unterhaltungen füllen. Von dort aus kannst du:

  • Hochgeladene Dateien umbenennen, löschen oder verschieben
  • Sie nach Datum, Quelle oder Dateinamen durchsuchen
  • Neue Uploads per Drag-and-Drop hinzufügen (chunked, unterstützt Dateien von mehreren Gigabyte)
  • Kleine Textdateien inline bearbeiten

Löschst du eine Datei im Panel, verschwinden sowohl das Blob als auch der Katalogeintrag. Der Agent kann sie dem LLM dann nicht mehr zeigen. Das macht das Original zu „deinem": Du bist der Einzige, der löschen darf.

Unterm Strich

Die meisten LLM-Chat-Produkte behandeln deine Uploads als flüchtigen Konversationskontext. mintbot behandelt sie als deine Daten — auf deinem VPS gespeichert, dir gehörend, auf Abruf in genau die Form gebracht, die das Modell in diesem Moment am besten verarbeiten kann. Die meisten der interessanteren Fähigkeiten von mintbot sitzen auf diesem Fundament.