Lukack commited on
Commit
08a6713
·
verified ·
1 Parent(s): f60f9a9

Model card: mirror the astrea.altworld.io landing page (Altworldbench, samples, availability) + fine print

Browse files
Files changed (1) hide show
  1. README.md +246 -162
README.md CHANGED
@@ -12,175 +12,259 @@ tags:
12
  - altworld
13
  ---
14
 
15
- # Astrea R8 Chat 9B
16
-
17
- Astrea R8 Chat is Altworld.io's 9B-parameter Qwen3.5 fine-tune for ordinary
18
- conversation, grounded instruction following, and creative prose. It is the
19
- native-chat release of the Astrea R8 line.
20
-
21
- **Try it:** [chat.altworld.io](https://chat.altworld.io) (free daily turns,
22
- no account needed) · [api.altworld.io](https://api.altworld.io)
23
- (OpenAI-compatible API) · [astrea.altworld.io](https://astrea.altworld.io)
24
- (docs and release notes)
25
-
26
- The bundled template is deliberately usable without a system prompt. When
27
- `enable_thinking` is absent or false, it inserts Qwen's closed empty thinking
28
- block and starts the visible answer immediately. Explicit thinking remains
29
- available with `enable_thinking=True`, but the release was evaluated primarily
30
- in non-thinking mode.
31
-
32
- ## Intended use
33
-
34
- - General conversation and practical questions
35
- - Rewriting and instruction-following tasks
36
- - Long-form narrative and creative-writing assistance
37
- - Research on small open chat and creative-writing models
38
-
39
- This release is text-first. It inherits Qwen3.5's multimodal architecture and
40
- processor files, but Astrea's fine-tuning and reported evaluation did not
41
- establish independent vision performance.
42
-
43
- ## Evaluation
44
-
45
- | Metric | Result | Notes |
46
- |---|---:|---|
47
- | Formal pooled narrative Elo | 1113.7 (1089.1–1140.9) | 794 comparisons; 95% bootstrap interval |
48
- | Held-out native-chat pass | 92.27% | 207 bare-chat prompts |
49
- | Ordinary-chat pass | 92.16% | No system prompt |
50
- | Accidental-fiction rate | 0.00% | Held-out chat suite |
51
- | Unseen identity contract | 20/20 | Paraphrases not in identity SFT |
52
- | Grounding | 73.44 | Frozen 50-prompt suite |
53
- | Slop composite | 2.522 | Frozen 120-prompt narrative suite; lower is better |
54
- | Length / POV / tense adherence | 92.50% / 93.33% / 99.17% | Frozen narrative suite |
55
-
56
- The 1113.7 Elo point estimate ranked first in the frozen seven-model pool. Its
57
- confidence interval overlaps Astrea R8 and Rocinante-X-12B-v1, so the supported
58
- claim is **#1 on point estimate and statistical parity with the top cluster**,
59
- not a statistically separated win.
60
-
61
- Generations were judged by a mixture of deterministic checks and LLM judges.
62
- The formal narrative pool used GLM-5p1 and DeepSeek-V4-Flash pairwise judgments,
63
- with Kimi-K2.6 adjudicating disagreements. See the repository release audit for
64
- the exact protocol and frozen artifacts.
65
-
66
- ## Transformers usage
67
-
68
- Use a recent Transformers version with Qwen3.5 support.
69
-
70
- ```python
71
- from transformers import AutoModelForMultimodalLM, AutoProcessor
72
-
73
- model_id = "Altworld/Astrea-R8-Chat-9B"
74
- processor = AutoProcessor.from_pretrained(model_id)
75
- model = AutoModelForMultimodalLM.from_pretrained(
76
- model_id,
77
- dtype="auto",
78
- device_map="auto",
79
- )
80
-
81
- messages = [{"role": "user", "content": "Good afternoon."}]
82
- inputs = processor.apply_chat_template(
83
- messages,
84
- add_generation_prompt=True,
85
- tokenize=True,
86
- return_dict=True,
87
- return_tensors="pt",
88
- # Optional because this release defaults to false:
89
- enable_thinking=False,
90
- ).to(model.device)
91
-
92
- output = model.generate(
93
- **inputs,
94
- max_new_tokens=256,
95
- do_sample=True,
96
- temperature=0.2,
97
- top_p=0.95,
98
- )
99
- new_tokens = output[0, inputs["input_ids"].shape[-1]:]
100
- print(processor.decode(new_tokens, skip_special_tokens=True))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  ```
102
 
103
- The exact recommended runtime class may change as Qwen3.5 support lands in
104
- stable Transformers/vLLM releases. Follow the base model's official runtime
105
- instructions and pin a tested revision in production.
106
 
107
- ## Serving with vLLM (production-validated)
 
 
 
 
 
 
 
108
 
109
- This checkpoint powers Altworld's own endpoints on vLLM 0.25, validated on
110
- an A40 and on RTX 3090 (`--tensor-parallel-size 2`): identity contract,
111
- no accidental fiction, streaming, stop tokens, and seed-fixed sampling
112
- reproducibility all pass on this engine.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  ```bash
115
  vllm serve Altworld/Astrea-R8-Chat-9B \
116
- --dtype bfloat16 \
117
- --max-model-len 32768 \
118
- --gpu-memory-utilization 0.90
119
  ```
120
 
121
- - The base architecture supports 262,144 tokens of context natively; serve
122
- whatever your VRAM affords (32k fits comfortably on 2×24 GB alongside the
123
- BF16 weights the hybrid linear-attention layers keep the KV footprint
124
- small).
125
- - On consumer dual-GPU boards without P2P, set `NCCL_P2P_DISABLE=1` or
126
- tensor-parallel start-up can deadlock.
127
- - Sampling profiles we serve in production: factual/plain
128
- `temperature 0.2, top_p 0.95`; conversational/creative
129
- `temperature 0.8, min_p 0.025, repetition_penalty 1.08`.
130
- - GGUF: llama.cpp supports the Qwen3.5 family; official quants of this
131
- fine-tune are planned — watch this org.
132
-
133
- ## Serving notes
134
-
135
- - Do not add a fictional roleplay system message for ordinary chat.
136
- - Keep thinking disabled for the default user experience.
137
- - Start factual/basic chat around temperature 0.2; creative generation was
138
- evaluated around temperature 0.8.
139
- - Preserve both Qwen stop tokens from `generation_config.json`.
140
- - A host may quantize the checkpoint to FP8. Re-run the smoke and narrative
141
- checks for that host; FP8 kernels are not interchangeable quality guarantees.
142
-
143
- ## Known limitations
144
-
145
- - Like any 9B model, Astrea can miss nuance, hallucinate, or follow ambiguous
146
- instructions poorly. Verify high-stakes claims independently.
147
- - One constructed multi-turn memory probe (“Mira” plus adopting a cat) exposed
148
- low-temperature indirectness/confusion even though the facts remained in
149
- context; higher temperature answered it directly. Applications should test
150
- their own dialogue distributions.
151
- - Engine portability: the production engine (vLLM 0.25, BF16) passes the
152
- full release gate battery, and the Fireworks source runtime matched it. A
153
- local MLX-LM smoke run was weaker on identity and user/model-name
154
- separation at temperature 0.2 despite numerically matched logits — treat
155
- runtime, kernels, and sampling implementation as part of the artifact and
156
- validate your exact engine before depending on it.
157
- - Identity behavior is a trained convention, not evidence of consciousness or
158
- an independent person.
159
- - English dominates the fine-tuning and evaluation evidence.
160
- - Safety behavior was not certified for medical, legal, financial, or other
161
- high-stakes deployment.
162
- - Vision behavior was not part of the release evaluation.
163
-
164
- ## Lineage and license
165
-
166
- Base model: [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B),
167
- licensed under Apache License 2.0. This derivative is released under the same
168
- license. See `NOTICE` for attribution and modification information.
169
-
170
- Fine-tuning preference data used gold responses generated by MIT-licensed
171
- open-weight models (GLM-5.2 and DeepSeek-V4-Flash) under deterministic task
172
- checks and an independent judge gate, with on-policy generations from the
173
- Astrea lineage as rejected sides. No closed-source model outputs were used
174
- at any stage.
175
-
176
- ## Acknowledgements
177
-
178
- Early-stage data ancestry draws on openly licensed community datasets:
179
- Athanorlite-DPO (CC-BY-4.0), jondurbin/gutenberg-dpo-v0.1 (CC-BY-4.0),
180
  nbeerbower/gutenberg2-dpo and gutenberg-moderne-dpo (Apache-2.0),
181
- Pageshift-Entertainment/LongPage (public-domain text, CC-BY-4.0
182
- annotations), allenai/tulu-3-sft-mixture (ODC-BY, license-filtered slices),
183
- and nothingiisreal/Reddit-Dirty-And-WritingPrompts (Apache-2.0, SFW file
184
- only). Thanks to the Qwen team for the Apache-2.0 base model.
185
-
186
- Questions or regressions: open a Discussion on this repository.
 
12
  - altworld
13
  ---
14
 
15
+ # Altworld Astrea: The New Frontier of Creative Writing
16
+
17
+ **[Try Astrea →](https://chat.altworld.io)** · **[Get an API key](https://altworld.io/developer)** · **[Read the docs →](https://astrea.altworld.io/docs/)**
18
+
19
+ Today, we are introducing **Altworld Astrea** our first openly released
20
+ model. Astrea is a compact 9B-parameter model built for one thing: writing
21
+ that feels written. It sounds human, it keeps the story straight, and it
22
+ beats bigger models at both. You say something, it answers back.
23
+
24
+ **Altworldbench overall writing quality.** Elo from 794 blind matchups on
25
+ our release pool — both rivals are bigger models built for creative writing:
26
+
27
+ | | Elo |
28
+ |---|---:|
29
+ | **Astrea 9B** | **1114** |
30
+ | Rocinante-X 12B | 1097 |
31
+ | Wayfarer-2 12B | 1045 |
32
+
33
+ Astrea is available today on [chat.altworld.io](https://chat.altworld.io),
34
+ and the full model weights are right here under Apache-2.0, so anyone can
35
+ download it and run it locally. An OpenAI-compatible
36
+ [API](https://astrea.altworld.io/docs/) is open with simple prepaid pricing.
37
+
38
+ ## What makes Astrea different
39
+
40
+ ### It sounds like a person
41
+
42
+ Most AI prose gives itself away in the first paragraph: the stock phrases,
43
+ the "it wasn't X — it was Y", the em-dash pileups, every reply opening the
44
+ same way. We count those tells. Astrea scores **2.5** — roughly two and a
45
+ half tells slipping into every thousand words. Every other model we tested
46
+ leaves between 8 and 19 per thousand.
47
+
48
+ ### It understands the scene, not just the sentence
49
+
50
+ Judged blind, story against story, Astrea wins on the things that make
51
+ writing actually work: characters whose motivations hold together, a detail
52
+ planted early paying off later, the tone you asked for instead of generic
53
+ fantasy voice. That depth is what puts it ahead of models three billion
54
+ parameters bigger.
55
+
56
+ ### It stays grounded
57
+
58
+ If the lantern went out, it stays out. If your sword was taken, it doesn't
59
+ reappear in your hand two scenes later. That's grounding — remembering what's
60
+ true in the story — and creative models are notoriously bad at it. Astrea
61
+ keeps **73 of 100** scenes straight. The strongest 12B prose model manages
62
+ **44**.
63
+
64
+ ### All of it at 9B
65
+
66
+ Every rival on our board is both bigger than Astrea *and* purpose-built for
67
+ creative writing. Astrea isn't beating generalists — it's beating the
68
+ specialists, with three billion fewer parameters. That also means it runs
69
+ faster, serves cheaper, and fits on hardware the bigger models can't.
70
+
71
+ ## Altworldbench
72
+
73
+ We test every release on **Altworldbench**, our own creative-writing
74
+ benchmark. Same prompts and settings for every model, every story judged
75
+ blind.
76
+
77
+ **Head-to-head wins** — share of blind matchups Astrea wins:
78
+
79
+ | | wins |
80
+ |---|---:|
81
+ | vs Rocinante-X | 52% |
82
+ | vs Wayfarer-2 | 65% |
83
+
84
+ **AI-sounding writing** — lower is better:
85
+
86
+ | | score |
87
+ |---|---:|
88
+ | **Astrea 9B** | **2.5** |
89
+ | Rocinante-X | 8.1 |
90
+ | Wayfarer-2 | 8.3 |
91
+ | Muse | 8.8 |
92
+ | Violet Lotus | 12.8 |
93
+
94
+ **Keeps the story straight** — out of 100:
95
+
96
+ | | score |
97
+ |---|---:|
98
+ | **Astrea 9B** | **73** |
99
+ | Violet Lotus | 68 |
100
+ | Muse | 64 |
101
+ | Wayfarer-2 | 61 |
102
+ | Rocinante-X | 44 |
103
+
104
+ **Writes the length you ask for** — % of the time:
105
+
106
+ | | % |
107
+ |---|---:|
108
+ | **Astrea 9B** | **93** |
109
+ | Rocinante-X | 88 |
110
+ | Violet Lotus | 83 |
111
+ | Wayfarer-2 | 78 |
112
+ | Muse | 25 |
113
+
114
+ All rivals are open 12B creative-writing models.
115
+
116
+ ## See for yourself
117
+
118
+ Two samples from our test set — unedited, exactly as Astrea wrote them.
119
+
120
+ > **SCENE:** The rescue party returns with empty stretchers and one boot.
121
+ > **ACTION:** I ask the search captain to tell the families myself.
122
+
123
+ > The captain sets the boot on the table. It is a heavy boot, the kind the
124
+ > welders wear, with the steel cap dented in and the laces frayed. The
125
+ > stretchers are empty now, returned to the hangar. The rescue party came
126
+ > back in four, and one of them did not return.
127
+ >
128
+ > The families are waiting in the corridor. They have not eaten in days.
129
+ > The ration scrip is worthless now that half the station is gone, and the
130
+ > spin-section has slowed to a crawl. The air smells of recycled carbon and
131
+ > old sweat. You do not speak of the lost. You do not speak of the dead.
132
+ >
133
+ > The captain turns to you. He does not speak. The boot is on the table. He
134
+ > steps back.
135
+ >
136
+ > You stand. You take the boot. You walk into the corridor. The families
137
+ > look at you. There is nothing to say. You set the boot on the floor and
138
+ > say, "Your children did not come back."
139
+
140
+ > **SCENE:** Your partner swore your cargo of walrus ivory to two different
141
+ > buyers.
142
+ > **ACTION:** I go to the lesser buyer first and offer him the truth and a
143
+ > discount.
144
+
145
+ > The lesser buyer squints at you through a greasy half-door in Uppsala's
146
+ > timber shed. The air smells of pine pitch and old fish.
147
+ >
148
+ > He does not lie. The other party is already buying that ivory. Three
149
+ > measures from Helsingjar, not yours. You tell him the truth, offer him a
150
+ > discount of two dirhams. He laughs, spits. "The other man has my seal. He
151
+ > paid me in hacksilver and a vow over the sacred waters. You offer scraps,
152
+ > and I must burn them for luck."
153
+ >
154
+ > He turns away. The floorboards are wet. Frost lies thin on Lake Mälaren
155
+ > beyond the sheds, and the ice does not hold for a barge. The cargo
156
+ > remains in the gloom: twenty tusks, the colour of a seal's eye, unsworn
157
+ > to you now.
158
+
159
+ ## Availability
160
+
161
+ - **Talk to Astrea** — chat with it now at
162
+ [chat.altworld.io](https://chat.altworld.io) — no account needed for your
163
+ first turns.
164
+ - **Build with the API** — an OpenAI-compatible endpoint at
165
+ `api.altworld.io` — create a key and load credits at
166
+ [altworld.io/developer](https://altworld.io/developer), then
167
+ [start in the docs](https://astrea.altworld.io/docs/).
168
+ - **Play Astrea** — Astrea powers the voices of
169
+ [Altworld](https://altworld.io), our life simulator and story sandbox.
170
+ - **Download the weights** — this repository: Apache-2.0, BF16 safetensors.
171
+
172
+ ## Build with the API
173
+
174
+ The Astrea API is **OpenAI-compatible**: if your code already talks to an
175
+ OpenAI-style endpoint, point it at our base URL, swap the model name, and it
176
+ works — streaming included.
177
+
178
+ ```bash
179
+ curl https://api.altworld.io/v1/chat/completions \
180
+ -H "Authorization: Bearer $ASTREA_API_KEY" \
181
+ -H "Content-Type: application/json" \
182
+ -d '{
183
+ "model": "astrea",
184
+ "messages": [{"role": "user", "content": "Open a story in a lighthouse, first person, no cliches."}],
185
+ "stream": true
186
+ }'
187
+ ```
188
+
189
+ ## Model details
190
+
191
+ Altworld Astrea (release name Astrea-R8-Chat-9B) was trained on top of the
192
+ Qwen3.5-9B base model using multi-round LoRA supervised fine-tuning,
193
+ alternating conversational and narrative rounds and checking every round
194
+ against Altworldbench. The released checkpoint is the merged BF16 model.
195
+
196
+ The chat template works bare: no system prompt, no flags, it just answers —
197
+ with no visible reasoning block. Explicit thinking is available per-request
198
+ with `enable_thinking=True`.
199
+
200
+ Recommended sampling:
201
+
202
+ ```json
203
+ "temperature": 0.8,
204
+ "min_p": 0.025,
205
+ "repetition_penalty": 1.08
206
  ```
207
 
208
+ Use `temperature 0.2` for factual chat.
209
+
210
+ ## Limitations
211
 
212
+ - Like any compact model, Astrea can miss nuance or state things confidently
213
+ and wrongly. Verify anything high-stakes independently.
214
+ - English dominates its training and evaluation. Other languages will work,
215
+ but with weaker guarantees.
216
+ - This release is text-first: the architecture inherits vision support, but
217
+ visual behavior was not part of the release evaluation.
218
+ - Astrea is not certified for medical, legal, financial, or other
219
+ high-stakes use.
220
 
221
+ We plan to keep improving and openly releasing Astrea models — tell us what
222
+ to fix. The fastest way to reach us is the Altworld Discord, or open a
223
+ Discussion on this repository.
224
+
225
+ ---
226
+
227
+ ## The fine print
228
+
229
+ **Evaluation protocol.** The pooled Elo is 1113.7 with a 95% bootstrap
230
+ interval of 1089.1–1140.9 on a frozen seven-model pool (794 comparisons for
231
+ Astrea's entry). The interval overlaps Astrea R8 and Rocinante-X-12B-v1, so
232
+ the supported claim is #1 on point estimate and statistical parity with the
233
+ top cluster — not a statistically separated win. Pairwise judgments were
234
+ made blind by GLM-5p1 and DeepSeek-V4-Flash, with Kimi-K2.6 adjudicating
235
+ disagreements; grounding, slop, length/POV/tense, and bare-chat checks
236
+ combine deterministic rules with LLM judging. Separately from the narrative
237
+ pool: 92.27% pass on 207 held-out bare-chat prompts, 0.00% accidental
238
+ fiction, 20/20 on unseen identity paraphrases. One constructed multi-turn
239
+ memory probe answered indirectly at temperature 0.2 while fine at 0.8 —
240
+ test your own dialogue distributions.
241
+
242
+ **Running it locally.** Validated in production on vLLM 0.25 (A40, and
243
+ 2×RTX 3090 with `--tensor-parallel-size 2` — set `NCCL_P2P_DISABLE=1` on
244
+ consumer dual-GPU boards):
245
 
246
  ```bash
247
  vllm serve Altworld/Astrea-R8-Chat-9B \
248
+ --dtype bfloat16 --max-model-len 32768 --gpu-memory-utilization 0.90
 
 
249
  ```
250
 
251
+ The base architecture natively supports 262k context; the hybrid
252
+ linear-attention layers keep the KV cache small, so serve what your VRAM
253
+ affords. With Transformers, load via `AutoProcessor` +
254
+ `AutoModelForMultimodalLM` and apply the bundled chat template
255
+ (`enable_thinking` defaults off). An MLX-LM smoke run behaved worse than
256
+ vLLM at temperature 0.2 despite numerically matched logits — validate your
257
+ exact engine. GGUF quants are planned; llama.cpp supports the Qwen3.5
258
+ family.
259
+
260
+ **Lineage and license.** Base model
261
+ [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B), Apache-2.0; this
262
+ derivative is released under the same license — see `NOTICE`. Fine-tuning
263
+ preference data used gold responses from MIT-licensed open-weight models
264
+ (GLM-5.2, DeepSeek-V4-Flash) with on-policy rejected sides; no closed-model
265
+ outputs anywhere. Early-stage data ancestry credits: Athanorlite-DPO
266
+ (CC-BY-4.0), jondurbin/gutenberg-dpo-v0.1 (CC-BY-4.0),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  nbeerbower/gutenberg2-dpo and gutenberg-moderne-dpo (Apache-2.0),
268
+ Pageshift-Entertainment/LongPage, allenai/tulu-3-sft-mixture (ODC-BY,
269
+ license-filtered), nothingiisreal/Reddit-Dirty-And-WritingPrompts
270
+ (Apache-2.0, SFW file only). Thanks to the Qwen team for the base model.