Alpie Seed Highlights
- Unified vision-language model: text, image, and video input on the Qwen3.5-9B architecture.
- Reasoning and coding: post-trained with supervised fine-tuning and GRPO; supports thinking and non-thinking modes.
- 262K native context for long documents and extended conversations.
- Flexible deployment: FP16 weights plus 2-bit, 3-bit, and 4-bit GGUF builds.
- Open license: Apache 2.0.
Available On
Ollama
Run Alpie Seed directly from the Ollama library:
ollama run 169pi/alpie-seed
Available tags:
Table with columns: Name, Size, Context, Input| Name | Size | Context | Input |
|---|
alpie-seed:latest | 5.6 GB | 256K | Text |
alpie-seed:q2 | 3.8 GB | 256K | Text |
alpie-seed:q3 | 4.6 GB | 256K | Text |
alpie-seed:vision | 6.6 GB | 256K | Text, Image |
To run a specific tag:
ollama run 169pi/alpie-seed:q2ollama run 169pi/alpie-seed:vision
Model Overview
- Type: Causal Language Model with Vision Encoder
- Training Stage: Post-training (SFT + GRPO) on Qwen3.5-9B
- Language Model
- Number of Parameters: 9B
- Hidden Dimension: 4096
- Token Embedding: 248320 (Padded)
- Number of Layers: 32
- Hidden Layout: 8 × (3 × (Gated DeltaNet → FFN) → 1 × (Gated Attention → FFN))
- Gated DeltaNet:
- Number of Linear Attention Heads: 32 for V and 16 for QK
- Head Dimension: 128
- Gated Attention:
- Number of Attention Heads: 16 for Q and 4 for KV
- Head Dimension: 256
- Rotary Position Embedding Dimension: 64
- Feed Forward Network:
- Intermediate Dimension: 12288
- LM Output: 248320 (Padded)
- MTP: trained with multi-steps
- Vision Encoder: 27-layer Vision Transformer
- Context Length: 262,144 tokens
The architecture is retained from Qwen3.5-9B; Alpie Seed's adaptation is carried out through post-training rather than a structural redesign.
Training
Alpie Seed uses a two-stage post-training pipeline.
- Supervised fine-tuning (SFT): a DORA adapter is trained to improve instruction following, response quality, and task performance.
- Group Relative Policy Optimization (GRPO): a trainable DoRA adapter is optimized while the SFT adapter is kept as a frozen reference policy. The GRPO stage uses a 4-bit NF4 base with double quantization and BF16 computation, and the trained adapter is merged into the base model at its original precision for release.
Benchmark Results
Evaluation Settings Note: All benchmarks were evaluated with extended thinking enabled (enable_thinking: true), a maximum generation length of max_tokens: 65536, and temperature: 0.0.
Alpie Seed scores are from the FP16 model and do not apply to the 2-bit, 3-bit, or 4-bit variants. Bold indicates the best score in each row. Comparison-model scores are taken from published model cards and reports (including the Qwen3.5-9B model card).
Language
Vision Language
- SWE-Bench Verified: resolved rate using Mini-SWE-agent, with retries disabled.
- Comparison-model scores were not re-run by 169Pi, and harnesses, prompts, and benchmark versions differ, so cross-model comparisons are indicative rather than strictly like-for-like. Scores vary with dataset versions, prompts, evaluation harnesses, and inference settings.
- Empty cells (--) indicate scores not yet available or not applicable.
- Sources: Ministral 3 8B model card, NVIDIA Nemotron 3.5 Lightning evaluation, Qwen3.5-9B model card, Gemma 4 model card, GPT-OSS evaluation, and Sarvam-30B model card.
Quickstart
Install dependencies
Alpie Seed support requires a recent Transformers release (Transformers 5 or later).
pip install -U "transformers>=5.2.0" torch torchvision pillow accelerate
Serve with vLLM (OpenAI-compatible API)
Start the standard Alpie Seed 9B server:
vllm serve 169Pi/Alpie_seed \ --port 8000 \ --max-model-len 262144 \ --reasoning-parser qwen3
To enable automatic tool-call parsing, use this command instead:
vllm serve 169Pi/Alpie_seed \ --port 8000 \ --max-model-len 262144 \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder
The API is available at http://localhost:8000/v1. The tool-calling options enable vLLM to parse model-generated tool calls; your application is still responsible for executing the requested tools and returning their results.
The following examples load the full vision-language checkpoint using AutoModelForImageTextToText and AutoProcessor. They retain the model's multimodal architecture. The enable_thinking argument is passed to the chat template to select the response mode.
1. Thinking mode (enable_thinking=True)
import torchfrom transformers import AutoModelForImageTextToText, AutoProcessor MODEL_ID = "169Pi/Alpie_seed" processor = AutoProcessor.from_pretrained(MODEL_ID)model = AutoModelForImageTextToText.from_pretrained( MODEL_ID, torch_dtype="auto", device_map="auto",)model.eval() messages = [ { "role": "user", "content": [ {"type": "text", "text": "Explain why the sky appears blue."} ], }] inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, enable_thinking=True, return_dict=True, return_tensors="pt",).to(model.device) with torch.inference_mode(): output_ids = model.generate( **inputs, max_new_tokens=4096, do_sample=True, temperature=0.7, top_p=0.8, ) new_tokens = output_ids[0, inputs["input_ids"].shape[1]:]response = processor.decode(new_tokens, skip_special_tokens=True)print(response)
2. Non-thinking mode (enable_thinking=False)
import torchfrom transformers import AutoModelForImageTextToText, AutoProcessor MODEL_ID = "169Pi/Alpie_seed" processor = AutoProcessor.from_pretrained(MODEL_ID)model = AutoModelForImageTextToText.from_pretrained( MODEL_ID, torch_dtype="auto", device_map="auto",)model.eval() messages = [ { "role": "user", "content": [ {"type": "text", "text": "Explain why the sky appears blue in two sentences."} ], }] inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, enable_thinking=False, return_dict=True, return_tensors="pt",).to(model.device) with torch.inference_mode(): output_ids = model.generate( **inputs, max_new_tokens=512, do_sample=True, temperature=0.7, top_p=0.8, ) new_tokens = output_ids[0, inputs["input_ids"].shape[1]:]response = processor.decode(new_tokens, skip_special_tokens=True)print(response)
Transformers can format the available tool definitions into the prompt. The model generates a tool-call request; your application must parse the request, execute the corresponding function, append the tool result, and ask the model to continue. This example demonstrates generating and inspecting a tool call; it does not execute external tools automatically.
import jsonimport torchfrom transformers import AutoModelForImageTextToText, AutoProcessor MODEL_ID = "169Pi/Alpie_seed" processor = AutoProcessor.from_pretrained(MODEL_ID)model = AutoModelForImageTextToText.from_pretrained( MODEL_ID, torch_dtype="auto", device_map="auto",)model.eval() tools = [ { "type": "function", "function": { "name": "get_weather", "description": "Get the current weather for a city.", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "The city to check.", } }, "required": ["city"], }, }, }] messages = [ { "role": "user", "content": [ {"type": "text", "text": "What is the weather like in Patna?"} ], }] inputs = processor.apply_chat_template( messages, tools=tools, tokenize=True, add_generation_prompt=True, enable_thinking=True, return_dict=True, return_tensors="pt",).to(model.device) with torch.inference_mode(): output_ids = model.generate( **inputs, max_new_tokens=1024, do_sample=True, temperature=0.7, top_p=0.8, ) new_tokens = output_ids[0, inputs["input_ids"].shape[1]:]generated_text = processor.decode(new_tokens, skip_special_tokens=False)print("Model output:")print(generated_text) # Tool execution is application-side. Inspect the generated tool-call# structure, validate its arguments, and dispatch only to tools you trust.
For image or video inputs, provide the corresponding image/video content items in the user message and use the same AutoProcessor + AutoModelForImageTextToText loading pattern. See the upstream Qwen3.5 documentation for multimodal message examples and framework-specific details.
Citation
If you use Alpie Seed 9B in your work, please cite:
@misc{alpie_seed_9b_2026, title = {Alpie Seed 9B}, author = {{169Pi AI}}, year = {2026}, howpublished = {\url{https://huggingface.co/169Pi/Alpie_seed}}}