I-skip tungo sa nilalaman

How mintbot handles files

Kapag nagpadala ka ng photo, document, voice note, spreadsheet, screenshot, o PDF sa mintbot agent mo — through Telegram, web panel, o API — hindi dumadaan ang file sa central infrastructure ng mintbot papunta sa language model. Dumidiretso ito sa sariling VPS ng agent mo, nananatili roon hangga't gusto mo, at ang LLM ay nakakakuha ng transformed copy na optimized para dito.

Tahimik na design decision ito na may malalakas na consequences. Worth itong ipaliwanag, dahil isa ito sa mas malalaking punto kung saan naiiba ang mintbot sa consumer LLM chat.

The flow, end to end

  1. Dumarating ang upload sa agent VPS. Photo mula Telegram, PDF na ni-drag sa web panel, voice memo, screenshot na pinaste sa chat. Tinatanggap ng local API ng agent ang bytes, sini-sniff ang magic header para malaman kung anong uri talaga ng file ito (surprisingly madalas mag-mislabel ang phones at browsers), hina-hash ito gamit ang SHA-256, at isinusulat sa /var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext> sa sariling VPS ng agent mo. May row na napupunta sa local catalog kasama ang source (telegram / panel / api), uploader ID, MIME type, at original filename.

  2. Sagrado ang original. Mula rito, walang anumang nasa mintbot ang nagmu-mutate sa stored file. Ang adapters na naghahanda nito para sa LLM ay nag-e-emit lang ng working copies — resized JPEGs, transcoded text, extracted thumbnails. Nananatili sa disk ang byte-for-byte original hanggang i-delete mo ito sa file manager ng agent. Walang central bucket, walang retention timer, walang cross-agent leakage: alam lang ng bawat agent VPS ang uploads ng sarili nitong owner.

  3. Nakakakuha ang model ng LLM-optimized version. Kapag nagdesisyon ang agent na ipakita ang file sa LLM, pumipili ang maliit na dispatcher ng tamang adapter ayon sa MIME type at extension, at nag-e-emit ang adapter ng content blocks na mababasa ng model:

    Adapter Handles Output
    Image JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF, at anumang iba pa na kayang buksan ng Pillow Resized sa 1568 px long edge, re-encoded bilang JPEG q85, base64-inlined sa model context
    PDF .pdf ≤ 32 MB Base64-inlined bilang native PDF (direktang nababasa ito ng Anthropic models)
    Text .md, .csv, .json, .yaml, source code (.py, .js, .ts, .go, .rs, …), logs, diffs UTF-8 decoded (latin-1 fallback), inlined bilang text hanggang sa size cap
    Audio .mp3, .ogg, .opus, .m4a, .wav, .flac Ang Telegram voice notes ay transcribed inline na ng bot; direct uploads currently get a placeholder, with Whisper STT in a follow-up wave
    Video .mp4, .mov, .webm, .mkv Placeholder for now; ffmpeg keyframe + audio transcript extraction lands in a follow-up wave
    Office docs .docx, .xlsx, .pptx, .odt, .ods, .odp Placeholder for now; native text extraction (python-docx / openpyxl / python-pptx) lands in a follow-up wave
    Unknown Anything else Text placeholder: "the user attached a <mime> file, it's preserved on disk at upload ID <id>" — para makapag-reason man lang ang model tungkol sa ipinadala

    Bawat transformation ay naka-cache katabi ng original sa <sha256>.cache/v<N>.json, kaya sa pangalawang beses na kailangan ng model ang file na iyon, instant load na ito. Kapag tinaas ang adapter version, automatic na nai-invalidate ang cache.

  4. Walang expiring URLs sa model context. Kapag pumunta ang image o PDF sa LLM, naka-base64-inline ito sa parehong turn — walang URL na puwedeng mag-404 later, walang signed link na may timer. Para sa mas malalaking files kung saan pointer lang ang kailangan ng model, ang URL ay internal https://agent<id>.<domain>/<panel_token>/api/local/uploads/<upload_id>/raw — gated ng sariling panel token ng agent mo, valid hangga't buhay ang file sa disk.

Why this beats the consumer LLM chat experience

Kapag nag-upload ka ng photo sa ChatGPT o PDF sa Claude.ai, napupunta ang file sa storage ng provider, attached sa conversation na iyon, at retention policy ng provider ang nagdedesisyon kung kailan ito mawawala. Pagkalipas ng certain age, wala na ang file, kahit nakikita mo pa rin ang conversation kung saan ito nakatira. Ang paglipat mula sa isang provider papunta sa iba ay nangangahulugang magsisimula ka ulit.

Isang common Telegram-bot gotcha ang nagpapalinaw sa contrast. Ang Telegram mismo ay nagke-keep ng permanenteng file_id para sa bawat photo, pero ang third-party bots na kumukuha ng Telegram file_id ay nakakakuha ng temporary URL na nag-e-expire pagkatapos ng 24 hours. Ang older bots na nagre-reference sa photo kahapon ay nagseserve ng 404. Inaayos ito ng mintbot once: sa unang beses na makakita ito ng Telegram file, nire-refetch nito ang bytes gamit ang eternally-valid file_id at kinokopya ang mga ito sa archive ng iyong agent. Mula noon, sa iyo na ang photo.

Tatlong bagay ang sumusunod mula sa design na ito:

  • Sa iyo ang files, hindi sa LLM provider. Lumipat ka man mula Claude papuntang GPT-5 next month, kasama mo ang file history mo, untouched, dahil nakaupo ito sa VPS mo — hindi sa bucket ng vendor.
  • Puwede kang magtanong ulit later. "Three months ago you analyzed a contract for me — can you compare it to this new draft?" gumagana, dahil nasa disk pa rin ang original. Sa consumer chat, usually wala na ang mas lumang file.
  • Laging nakukuha ng model ang version na pinakamahusay nitong magagamit. Nakukuha ng vision models ang resized JPEG, text-readers ang UTF-8, PDF-readers ang native PDF. Puwedeng mag-upload ng HEIC ang phones at gagana lang ito — naglo-load ang HEIF plugin ng Pillow sa startup, at nahuhuli ng magic-byte sniffer ang phones na mali ang label sa upload bilang application/octet-stream.

Where to manage your files

May kasamang file manager ang agent web panel sa topbar. Binabrowse nito ang buong agent VPS, at ang upload archive sa /var/lib/mintbot-agent/uploads/ ang parte na pinupuno ng conversations mo. Mula roon, puwede mong:

  • I-rename, i-delete, o i-move ang uploaded files
  • I-browse ang mga ito ayon sa date, source, o filename
  • Mag-drag-drop ng bagong uploads (chunked, kaya walang fixed size limit — puwede kang mag-upload ng very large files, hanggang sa free disk space na mayroon ang VPS mo)
  • Mag-edit ng small text files inline

Dahil chunked ang uploads at dumidiretso sa sarili mong VPS, disk mo lang ang ceiling sa file size — walang cap na imposed ng mintbot. Okay ang multi-gigabyte videos, datasets, o disk images basta may space pa ang drive; kung kapusin ka, puwede mong i-resize ang VPS o mag-clear ng old files mula sa parehong panel.

Ang pag-delete ng file mula sa panel ay nag-aalis ng blob at catalog row. Hindi na ito masu-surface ng agent sa LLM. Iyon ang dahilan kung bakit "sa iyo" ang original: ikaw lang ang party na may delete authority.

Bottom line

Karamihan sa LLM chat products ay tinatrato ang uploads mo bilang ephemeral conversation context. Tinatrato sila ng mintbot bilang data mo — naka-store sa VPS mo, owned by you, format-shifted on demand sa kahit anong shape na kailangan ng model sa turn na iyon. Karamihan sa mas interesting na capabilities ng mintbot ay nakapatong sa foundation na ito.