.png&w=828&q=75)
Two containers from one codebase, both running Qwen3-VL-8B on the AMD GPU, built on the mandated ROCm base image. In each, start.sh launches a server that loads the model once and keeps it on the GPU. app.py is a thin client over a unix socket, so no image or question pays for loading the model. Match 2 (OCR) reads the plate number or sign text from one PNG, JPEG or TIFF image. One prompt spells out the transcription rules: the plate number without the state name or slogans, the province character kept on Chinese plates, every word of a sign from top to bottom, and a bare number with no unit. A small clean-up step removes labels, quotes and line breaks. Match 3 (RAG) answers questions about a folder of mixed company files and cites only the files the answer came from. The index pass reads PDF, Word (including tables), Excel (every sheet), CSV, logs, Python and images, and the same model reads text printed in images and scanned pages. Locked, encrypted and unknown files are skipped one at a time. A small corpus goes to the model whole. A larger one goes through BM25 plus ID linking, so a ticket number found in a log pulls in the row it points to. The model returns an answer and a quote from each file it used. Plain code then checks every quote against its file, refuses if the answer is not in a cited file, and keeps a file only if it hands an identifier to the next step. Questions the files cannot answer get an empty answer and no citations. Torch is pinned to the ROCm build and checked during the build, and the weights ship inside the images, so nothing is downloaded at run time.
1 Dec 2026