Instructions to use caid-technologies/parti-vision with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use caid-technologies/parti-vision with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="caid-technologies/parti-vision") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("caid-technologies/parti-vision") model = AutoModelForMultimodalLM.from_pretrained("caid-technologies/parti-vision") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use caid-technologies/parti-vision with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "caid-technologies/parti-vision" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "caid-technologies/parti-vision", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/caid-technologies/parti-vision
- SGLang
How to use caid-technologies/parti-vision with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "caid-technologies/parti-vision" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "caid-technologies/parti-vision", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "caid-technologies/parti-vision" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "caid-technologies/parti-vision", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Unsloth Studio
How to use caid-technologies/parti-vision with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for caid-technologies/parti-vision to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for caid-technologies/parti-vision to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for caid-technologies/parti-vision to start chatting
Load model with FastModel
pip install unsloth from unsloth import FastModel model, tokenizer = FastModel.from_pretrained( model_name="caid-technologies/parti-vision", max_seq_length=2048, ) - Docker Model Runner
How to use caid-technologies/parti-vision with Docker Model Runner:
docker model run hf.co/caid-technologies/parti-vision
Parti-Vision Base — Qwen3.5-9B
Parti-Vision turns a hardware idea — a sentence, a short brief, even a sketch — into a complete build blueprint.
Tell it what you want to build — "a USB-powered desk lamp with touch dimming" — and optionally hand it a short description document and/or a concept image (a hand-drawn sketch or a product render). It gives back one structured blueprint: the parts list, a pin-level wiring map, step-by-step build instructions, costs, and a description of how the finished product should look. Everything comes out as one clean JSON object that an app can read and build on.
This is the all-in-one model — it runs on its own, no add-ons needed.
Early research preview. Great for drafting and exploring ideas — not a replacement for real engineering, CAD software, or safety review.
What it can do
Give it a hardware idea (and optionally a brief and/or a picture) and it produces one complete project blueprint containing:
- 📋 a parts list (components) with roles and key specs
- 🔌 a pin-level wiring map — which pin connects to which, net by net
- 🛠️ ordered build instructions, from fabrication through assembly and testing
- 💲 a sourcing table with per-part costs that add up to a stated total
- 🎨 an appearance spec plus a ready-to-use image-generation prompt for concept renders
- 🖼️ and it can read images: show it a napkin sketch or a product render and it designs to match
Unlike a chat model, it answers with the whole plan at once — a single JSON object with ten
sections (project, requirements, components, relationships, circuit, fabrication, instructions, appearance, image_generation_prompt, sourcing).
What you can give it
✍️ A plain-English request (always) — one or two sentences describing what you want to build.
📄 A short description document (optional) — plain text or Markdown (a design brief, notes, a requirements list). The model can't open files itself: paste the document's text into the user message. It was trained with the document wrapped in markers, so use the same shape:
<your request> --- ATTACHED DOCUMENT: brief.md --- <the document text> --- END DOCUMENT ---🖼️ One concept image (optional) — a hand-drawn sketch or a product render, passed as a regular vision input. Training images were PNGs; any format your image loader opens (PNG, JPEG, WebP, …) works, since it's decoded to pixels before the model sees it. One image per request is what it was trained on.
Any combination works — prompt alone, prompt + document, prompt + image, or all three (the strongest setup in our testing). PDFs, CAD files, and spreadsheets aren't supported directly — convert them to text or an image first.
What it's good for — and not
✅ Good for: brainstorming maker/electronics products, turning a rough idea (or a sketch) into an organized starting plan, and powering apps that need machine-readable project plans.
🚫 Not for: final engineering decisions, real CAD models, electrical safety, or anything safety-critical. Treat the output as a helpful first draft to review, not a finished design.
Try it
The model answers in JSON directly — no reasoning preamble to strip. (It ships a chat
template that defaults to no-think; pass enable_thinking=True only if you deliberately want
a reasoning trace.)
from unsloth import FastVisionModel
REPO = "caid-technologies/parti-vision"
model, tok = FastVisionModel.from_pretrained(REPO, load_in_4bit=False)
FastVisionModel.for_inference(model)
SYSTEM_PROMPT = (
"You design maker/electronics products. Reply with one JSON object with exactly these "
"10 keys: project, requirements, components, relationships, circuit, fabrication, "
"instructions, appearance, image_generation_prompt, sourcing. Output only the JSON."
)
messages = [
{"role": "system", "content": [{"type": "text", "text": SYSTEM_PROMPT}]},
{"role": "user", "content": [{"type": "text", "text": "Design a USB desk lamp with touch dimming."}]},
]
text = tok.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
inputs = tok(text=text, return_tensors="pt").to("cuda")
out = model.generate(**inputs, max_new_tokens=13000, do_sample=False, repetition_penalty=1.1)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
💡 Tip: keep do_sample=False (greedy decoding), keep max_new_tokens high (≥ 13,000 —
blueprints are long, and most parse failures are just plans cut off mid-sentence), and keep
repetition_penalty=1.1. To include an image, add
{"type": "image", "image": your_image} to the user content and pass images= to the tokenizer.
🚀 Serving it for real? Run it under vLLM with structured output (guided_json
constrained to the ten-key blueprint schema). That's the intended production path — it takes
valid-blueprint rates on unseen prompts from 61% to **97%** (see below). The bundled chat
template carries over to vLLM automatically; if you override it, re-add
chat_template_kwargs={"enable_thinking": false}.
What it learned from
It was trained on 150 synthetic maker/electronics products — desk gadgets, lab tools, smart-home devices, audio gear and more, weighted toward hobbyist electronics. Every training record was machine-checked before inclusion: the circuit's pins had to exist on the named parts, the sourcing table had to add up, and the build steps had to come in a sensible order.
Each product appears in four flavors — prompt only, prompt + brief, prompt + sketch, and prompt + brief + render — which is how the model learned to read documents and look at concept images, not just react to bare prompts.
Good to know (limitations)
- English prompts, maker/electronics domain. Off-topic requests still tend to get a blueprint rather than a refusal.
- It proposes designs; it doesn't verify them. The plans are plausible engineering, not tested builds — review before you solder.
- Roughly half of outputs have at least one deep design slip (a pin on the wrong net, costs that don't quite add up, a misordered step). Treat every blueprint as a draft and re-validate it in your app.
- Very long plans can get cut off at the token cap — raise
max_new_tokensand keep the repetition penalty on. - Contradictory or physically impossible requests can produce confidently wrong blueprints.
How well it works
We tested it on 60 held-out examples (15 products it never saw in training × 4 input flavors) plus 42 fresh out-of-distribution prompts, scoring every output against the real blueprint schema and semantic design checks. How often it produced a valid blueprint:
| How you run it | In-distribution | Unseen realistic prompts |
|---|---|---|
| 📦 Plain (free) decoding | ~67% | ~61% |
✅ With guided_json (recommended) |
~83% | ~97% |
More context helps: the strongest input flavor (prompt + brief + render image) reached ~73% valid under plain decoding, with ~93% fidelity to what the prompt asked for. The deeper design checks (correct pins, costs that add up, ordered steps) pass on ~40–48% of outputs — which is why re-validating and regenerating on failure is part of the intended workflow. For comparison, the stock base model produced a valid blueprint 0% of the time.
Technical details (for ML folks)
Base model:
Qwen/Qwen3.5-9B(Apache-2.0); this repo is the fine-tune merged to 16-bit (standalone, no adapter needed).Method: LoRA with Unsloth (r=16, α=16, bf16) over language attention+MLP layers, vision encoder frozen, then merged.
Training: 3 epochs, max_seq_len 16384, on 150 schema- and gate-validated synthetic records × 4 input variants. Records authored by Claude Sonnet 5 and DeepSeek-V4-Pro; concept images (render + hand-drawn sketch per record) by gpt-image-1.
Chat template: patched to default to
enable_thinking=Falseso the model emits JSON directly under transformers, Unsloth, and vLLM alike.Evaluation (vLLM; strict parse = raw
json.loads, no salvage; schema-valid = full pydanticProductvalidation; gates = pin existence, sourcing arithmetic, phase order):In-distribution, 60 held-out examples:
Metric Fine-tuned — free Fine-tuned — guided_jsonBase Qwen3.5-9B Strict JSON parse 0.85 0.83 0.97 Schema-valid ( Product)0.67 0.83 0.00 Gates-clean 0.40 0.48 0.00 Prompt-echo fidelity 0.82 0.82 0.00 Out-of-distribution, 42 fresh prompts (free decoding):
kind n parse schema realistic paraphrase 10 0.90 0.70 new domain 10 0.90 0.70 vague / underspecified 5 0.80 0.40 image-grounded 6 0.83 0.50 adversarial 7 0.43 0.29 off-task 4 1.00 0.75 Across realistic OOD rows, schema-valid is 0.61 free / 0.97 under
guided_json. Sampling robustness attemperature=0.7(30 generations, 3 seeds): strict parse 0.97, schema-valid 0.57. Parse failures are overwhelmingly truncation at the 13k-token cap (10/126 free generations; 0 thinking-leaks, 0 markdown fences, 1 trailing-data).Inference:
do_sample=False,repetition_penalty≈1.1,max_new_tokens≥13000; serve with vLLMguided_jsonfor production.
@misc{parti_vision_base,
title = {Parti-Vision Base: Qwen3.5-9B for multimodal hardware blueprint generation},
author = {Caid Technologies},
year = {2026},
howpublished = {\url{https://huggingface.co/caid-technologies}}
}
Built with Unsloth and 🤗 Transformers / PEFT / TRL.
- Downloads last month
- -
docker model run hf.co/caid-technologies/parti-vision