Astrael-1 + Claude · why we built two engines instead of one
Most AI products pick one foundation model and bend their entire product around its strengths and apologies. We built Astrael to read across eight cultural-symbolic traditions in two languages, so we couldn't afford either of the obvious paths.
A pure Claude wrapper would have given us best-in-class English synthesis and reasoning. It would also have given us Chinese output that an Aesop copy editor would call "translation-stiff" — grammatically correct, sometimes lovely, but reading like an English mind passing through Chinese words. For 命理 (mìnglǐ — the colloquial register of Chinese metaphysics) that gap matters. A reader who's been listening to grandmother explain her 八字 since age six will hear the foreignness in two sentences.
A pure self-trained model would have left us behind on the long-form psychological synthesis Claude does at a level our 12-person team can't match.
So we built both.
What Astrael-1 actually is
Astrael-1 is a LoRA fine-tune series — a family of low-rank adapters layered on top of leading open-source foundation models. Training data is a curated, in-house bilingual divination corpus we've been collecting since the day Astrael existed:
· Canonical reference works in their original Chinese · 渊海子平 · 三命通会 · 滴天髓 · 紫微斗数全书 · 易经 with Wilhelm/Baynes parallels · Modern psychological translations · the Jungian / archetypal tradition, attachment-theory and narrative-therapy materials · Expert annotations · a small group of 命理 practitioners and Jungian-trained reviewers wrote register-correction pairs ("the model said X · a native reader would say Y · here's why") · Negative examples · canonical translation-stiff failure modes labelled and used for preference tuning
Astrael-1 is not trained on user conversations. Per our privacy policy: only explicitly-consented data goes in. We will never silently train on what you talk to Astrael about.
What Claude does, that Astrael-1 doesn't try to do
The Claude family stays on three jobs we couldn't reproduce at our scale or budget:
· Long-form psychological synthesis — multi-tradition readings that braid Western astrology, BaZi, and a tarot draw into a single 600-word reading without contradicting itself. · Cross-cultural translation — when an English-speaking user with a Chinese partner asks about compatibility, Claude can hold both frames in mind. · Safety + boundary defense — the partner family is reliable at refusing out-of-bounds requests (medical / legal / suicidal-ideation hard escalation paths). This is what lets us put the word "companion" on a feature without flinching.
The router
Every chat turn passes through a routing decision:
if task is short-form (≤ 80 tokens output) and locale starts with "zh"
and feature ∈ { bazi, ziwei, daily-guidance-copy }:
→ Astrael-1 standard
elif depth ∈ { deep, mythic } and tokens needed > 800:
→ Claude Opus 4.7
elif feature = "tarot" or feature = "astrology" or depth = "standard":
→ Claude Sonnet 4.6
elif feature ∈ { numerology, zodiac-daily, classification }:
→ Claude Haiku 4.5
elif language-feel critic flag is on:
→ route through Astrael-1 for a "register pass" after the
primary Claude generation
The router runs in ≤ 5ms, reads from ai_routing_overrides (so we can hot-swap defaults without redeploy), and logs every choice into api_usage so we can audit which engine paid for which result.
Why this is honest
The ModelBadge on every reading surface prints the actual model that rendered the turn — "Astrael-1 + Claude Sonnet 4.6", "Astrael-1 + Claude Opus 4.7", etc. No model laundering. If Astrael-1 didn't touch the turn, the badge says so. If Claude didn't touch it, the badge says so. We will not name a model in marketing that we don't actually use, and we will not omit a model that we did use.
How we evaluate
A 100-prompt hold-out set, bilingual, scored by Haiku 4.5 acting as judge across five axes: register-natural, factually-grounded, emotionally-attuned, non-predictive, useful. Astrael-1 vs Claude-only gets re-graded weekly. The Astrael-1 win-rate on Chinese 命理 prompts is currently 0.68 with a 95% CI of [0.59, 0.76]; on English long-form synthesis it's 0.21, which is exactly the gap we expected and exactly the gap that justifies routing.
What's next
Three things land in the next month: · An open evaluation rubric — published verbatim so external researchers can grade us · Per-task win-rate published in /transparency · updated weekly · An Astrael-1 voice variant tuned for the warm-Chinese register specifically, so the voice-mode TTS doesn't break the spell our text model worked hard to keep
We didn't build two engines because it was efficient. We built two engines because the alternative — one engine that's almost right in one language — wasn't honest enough.
Published 2026-05-16 · Astrael engineering. We're an AI company — this is what we work on.
