If your "vision model" is a text-only LLM on the same port, you do not have eyes. You have a chatbot with confidence.
Split the specialists
| Role | Surface | Job | |---|---|---| | Text brain | local reasoning port | decide, plan, score | | Vision | MLX vision port | caption, tag, age-gate style JSON | | Embeddings | small sidecar | search vectors only |
Text decides. Specialists sense.
Structured gates
Age-gate style checks should return JSON like:
{ "apparent_age_range": "25-34", "confidence": 0.91 }
Not a free-form essay. Downstream code needs fields, not vibes.
Ops lessons
- launchd KeepAlive so a kill/OOM comes back without a human SSH ritual
- Watch reclaimable free memory, not folklore about "unused RAM"
- Vision-only endpoints should 400 on pure text chat that pretends to see an image that was never sent
Safety
Local vision is for compliance and tagging, not for bypassing the law. Never put underage content through any pipeline.
Related
- MLX stack
- Local compute map
- $7 notes pack: dajai shop
