Image-Text-to-Text
Transformers
Safetensors
qwen3_5
qwen3.8
multimodal
conversational
Eval Results (legacy)
Instructions to use GestaltLabs/Ornstein3.8-27B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use GestaltLabs/Ornstein3.8-27B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="GestaltLabs/Ornstein3.8-27B") 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("GestaltLabs/Ornstein3.8-27B") model = AutoModelForMultimodalLM.from_pretrained("GestaltLabs/Ornstein3.8-27B", 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 GestaltLabs/Ornstein3.8-27B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "GestaltLabs/Ornstein3.8-27B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "GestaltLabs/Ornstein3.8-27B", "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/GestaltLabs/Ornstein3.8-27B
- SGLang
How to use GestaltLabs/Ornstein3.8-27B 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 "GestaltLabs/Ornstein3.8-27B" \ --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": "GestaltLabs/Ornstein3.8-27B", "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 "GestaltLabs/Ornstein3.8-27B" \ --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": "GestaltLabs/Ornstein3.8-27B", "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 GestaltLabs/Ornstein3.8-27B with Docker Model Runner:
docker model run hf.co/GestaltLabs/Ornstein3.8-27B
Professional card: Fireworks training, Ornstein thinking, RL and energy-based FT roadmap
Browse files
README.md
CHANGED
|
@@ -11,38 +11,42 @@ pipeline_tag: image-text-to-text
|
|
| 11 |
license: apache-2.0
|
| 12 |
---
|
| 13 |
|
|
|
|
|
|
|
| 14 |
# Ornstein3.8-27B
|
| 15 |
|
| 16 |
-
BF16 safetensors
|
| 17 |
|
| 18 |
-
|
| 19 |
|
| 20 |
-
|
| 21 |
|
| 22 |
-
|
| 23 |
|
| 24 |
-
|
| 25 |
|
| 26 |
-
|
| 27 |
|
| 28 |
-
---
|
| 29 |
|
| 30 |
-
## Model
|
| 31 |
|
| 32 |
-
|
| 33 |
-
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
|
|
|
|
|
|
| 42 |
|
| 43 |
## Usage
|
| 44 |
|
| 45 |
-
Requires a
|
| 46 |
|
| 47 |
```python
|
| 48 |
from transformers import AutoProcessor, AutoModelForImageTextToText
|
|
@@ -64,15 +68,15 @@ messages = [
|
|
| 64 |
]
|
| 65 |
inputs = processor.apply_chat_template(
|
| 66 |
messages, add_generation_prompt=True, tokenize=True,
|
| 67 |
-
return_dict=True, return_tensors="pt"
|
| 68 |
).to(model.device)
|
| 69 |
out = model.generate(**inputs, max_new_tokens=256)
|
| 70 |
print(processor.decode(out[0], skip_special_tokens=True))
|
| 71 |
```
|
| 72 |
|
| 73 |
-
Text-only chat
|
| 74 |
|
| 75 |
-
vLLM
|
| 76 |
|
| 77 |
## Files
|
| 78 |
|
|
@@ -82,8 +86,9 @@ vLLM / SGLang: load this repo as a Qwen3.8 27B VLM (`qwen3_5`). Pin a build that
|
|
| 82 |
| `model.safetensors.index.json` | weight map, `total_size` 55562855904 |
|
| 83 |
| `config.json` | `Qwen3_5ForConditionalGeneration` |
|
| 84 |
| `tokenizer.json` / `tokenizer_config.json` / `vocab.json` / `merges.txt` | tokenizer |
|
| 85 |
-
| `chat_template.jinja` | chat
|
| 86 |
| `preprocessor_config.json` / `video_preprocessor_config.json` | image/video processor |
|
|
|
|
| 87 |
|
| 88 |
## Related
|
| 89 |
|
|
@@ -93,4 +98,4 @@ vLLM / SGLang: load this repo as a Qwen3.8 27B VLM (`qwen3_5`). Pin a build that
|
|
| 93 |
|
| 94 |
## License
|
| 95 |
|
| 96 |
-
Apache 2.0
|
|
|
|
| 11 |
license: apache-2.0
|
| 12 |
---
|
| 13 |
|
| 14 |
+

|
| 15 |
+
|
| 16 |
# Ornstein3.8-27B
|
| 17 |
|
| 18 |
+
BF16 safetensors for **Ornstein3.8-27B**, a vision-language fine-tune of [Qwen/Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B). Architecture is `Qwen3_5ForConditionalGeneration`: interleaved linear and full attention (Gated DeltaNet), native image/video, 262K context.
|
| 19 |
|
| 20 |
+
The LoRA was trained on [Fireworks AI](https://fireworks.ai) and merged into the Qwen3.8-27B language stack. Quantized GGUFs (Q8_0, Q6_K, Q4_K_M) and an mmproj are in [GestaltLabs/Ornstein3.8-27B-GGUF](https://huggingface.co/GestaltLabs/Ornstein3.8-27B-GGUF).
|
| 21 |
|
| 22 |
+
## Status
|
| 23 |
|
| 24 |
+
This checkpoint injects **Ornstein thinking** into Qwen3.8-27B. It is an early merge, not a finished quality release.
|
| 25 |
|
| 26 |
+
This card will be updated with formal evaluation as results land. Planned quality work uses **RL environments** and **energy-based fine-tuning**.
|
| 27 |
|
| 28 |
+
## Support this work
|
| 29 |
|
| 30 |
+
I'm a PhD student in visual neuroscience at the University of Toronto. Training and release compute is self-funded (rented H100s and a local DGX Spark). If these artifacts are useful, [Ko-fi](https://ko-fi.com/djlougen) helps keep the experiments running.
|
| 31 |
|
| 32 |
+
## Model details
|
| 33 |
|
| 34 |
+
| | |
|
| 35 |
+
|---|---|
|
| 36 |
+
| Architecture | `Qwen3_5ForConditionalGeneration` |
|
| 37 |
+
| Parameters | ~27B dense |
|
| 38 |
+
| Context | 262,144 tokens |
|
| 39 |
+
| Hidden size / layers | 5120 / 64 |
|
| 40 |
+
| Attention | 24 heads, 4 KV heads, head_dim 256 |
|
| 41 |
+
| MLP intermediate | 17,408 |
|
| 42 |
+
| Vocab | 248,320 |
|
| 43 |
+
| Precision | bfloat16, 11 shards |
|
| 44 |
+
| Vision | SigLIP-style tower, `out_hidden_size` 5120, patch 16 |
|
| 45 |
+
| Post-training | PEFT LoRA rank 32, α 32, trained on [Fireworks AI](https://fireworks.ai); merged into language-model linears only (vision and MTP unchanged) |
|
| 46 |
|
| 47 |
## Usage
|
| 48 |
|
| 49 |
+
Requires a Transformers build with Qwen3.8 / `qwen3_5` support.
|
| 50 |
|
| 51 |
```python
|
| 52 |
from transformers import AutoProcessor, AutoModelForImageTextToText
|
|
|
|
| 68 |
]
|
| 69 |
inputs = processor.apply_chat_template(
|
| 70 |
messages, add_generation_prompt=True, tokenize=True,
|
| 71 |
+
return_dict=True, return_tensors="pt",
|
| 72 |
).to(model.device)
|
| 73 |
out = model.generate(**inputs, max_new_tokens=256)
|
| 74 |
print(processor.decode(out[0], skip_special_tokens=True))
|
| 75 |
```
|
| 76 |
|
| 77 |
+
Text-only chat uses the same template with `{"type": "text", ...}` and no image.
|
| 78 |
|
| 79 |
+
vLLM and SGLang: load this repo as a Qwen3.8 27B VLM (`qwen3_5`). Use a build that already supports that architecture.
|
| 80 |
|
| 81 |
## Files
|
| 82 |
|
|
|
|
| 86 |
| `model.safetensors.index.json` | weight map, `total_size` 55562855904 |
|
| 87 |
| `config.json` | `Qwen3_5ForConditionalGeneration` |
|
| 88 |
| `tokenizer.json` / `tokenizer_config.json` / `vocab.json` / `merges.txt` | tokenizer |
|
| 89 |
+
| `chat_template.jinja` | chat, vision, and tool-call template |
|
| 90 |
| `preprocessor_config.json` / `video_preprocessor_config.json` | image/video processor |
|
| 91 |
+
| `ornstein3.8-27b.jpg` | card banner |
|
| 92 |
|
| 93 |
## Related
|
| 94 |
|
|
|
|
| 98 |
|
| 99 |
## License
|
| 100 |
|
| 101 |
+
Apache 2.0, inherited from the Qwen 3.8 base release.
|