Instructions to use ConwayResearch/Underdog-Poodle-4B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ConwayResearch/Underdog-Poodle-4B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="ConwayResearch/Underdog-Poodle-4B") 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)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("ConwayResearch/Underdog-Poodle-4B") model = AutoModelForMultimodalLM.from_pretrained("ConwayResearch/Underdog-Poodle-4B", device_map="auto") 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=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use ConwayResearch/Underdog-Poodle-4B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "ConwayResearch/Underdog-Poodle-4B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ConwayResearch/Underdog-Poodle-4B", "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/ConwayResearch/Underdog-Poodle-4B
- SGLang
How to use ConwayResearch/Underdog-Poodle-4B 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 "ConwayResearch/Underdog-Poodle-4B" \ --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": "ConwayResearch/Underdog-Poodle-4B", "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 "ConwayResearch/Underdog-Poodle-4B" \ --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": "ConwayResearch/Underdog-Poodle-4B", "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" } } ] } ] }' - Docker Model Runner
How to use ConwayResearch/Underdog-Poodle-4B with Docker Model Runner:
docker model run hf.co/ConwayResearch/Underdog-Poodle-4B
Underdog Poodle 4B
Underdog Poodle 4B is Qwen3.5-4B with post training for the agent work Underdog does: calling tools, deciding when not to call one, following instructions, and talking a user through a task. It runs with thinking on. The full write-up is at underdog.ai/poodle.
Against Qwen3.5-4B measured in the same harness with the same settings, it scores higher on every benchmark we track: BFCL-V4 (65.3 vs 56.8), BFCL-120 (80.6 vs 77.5), IFEval (85.4 vs 60.6), IFBench (38.7 vs 33.3), parallel calls (77 vs 69), WebWalkerQA (31.1 vs 30.4) and τ³-bench (60.7 vs 57.9 averaged over four domains).
Evaluation
All numbers below come from one harness, run on Qwen3.5-4B and on this model with identical settings: thinking on, temperature 0.6, top_p 0.95, top_k 20, no presence penalty, and at most 32,768 output tokens. An answer that runs past the budget counts as wrong. We report these settings instead of Qwen's card settings (temperature 1.0 with a presence penalty of 1.5), so the numbers here are not comparable with Qwen's published figures.
| Benchmark | Qwen3.5-4B | Underdog Poodle 4B |
|---|---|---|
| BFCL-V4, official harness | 56.8 | 65.3 |
| BFCL-120 (frozen 120-case subset of BFCL, 3 seeds) | 77.5 | 80.6 |
| IFEval (prompt-level, loose) | 60.6 | 85.4 |
| IFBench (prompt-level, loose) | 33.3 | 38.7 |
| Parallel calls (100 cases) | 69 | 77 |
| WebWalkerQA (150 questions, LLM judge) | 30.4 | 31.1 |
| τ³-bench average (4 domains) | 57.9 | 60.7 |
BFCL-V4 by category:
| Category | Qwen3.5-4B | Underdog Poodle 4B |
|---|---|---|
| Non-live AST | 85.6 | 86.1 |
| Live | 81.0 | 79.1 |
| Multi-turn | 77.8 | 82.3 |
| Web search | 14.0 | 30.5 |
| Memory | 29.3 | 48.6 |
| Relevance detection | 87.5 | 81.3 |
| Irrelevance detection | 81.4 | 82.6 |
τ³-bench runs 2 trials per task with a 131,072-token context. The user simulator and the assertion judge are GPT-5.4 mini, the τ³ package defaults. An episode that fails to produce an official reward counts as a failure for both models.
BFCL-V4 uses the official prompts, checkers and score sheet. The one change is the web-search backend: searches go through OpenRouter's web plugin instead of SerpAPI, and every result is cached so both models saw the same pages.
The model also finishes far more of its answers inside the token budget. On IFEval, 98% of its answers finish against 63% for Qwen3.5-4B; on IFBench, 79% against 43%.
Use
Tested with vLLM 0.32.0 (Python 3.12, NVIDIA H100). The model uses Qwen3.5's chat template and tool-call format:
pip install vllm==0.32.0
vllm serve ConwayResearch/Underdog-Poodle-4B \
--tool-call-parser qwen3_coder --reasoning-parser qwen3 --enable-auto-tool-choice
Keep thinking on (the default) and use temperature 0.6, top_p 0.95, top_k 20:
curl -s http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "ConwayResearch/Underdog-Poodle-4B",
"messages": [{"role": "user", "content": "Where is my order 48213?"}],
"tools": [{"type": "function", "function": {
"name": "get_order_status",
"description": "Look up the shipping status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"]}
}}],
"temperature": 0.6, "top_p": 0.95, "top_k": 20
}'
License
Apache-2.0, inherited from Qwen3.5-4B. Post training by ConwayResearch; see NOTICE.
- Downloads last month
- 29
