Ga naar inhoud

Hoe mintbot met bestanden omgaat

Als je je mintbot-agent een foto, document, spraakbericht, spreadsheet, screenshot of pdf stuurt — via Telegram, het webpaneel of de API — dan wordt het bestand opgeslagen op de eigen VPS van je agent en nergens anders. Het blijft daar zo lang je wilt, en het LLM krijgt een werkkopie die er speciaal voor is gemaakt.

Dat is een stille ontwerpkeuze met grote gevolgen. Het loont om die uit te leggen, want hier wijkt mintbot het sterkst af van gewone AI-chatdiensten.

Diagram: een upload wordt als origineel op de VPS van je agent opgeslagen; een adapter die op bestandstype wordt gekozen, maakt een werkkopie voor het LLM
Het origineel blijft onaangeroerd op je VPS — het model ziet alleen een werkkopie die ervoor is gemaakt.

De hele route, van begin tot eind

  1. De upload komt aan op de VPS van de agent. Een pdf die je in het webpaneel sleept, gaat rechtstreeks naar je VPS. Een foto of bestand dat je in Telegram stuurt, haalt de mintbot-bot op bij Telegram en geeft hij meteen door aan je VPS — alleen doorgegeven, nooit centraal opgeslagen. De lokale API van de agent controleert de magic bytes om te bepalen wat voor bestand het echt is (telefoons en browsers labelen bestanden verrassend vaak verkeerd), berekent een SHA-256-hash en schrijft het naar /var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext>. In een lokale catalogus komt een regel met de bron (telegram / panel / api), het ID van de uploader, het MIME-type en de oorspronkelijke bestandsnaam. Stuur je hetzelfde bestand twee keer, dan wordt het toch maar één keer opgeslagen.

    Werkt het gesprek in een project, dan zet de agent ook een kopie in de map uploads/ van dat project, zodat hij met het bestand kan werken naast de rest van het project.

  2. Het origineel is heilig. Vanaf dit moment verandert niets in mintbot het opgeslagen bestand. Adapters die het voor het LLM klaarmaken, maken alleen werkkopieën — verkleinde JPEG's, gedecodeerde tekst. Het origineel blijft byte voor byte ongewijzigd op de schijf staan tot jij het verwijdert. Er is geen centrale opslag, geen bewaartermijn en geen lekkage tussen agents: elke agent-VPS kent alleen de bestanden van zijn eigen eigenaar.

  3. Het model krijgt een versie die ervoor is gemaakt. Wanneer de agent het bestand aan het LLM laat zien, kiest een kleine dispatcher de juiste adapter op basis van MIME-type en extensie:

    Adapter Verwerkt Wat het model krijgt
    Afbeelding JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF, TIFF, BMP Verkleind tot 1568 px aan de lange zijde, opnieuw gecodeerd als JPEG q85 en direct in het verzoek meegestuurd. Het decoderen gebeurt in een apart, kortlevend proces met een geheugenbudget dat op je VPS is afgestemd, zodat een enorme foto de agent niet kan vertragen
    PDF .pdf tot 32 MB Als echte pdf meegestuurd — Claude leest tekst en opmaak rechtstreeks. Een grotere pdf blijft op de schijf en de agent haalt de tekst er zelf uit (bijv. met pdftotext)
    Tekst .txt, .md, .csv, .json, .yaml, .svg, broncode (.py, .js, .ts, .go, .rs, …), logs, diffs Gedecodeerd als UTF-8 (latin-1 als terugvaloptie) en meegestuurd tot 500 KB; een langer bestand wordt daar afgekapt, het volledige origineel blijft op de schijf
    Audio .mp3, .ogg, .opus, .m4a, .wav, .flac, .aac Spraakberichten uit Telegram en van de microfoon in het paneel komen al getranscribeerd binnen. Een audiobestand wordt nog niet automatisch getranscribeerd — de agent krijgt de locatie en instructies en transcribeert het als je erom vraagt
    Video .mp4, .mov, .webm, .mkv, .avi Wordt nog niet automatisch verwerkt. Als je erom vraagt, installeert de agent ffmpeg (en vertelt eerst hoeveel schijfruimte dat kost) en haalt hij zelf beelden of het audiospoor eruit
    Office-documenten .docx, .xlsx, .pptx, oudere .doc / .xls / .ppt, .odt, .ods, .odp Worden nog niet automatisch verwerkt. Als je erom vraagt, installeert de agent een kleine leesbibliotheek en haalt hij de tekst eruit
    Onbekend Al het andere Een notitie met de naam, het type, de grootte en de plek op de schijf van het bestand, plus de eerste bytes in hex — genoeg voor het model om het bestand te herkennen en het met zijn tools te openen als de taak dat vraagt

    Elke werkkopie wordt naast het origineel in de cache gezet als <sha256>.cache/v<N>.json, zodat het model het bestand de tweede keer meteen heeft. Verandert een adapter, dan bouwt de cache zichzelf opnieuw op.

  4. Geen verlopende URL's in de context van het model. Gaat er een afbeelding of pdf naar het LLM, dan wordt die in hetzelfde verzoek meegestuurd — geen URL die later een 404 kan geven, geen ondertekende link met een vervaltijd. Waar het model alleen een verwijzing nodig heeft, is de URL een interne https://agent<id>.<domain>/<panel_token>/api/local/uploads/<upload_id>/raw — beveiligd met het eigen paneeltoken van je agent en geldig zolang het bestand op de schijf staat.

Waarom dit beter is dan gewone AI-chat

Upload je een foto naar ChatGPT of een pdf naar Claude.ai, dan gaat het bestand naar de opslag van de aanbieder, gekoppeld aan dat gesprek, en bepaalt het bewaarbeleid van de aanbieder wanneer het verdwijnt. Na een bepaalde tijd is het bestand weg, ook als je het gesprek waar het bij hoorde nog kunt zien. Overstappen naar een andere aanbieder betekent opnieuw beginnen.

Een bekende valkuil bij Telegram-bots maakt het verschil concreet. Telegram bewaart voor elke foto een permanente file_id, maar de downloadlink die een bot daarvoor krijgt, werkt gegarandeerd maar ongeveer een uur. Bots die alleen die link bewaren, geven een 404 voor de foto van gisteren. mintbot kopieert het bestand naar het archief van jouw agent zodra het binnenkomt — en reageer je op een oudere foto, dan haalt hij die opnieuw op via de permanente file_id. Vanaf dat moment is de foto van jou.

Uit dit ontwerp volgen drie dingen:

  • Bestanden zijn van jou, niet van de LLM-aanbieder. Stap je volgende maand over van Claude naar GPT, dan gaat je bestandsgeschiedenis ongewijzigd mee, want die staat op je VPS — niet in de opslag van een aanbieder.
  • Je kunt later opnieuw vragen. ‘Drie maanden geleden heb je een contract voor me geanalyseerd — kun je het vergelijken met dit nieuwe concept?’ werkt, omdat het origineel nog op de schijf staat. Bij gewone AI-chat is het oudere bestand meestal weg.
  • Het model krijgt altijd de versie waar het het best mee kan werken. Vision-modellen krijgen de verkleinde JPEG, tekstlezers UTF-8, pdf-lezers een echte pdf. Telefoons kunnen HEIC uploaden en het werkt gewoon — de afbeeldingsdecoder laadt de HEIF-plug-in van Pillow, en de controle op magic bytes vangt telefoons op die de upload ten onrechte als application/octet-stream labelen.

Waar je je bestanden beheert

Het webpaneel van de agent heeft een bestandsbeheerder onder Instellingen → Bestandsbeheer. Daarmee blader je door de hele VPS van de agent; het uploadarchief in /var/lib/mintbot-agent/uploads/ is het deel dat je gesprekken vullen. Daar kun je:

  • Door mappen bladeren en bestanden downloaden, hernoemen, verplaatsen of verwijderen
  • Mappen aanmaken
  • Nieuwe bestanden erin slepen — geüpload in delen, tot 4 GB per bestand
  • Kleine tekstbestanden (tot 1 MB) direct in de browser bewerken

Groottelimieten: een bestand dat je in de chat bijvoegt, mag tot 500 MB groot zijn; Telegram laat bots alleen bestanden tot 20 MB ophalen; Bestandsbeheer neemt tot 4 GB per bestand aan. Daarboven is je schijf de enige grens — mintbot houdt altijd wat ruimte vrij zodat de server blijft draaien. Raakt de schijf vol, dan meldt de agent dat en linkt hij direct naar Bestandsbeheer, zodat je ruimte kunt vrijmaken — of je vraagt de agent gewoon om oude bestanden te verwijderen.

Verwijder je een bestand in Bestandsbeheer, dan verdwijnt het van de schijf en kan de agent het niet meer aan het LLM laten zien. Dat maakt het origineel ‘van jou’: alleen jij kunt het verwijderen.

Kortom

De meeste AI-chatproducten behandelen je uploads als wegwerpcontext in een gesprek. mintbot behandelt ze als jouw gegevens — opgeslagen op je VPS, in jouw bezit en op verzoek omgezet in precies de vorm die het model op dat moment nodig heeft. Veel van de interessantere mogelijkheden van mintbot zijn op dit fundament gebouwd.