Gå till innehållet

Hur mintbot hanterar filer

När du skickar ett foto, ett dokument, ett röstmemo, ett kalkylark, en skärmdump eller en PDF till din mintbot-agent — via Telegram, webbpanelen eller API:t — passerar filen inte mintbots centrala infrastruktur på väg till språkmodellen. Den landar direkt på din agents egen VPS, stannar där så länge du vill, och LLM:en får en kopia som är optimerad för den.

Det är ett tyst designval med högljudda konsekvenser. Det är värt att stava ut det, för det är en av de större platser där mintbot skiljer sig från konsument-LLM-chatten.

Flödet från början till slut

  1. Uppladdningen anländer till agentens VPS. Ett foto från Telegram, en PDF som dras in i webbpanelen, ett röstmemo, en skärmdump som klistras in i chatten. Agentens lokala API tar emot byten, sniffar magic-headern för att lista ut vad filen faktiskt är (telefoner och webbläsare märker dem fel överraskande ofta), hashar den med SHA-256 och skriver den till /var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext> på din egen agents VPS. En rad läggs in i en lokal katalog med källa (telegram / panel / api), uppladdar-ID, MIME-typ och ursprungligt filnamn.

  2. Originalet är heligt. Från denna punkt rör ingenting inuti mintbot någonsin den lagrade filen igen. Adaptrar som förbereder den för LLM:en producerar bara arbetskopior — nedskalade JPEG-filer, omkodad text, extraherade miniatyrer. Byte-för-byte-originalet ligger kvar på disken tills du tar bort det via agentens filhanterare. Det finns ingen central bucket, ingen retentionstimer, inget läckage mellan agenter: varje agent-VPS känner bara till sin egen ägares uppladdningar.

  3. Modellen får en LLM-optimerad version. När agenten bestämmer sig för att visa filen för LLM:en plockar en liten dispatcher fram rätt adapter utifrån MIME-typ och filändelse, och adaptern producerar innehållsblock som modellen kan läsa:

    Adapter Hanterar Output
    Image JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF, och allt annat Pillow kan öppna Nedskalad till 1568 px längsta kant, omkodad som JPEG q85, base64-inlinead i modellkontexten
    PDF .pdf ≤ 32 MB Base64-inlinead som native PDF (Anthropic-modeller läser den direkt)
    Text .md, .csv, .json, .yaml, källkod (.py, .js, .ts, .go, .rs, …), loggar, diffs UTF-8-avkodad (latin-1 som fallback), inlinead som text upp till en storleksgräns
    Audio .mp3, .ogg, .opus, .m4a, .wav, .flac Telegrams röstmemon transkriberas redan inline av boten; direktuppladdningar får för närvarande en platshållare, med Whisper STT i en senare våg
    Video .mp4, .mov, .webm, .mkv Platshållare för nu; ffmpeg-keyframe + ljudtranskript-extraktion kommer i en senare våg
    Office docs .docx, .xlsx, .pptx, .odt, .ods, .odp Platshållare för nu; native textextraktion (python-docx / openpyxl / python-pptx) kommer i en senare våg
    Unknown Allt annat Textplatshållare: "användaren bifogade en <mime>-fil, den finns på disken med upload-ID <id>" — så att modellen åtminstone kan resonera om vad som skickades

    Varje transformation cachas bredvid originalet som <sha256>.cache/v<N>.json, så andra gången modellen behöver filen är inläsningen omedelbar. Att höja adapterversionen invaliderar cachen automatiskt.

  4. Inga utgångsbara URL:er i modellkontexten. När en bild eller PDF går till LLM:en bäddas den in base64-inlinead i samma tur — ingen URL som kan bli 404 senare, ingen signerad länk med timer. För större filer där modellen bara behöver en pekare är URL:en en intern https://agent<id>.<domain>/<panel_token>/api/local/uploads/<upload_id>/raw — skyddad av din egen agents panel-token, giltig så länge filen ligger på disken.

Varför detta slår konsument-LLM-chatt-upplevelsen

När du laddar upp ett foto till ChatGPT eller en PDF till Claude.ai går filen till leverantörens lagring, kopplas till den konversationen och leverantörens retentionspolicy avgör när den försvinner. Efter en viss ålder är filen borta, även om du fortfarande kan se konversationen den låg i. Att byta från en leverantör till en annan innebär att börja om.

En vanlig Telegram-botfälla gör kontrasten konkret. Telegram själv behåller ett permanent file_id för varje foto, men tredjeparts-bots som hämtar ett Telegram-file_id får en tillfällig URL som löper ut efter 24 timmar. Äldre bots som refererar till gårdagens foto serverar en 404. Mintbot löser detta en gång för alla: första gången den ser en Telegram-fil hämtar den om byten via det evigt giltiga file_id och kopierar dem till din agents arkiv. Från det ögonblicket är fotot ditt.

Tre saker följer av denna design:

  • Filerna tillhör dig, inte LLM-leverantören. Byter du från Claude till GPT-5 nästa månad följer din filhistorik med, orörd, eftersom den ligger på din VPS — inte i en leverantörs bucket.
  • Du kan fråga igen senare. "För tre månader sedan analyserade du ett kontrakt åt mig — kan du jämföra det med det här nya utkastet?" fungerar, eftersom originalet fortfarande ligger på disken. I konsumentchatten är den äldre filen oftast borta.
  • Modellen får alltid den version den kan använda bäst. Visionmodeller får den nedskalade JPEG:en, textläsare får UTF-8, PDF-läsare får native PDF. Telefoner kan ladda upp HEIC och det bara funkar — Pillows HEIF-plugin laddas vid start, och magic-byte-sniffern fångar telefoner som felmärker uppladdningen som application/octet-stream.

Var du hanterar dina filer

Agentens webbpanel har en filhanterare i topbaren. Den bläddrar genom hela agent-VPS:en, och uppladdningsarkivet i /var/lib/mintbot-agent/uploads/ är den del som dina konversationer fyller på. Därifrån kan du:

  • Döpa om, ta bort eller flytta uppladdade filer
  • Bläddra efter datum, källa eller filnamn
  • Drag-and-droppa nya uppladdningar (chunkade, stödjer filer på flera gigabyte)
  • Redigera små textfiler inline

Att ta bort en fil från panelen tar bort både själva bloben och katalograden. Agenten kan då inte längre visa den för LLM:en. Det är vad som gör originalet "ditt": du är den enda som har raderingsrätt.

Slutsats

De flesta LLM-chattprodukter behandlar dina uppladdningar som flyktig konversationskontext. Mintbot behandlar dem som dina data — lagrade på din VPS, ägda av dig, formatomvandlade på begäran till exakt den form modellen behöver just den turen. Mycket av mintbots mer intressanta förmågor vilar på den här grunden.