Hoe mintbot bestanden behandelt¶
Wanneer je een foto, document, spraakmemo, spreadsheet, screenshot of PDF naar je mintbot-agent stuurt — via Telegram, het webpaneel of de API — dan passeert dat bestand niet via mintbots centrale infrastructuur op weg naar het taalmodel. Het komt direct binnen op de eigen VPS van je agent, blijft daar zo lang als je wilt, en het LLM krijgt er een voor zichzelf geoptimaliseerde kopie van.
Het is een stille designkeuze met luide gevolgen. Het is de moeite waard om dit uit te spellen, want het is een van de grootste plekken waar mintbot afwijkt van consumenten-LLM-chat.
De flow van begin tot eind¶
-
Upload komt aan op de agent-VPS. Een foto vanuit Telegram, een PDF die in het webpaneel wordt gesleept, een spraakmemo, een screenshot dat in de chat wordt geplakt. De lokale API van de agent neemt de bytes aan, snuffelt aan de magic header om uit te vinden wat voor bestand het werkelijk is (telefoons en browsers labelen verbazingwekkend vaak verkeerd), hasht het met SHA-256 en schrijft het naar
/var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext>op de eigen VPS van je agent. In de lokale catalogus komt een rij met bron (telegram / panel / api), uploader-ID, MIME-type en originele bestandsnaam. -
Het origineel is heilig. Vanaf dit punt verandert niets binnen mintbot het opgeslagen bestand ooit nog. Adapters die het voor het LLM klaarmaken geven alleen werkkopieën uit — verkleinde JPEG's, omgezette tekst, geëxtraheerde thumbnails. Het byte-voor-byte origineel blijft op schijf staan totdat jij het verwijdert via de bestandsbeheerder van de agent. Er is geen centrale opslag, geen retentietimer, geen lekkage tussen agenten: elke agent-VPS kent alleen de uploads van zijn eigen eigenaar.
-
Het model krijgt een LLM-geoptimaliseerde versie. Wanneer de agent besluit het bestand aan het LLM te laten zien, kiest een kleine dispatcher op basis van MIME-type en extensie de juiste adapter, en de adapter geeft contentblokken uit die het model kan lezen:
Adapter Verwerkt Output Image JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF en alles wat Pillow verder kan openen Geschaald naar 1568 px lange zijde, hergecodeerd als JPEG q85, base64-inline in de modelcontext PDF .pdf≤ 32 MBBase64-inline als native PDF (Anthropic-modellen lezen het direct) Text .md,.csv,.json,.yaml, broncode (.py,.js,.ts,.go,.rs, …), logs, diffsUTF-8 gedecodeerd (latin-1 als fallback), inline als tekst tot een groottelimiet Audio .mp3,.ogg,.opus,.m4a,.wav,.flacTelegram-spraakmemo's worden al inline getranscribeerd door de bot; directe uploads krijgen voorlopig een placeholder, met Whisper STT in een volgende golf Video .mp4,.mov,.webm,.mkvVoorlopig een placeholder; ffmpeg-keyframe + audio-transcriptie volgen in een latere golf Office docs .docx,.xlsx,.pptx,.odt,.ods,.odpVoorlopig een placeholder; native tekstextractie (python-docx / openpyxl / python-pptx) volgt in een latere golf Unknown Al het overige Tekstplaceholder: "de gebruiker heeft een <mime>-bestand bijgevoegd, het staat op schijf onder upload-ID<id>" — zodat het model in elk geval iets kan zeggen over wat er gestuurd isElke transformatie wordt naast het origineel gecached als
<sha256>.cache/v<N>.json, zodat het laden de tweede keer dat het model dat bestand nodig heeft direct gaat. Het verhogen van de adapterversie invalideert de cache automatisch. -
Geen verlopende URL's in de modelcontext. Wanneer een afbeelding of PDF naar het LLM gaat, wordt die in dezelfde beurt base64-inline meegegeven — geen URL die later 404 kan opleveren, geen ondertekende link met timer. Bij grotere bestanden 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— afgeschermd door het paneeltoken van je eigen agent, geldig zolang het bestand op schijf staat.
Waarom dit beter is dan consumenten-LLM-chat¶
Wanneer je een foto naar ChatGPT of een PDF naar Claude.ai uploadt, gaat het bestand naar de opslag van de provider, gekoppeld aan dat gesprek, en bepaalt het retentiebeleid van de provider wanneer het verdwijnt. Voorbij een bepaalde leeftijd is het bestand weg, ook al kun je het gesprek waarin het leefde nog steeds zien. Wisselen van provider betekent opnieuw beginnen.
Een veelvoorkomende Telegram-botvalkuil maakt het contrast concreet. Telegram zelf bewaart voor elke foto een permanente file_id, maar third-party bots die een Telegram-file_id ophalen, krijgen een tijdelijke URL die na 24 uur verloopt. Oudere bots die naar de foto van gisteren verwijzen serveren een 404. Mintbot lost dit in één keer op: de eerste keer dat hij een Telegram-bestand ziet, haalt hij de bytes opnieuw op via de eeuwig geldige file_id en kopieert ze naar het archief van jouw agent. Vanaf dat moment is de foto van jou.
Uit dit ontwerp volgen drie dingen:
- Bestanden zijn van jou, niet van de LLM-provider. Wissel volgende maand van Claude naar GPT-5 en je bestandsgeschiedenis komt onaangetast mee, omdat hij op jouw VPS staat — niet in de opslag van een leverancier.
- Je kunt het later opnieuw vragen. "Drie maanden geleden heb je voor mij een contract geanalyseerd — kun je het vergelijken met dit nieuwe concept?" werkt, omdat het origineel nog op schijf staat. In consumenten-chat is het oudere bestand meestal verdwenen.
- Het model krijgt altijd de versie die het het beste aankan. Visiemodellen krijgen de geschaalde JPEG, tekstlezers krijgen UTF-8, PDF-lezers krijgen native PDF. Telefoons kunnen HEIC uploaden en het werkt gewoon — Pillows HEIF-plugin wordt bij start geladen, en de magic-byte-sniffer vangt telefoons op die de upload als
application/octet-streamverkeerd labelen.
Waar je je bestanden beheert¶
Het webpaneel van de agent heeft een bestandsbeheerder in de topbar. Het bladert door de volledige agent-VPS, en het uploadarchief in /var/lib/mintbot-agent/uploads/ is het deel dat door je gesprekken wordt gevuld. Vanaf daar kun je:
- Geüploade bestanden hernoemen, verwijderen of verplaatsen
- Bladeren op datum, bron of bestandsnaam
- Nieuwe uploads via drag-and-drop toevoegen (chunked, ondersteunt bestanden van meerdere gigabytes)
- Kleine tekstbestanden inline bewerken
Een bestand verwijderen uit het paneel haalt zowel de blob als de catalogusrij weg. De agent kan het dan niet meer aan het LLM laten zien. Dat is wat het origineel "van jou" maakt: jij bent de enige met verwijderingsrechten.
Kort en goed¶
De meeste LLM-chatproducten behandelen je uploads als vluchtige gesprekscontext. Mintbot behandelt ze als jouw data — opgeslagen op jouw VPS, eigendom van jou, op verzoek omgezet naar precies de vorm die het model op dat moment het best kan gebruiken. Veel van de interessantere mogelijkheden van mintbot rusten op dit fundament.