Instructions to use surogate/Surogate-3.5-9B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use surogate/Surogate-3.5-9B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="surogate/Surogate-3.5-9B") 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("surogate/Surogate-3.5-9B") model = AutoModelForMultimodalLM.from_pretrained("surogate/Surogate-3.5-9B", 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=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use surogate/Surogate-3.5-9B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "surogate/Surogate-3.5-9B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "surogate/Surogate-3.5-9B", "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/surogate/Surogate-3.5-9B
- SGLang
How to use surogate/Surogate-3.5-9B 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 "surogate/Surogate-3.5-9B" \ --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": "surogate/Surogate-3.5-9B", "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 "surogate/Surogate-3.5-9B" \ --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": "surogate/Surogate-3.5-9B", "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 surogate/Surogate-3.5-9B with Docker Model Runner:
docker model run hf.co/surogate/Surogate-3.5-9B
Surogate-3.5-9B
Surogate-3.5-9B is a Romanian-first bilingual assistant developed by Invergent to be used on the Surogate platform. It is optimized for Romanian instruction following, reasoning, math, and orthographic correctness. English remains supported.
Thinking support: explicit <think>...</think> reasoning traces in both
Romanian and English, alongside direct-answer mode.
Adaptive thinking dynamically adjusts the reasoning trace length to the problem’s complexity, using brief deliberation for simple questions and more extensive reasoning for harder tasks.
The model is compatible with the Qwen3.5 chat template and tooling.
Evaluation
| Benchmark | Surogate-3.5-9B |
|---|---|
| Romanian text quality | |
| Invented word forms / 1k ↓ | 1.051 |
| English leakage / 1k ↓ | 1.016 |
| Missing diacritics / 1k ↓ | 0.193 |
| Knowledge & STEM | |
| RO thinking ARC + MMLU | 83.42 |
| RO thinking ARC | 93.06 |
| RO thinking MMLU | 75.61 |
| MMLU-Pro | ~81.7 |
| MMLU-Redux | ~90.2 |
| GPQA Diamond | ~80.9 |
| SuperGPQA | ~57.6 |
| Instruction following | |
| RO IFEval prompt / instruction strict | 45.37 / 68.72 |
| EN IFEval prompt / instruction strict | 72.46 / 80.34 |
| IFEval | ~79.6 |
| IFBench | ~56.1 |
| MultiChallenge | ~47.4 |
| Math & reasoning | |
| RO GSM8K direct / thinking strict | 75.42 / 73.98 |
| EN GSM8K strict | 91.89 |
| HMMT Feb 25 / Nov 25 | ~82.4 / ~82.1 |
| PolyMATH | ~56.7 |
| Coding & agents | |
| LiveCodeBench v6 | ~64.9 |
| BFCL-V4 | ~65.4 |
| TAU2-Bench | ~78.3 |
| Long context | |
| LongBench v2 | ~54.6 |
| Multilingual & translation | |
| Translation EN to RO / RO to EN (chrF2) | 57.27 / 64.67 |
| WMT24++ | ~71.9 |
| MMMLU | ~80.4 |
| MMLU-ProX | ~75.5 |
| INCLUDE | ~74.8 |
| Global PIQA | ~82.4 |
Plain values are direct measurements. Values marked ~ are estimates derived
from the source foundation model's published results and measured capability
retention.
Bilingual Thinking Example
With enable_thinking=True, the reasoning trace follows the prompt language.
Romanian prompt: Un tren parcurge 180 km în 3 ore. Care este viteza sa medie?
<think>
Viteza medie este distanța împărțită la timp: 180 km / 3 h = 60 km/h.
</think>
Viteza medie este 60 km/h.
English prompt: A train travels 180 km in 3 hours. What is its average speed?
<think>
Average speed is distance divided by time: 180 km / 3 h = 60 km/h.
</think>
The average speed is 60 km/h.
Usage
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "surogate/Surogate-3.5-9B"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
model_id,
device_map="auto",
dtype="auto",
)
messages = [
{"role": "user", "content": "Explică pe scurt de ce cerul este albastru."}
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
enable_thinking=False,
return_tensors="pt",
return_dict=True,
).to(model.device)
output = model.generate(**inputs, max_new_tokens=512)
answer = processor.decode(
output[0][inputs.input_ids.shape[1]:],
skip_special_tokens=False,
)
print(answer)
Set enable_thinking=True for an explicit Romanian reasoning trace. The
shipped sampling defaults are temperature 0.6, top-p 0.95, and top-k 20.
Training Framework
The model was trained using our high-performance Surogate Trainer
Limitations
- Romanian is the primary optimization target.
- English performance may vary by task.
- The model can produce spelling, reasoning, and factual errors.
- Generated facts, calculations, and high-impact advice require independent verification.
Use is subject to the repository's license terms.
Contact Us
Contact us at sales@invergent.ai
- Downloads last month
- 261