Drop the heavy transformers/torch/bitsandbytes inference path in favour of
llama.cpp llama-server serving a Qwen2-VL-2B GGUF. The service becomes a thin
FastAPI gateway that forwards to the OpenAI-compatible /v1/chat/completions API.
- Add GBNF grammar (grammar.py) that enforces the standard JSON at token
sampling level, making free-text/markdown output impossible
- model.py is now an HTTP client (LlamaServer) over llama-server; no torch
- server.py/__main__.py talk to VISION_PREFILTER_BACKEND (default :8080)
- requirements.txt now only fastapi/uvicorn/pydantic/requests
- Launchers start llama-server + gateway; add download_model.sh (Q4_K_M GGUF)
- README rewritten for the llama.cpp deployment; tests still pass