--- license: apache-2.0 base_model: Qwen/Qwen3.5-9B pipeline_tag: image-text-to-text library_name: transformers language: - en tags: - qwen3.5 - chat - creative-writing - altworld --- # Altworld Astrea: The New Frontier of Creative Writing **[Try Astrea →](https://chat.altworld.io)** · **[Get an API key](https://altworld.io/developer)** · **[Read the docs →](https://astrea.altworld.io/docs/)** Today, we are introducing **Altworld Astrea** — our first openly released model. Astrea is a compact 9B-parameter model built for one thing: writing that feels written. It sounds human, it keeps the story straight, and it beats bigger models at both. You say something, it answers back. **Altworldbench — overall writing quality.** Elo from 794 blind matchups on our release pool — both rivals are bigger models built for creative writing: | | Elo | |---|---:| | **Astrea 9B** | **1114** | | Rocinante-X 12B | 1097 | | Wayfarer-2 12B | 1045 | Astrea is available today on [chat.altworld.io](https://chat.altworld.io), and the full model weights are right here under Apache-2.0, so anyone can download it and run it locally. An OpenAI-compatible [API](https://astrea.altworld.io/docs/) is open with simple prepaid pricing. ## What makes Astrea different ### It sounds like a person Most AI prose gives itself away in the first paragraph: the stock phrases, the "it wasn't X — it was Y", the em-dash pileups, every reply opening the same way. We count those tells. Astrea scores **2.5** — roughly two and a half tells slipping into every thousand words. Every other model we tested leaves between 8 and 19 per thousand. ### It understands the scene, not just the sentence Judged blind, story against story, Astrea wins on the things that make writing actually work: characters whose motivations hold together, a detail planted early paying off later, the tone you asked for instead of generic fantasy voice. That depth is what puts it ahead of models three billion parameters bigger. ### It stays grounded If the lantern went out, it stays out. If your sword was taken, it doesn't reappear in your hand two scenes later. That's grounding — remembering what's true in the story — and creative models are notoriously bad at it. Astrea keeps **73 of 100** scenes straight. The strongest 12B prose model manages **44**. ### All of it at 9B Every rival on our board is both bigger than Astrea *and* purpose-built for creative writing. Astrea isn't beating generalists — it's beating the specialists, with three billion fewer parameters. That also means it runs faster, serves cheaper, and fits on hardware the bigger models can't. ## Altworldbench We test every release on **Altworldbench**, our own creative-writing benchmark. Same prompts and settings for every model, every story judged blind. **Head-to-head wins** — share of blind matchups Astrea wins: | | wins | |---|---:| | vs Rocinante-X | 52% | | vs Wayfarer-2 | 65% | **AI-sounding writing** — lower is better: | | score | |---|---:| | **Astrea 9B** | **2.5** | | Rocinante-X | 8.1 | | Wayfarer-2 | 8.3 | | Muse | 8.8 | | Violet Lotus | 12.8 | **Keeps the story straight** — out of 100: | | score | |---|---:| | **Astrea 9B** | **73** | | Violet Lotus | 68 | | Muse | 64 | | Wayfarer-2 | 61 | | Rocinante-X | 44 | **Writes the length you ask for** — % of the time: | | % | |---|---:| | **Astrea 9B** | **93** | | Rocinante-X | 88 | | Violet Lotus | 83 | | Wayfarer-2 | 78 | | Muse | 25 | All rivals are open 12B creative-writing models. ## See for yourself Two samples from our test set — unedited, exactly as Astrea wrote them. > **SCENE:** The rescue party returns with empty stretchers and one boot. > **ACTION:** I ask the search captain to tell the families myself. > The captain sets the boot on the table. It is a heavy boot, the kind the > welders wear, with the steel cap dented in and the laces frayed. The > stretchers are empty now, returned to the hangar. The rescue party came > back in four, and one of them did not return. > > The families are waiting in the corridor. They have not eaten in days. > The ration scrip is worthless now that half the station is gone, and the > spin-section has slowed to a crawl. The air smells of recycled carbon and > old sweat. You do not speak of the lost. You do not speak of the dead. > > The captain turns to you. He does not speak. The boot is on the table. He > steps back. > > You stand. You take the boot. You walk into the corridor. The families > look at you. There is nothing to say. You set the boot on the floor and > say, "Your children did not come back." > **SCENE:** Your partner swore your cargo of walrus ivory to two different > buyers. > **ACTION:** I go to the lesser buyer first and offer him the truth and a > discount. > The lesser buyer squints at you through a greasy half-door in Uppsala's > timber shed. The air smells of pine pitch and old fish. > > He does not lie. The other party is already buying that ivory. Three > measures from Helsingjar, not yours. You tell him the truth, offer him a > discount of two dirhams. He laughs, spits. "The other man has my seal. He > paid me in hacksilver and a vow over the sacred waters. You offer scraps, > and I must burn them for luck." > > He turns away. The floorboards are wet. Frost lies thin on Lake Mälaren > beyond the sheds, and the ice does not hold for a barge. The cargo > remains in the gloom: twenty tusks, the colour of a seal's eye, unsworn > to you now. ## Availability - **Talk to Astrea** — chat with it now at [chat.altworld.io](https://chat.altworld.io) — no account needed for your first turns. - **Build with the API** — an OpenAI-compatible endpoint at `api.altworld.io` — create a key and load credits at [altworld.io/developer](https://altworld.io/developer), then [start in the docs](https://astrea.altworld.io/docs/). - **Play Astrea** — Astrea powers the voices of [Altworld](https://altworld.io), our life simulator and story sandbox. - **Download the weights** — this repository: Apache-2.0, BF16 safetensors. ## Build with the API The Astrea API is **OpenAI-compatible**: if your code already talks to an OpenAI-style endpoint, point it at our base URL, swap the model name, and it works — streaming included. ```bash curl https://api.altworld.io/v1/chat/completions \ -H "Authorization: Bearer $ASTREA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "astrea", "messages": [{"role": "user", "content": "Open a story in a lighthouse, first person, no cliches."}], "stream": true }' ``` ## Model details Altworld Astrea (release name Astrea-R8-Chat-9B) was trained on top of the Qwen3.5-9B base model using multi-round LoRA supervised fine-tuning, alternating conversational and narrative rounds and checking every round against Altworldbench. The released checkpoint is the merged BF16 model. The chat template works bare: no system prompt, no flags, it just answers — with no visible reasoning block. Explicit thinking is available per-request with `enable_thinking=True`. Recommended sampling: ```json "temperature": 0.8, "min_p": 0.025, "repetition_penalty": 1.08 ``` Use `temperature 0.2` for factual chat. ## Limitations - Like any compact model, Astrea can miss nuance or state things confidently and wrongly. Verify anything high-stakes independently. - English dominates its training and evaluation. Other languages will work, but with weaker guarantees. - This release is text-first: the architecture inherits vision support, but visual behavior was not part of the release evaluation. - Astrea is not certified for medical, legal, financial, or other high-stakes use. We plan to keep improving and openly releasing Astrea models — tell us what to fix. The fastest way to reach us is the Altworld Discord, or open a Discussion on this repository. --- ## The fine print **Evaluation protocol.** The pooled Elo is 1113.7 with a 95% bootstrap interval of 1089.1–1140.9 on a frozen seven-model pool (794 comparisons for Astrea's entry). The interval overlaps Astrea R8 and Rocinante-X-12B-v1, so the supported claim is #1 on point estimate and statistical parity with the top cluster — not a statistically separated win. Pairwise judgments were made blind by GLM-5p1 and DeepSeek-V4-Flash, with Kimi-K2.6 adjudicating disagreements; grounding, slop, length/POV/tense, and bare-chat checks combine deterministic rules with LLM judging. Separately from the narrative pool: 92.27% pass on 207 held-out bare-chat prompts, 0.00% accidental fiction, 20/20 on unseen identity paraphrases. One constructed multi-turn memory probe answered indirectly at temperature 0.2 while fine at 0.8 — test your own dialogue distributions. **Running it locally.** Validated in production on vLLM 0.25 (A40, and 2×RTX 3090 with `--tensor-parallel-size 2` — set `NCCL_P2P_DISABLE=1` on consumer dual-GPU boards): ```bash vllm serve Altworld/Astrea-R8-Chat-9B \ --dtype bfloat16 --max-model-len 32768 --gpu-memory-utilization 0.90 ``` The base architecture natively supports 262k context; the hybrid linear-attention layers keep the KV cache small, so serve what your VRAM affords. With Transformers, load via `AutoProcessor` + `AutoModelForMultimodalLM` and apply the bundled chat template (`enable_thinking` defaults off). An MLX-LM smoke run behaved worse than vLLM at temperature 0.2 despite numerically matched logits — validate your exact engine. GGUF quants are planned; llama.cpp supports the Qwen3.5 family. **Lineage and license.** Base model [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B), Apache-2.0; this derivative is released under the same license — see `NOTICE`. Fine-tuning preference data used gold responses from MIT-licensed open-weight models (GLM-5.2, DeepSeek-V4-Flash) with on-policy rejected sides; no closed-model outputs anywhere. Early-stage data ancestry credits: Athanorlite-DPO (CC-BY-4.0), jondurbin/gutenberg-dpo-v0.1 (CC-BY-4.0), nbeerbower/gutenberg2-dpo and gutenberg-moderne-dpo (Apache-2.0), Pageshift-Entertainment/LongPage, allenai/tulu-3-sft-mixture (ODC-BY, license-filtered), nothingiisreal/Reddit-Dirty-And-WritingPrompts (Apache-2.0, SFW file only). Thanks to the Qwen team for the base model.