0304464b7d
Third voxtral attempt: image pulled clean (3 min, v0.18.0), entrypoint parsed correctly, vLLM started, but engine init failed two ways: 1. HF rate-limited the irv-ml1 IP (38.120.94.3) during the metadata fetch — 429 Too Many Requests from too many large unauthenticated pulls today (heretic, 27b, fish-s2, fish-s1-mini, voxtral). Added HF_TOKEN env passthrough; user generates a token at https://huggingface.co/settings/tokens and sets VOXTRAL_HF_TOKEN in .env. 2. Voxtral uses Mistral's native model format (params.json + tekken.json tokenizer + consolidated.safetensors single file), NOT HF transformers format (config.json + tokenizer.json + sharded .safetensors). vLLM errored with "ensure presence of params.json for Mistral models." Fix: pass --load-format=mistral --tokenizer-mode=mistral --config-format=mistral to vllm serve. Confirmed by inspecting the Voxtral-4B-TTS-2603 HF tree: 25 files, ships params.json + tekken.json + consolidated.safetensors. Both fixes baked into compose. User needs to drop their HF_TOKEN into .env once and recreate. Side note discovered while debugging: fish-s2 s1-mini variant uses the tiktoken tokenizer format; the wrapper can't load it (errors with "NoneType has no attribute encode" on warmup). So s1-mini isn't a drop-in optimization for s2-pro — different code path needed. Fish back on s2-pro for now.