Soulwise
4-Factor Response Engine
Astrology content is for reflection and entertainment, not medical, financial, legal, or mental-health advice.
How does Soulwise write the note it sends back after a check-in?
The 4-factor response engine pulls four signals — the chip you tapped, your current cycle phase, today's transit context, and your cycle-related archetype — and runs them through a constrained language model to produce one short note. Constraints include length, anti-claim rules, and tone calibration.
- Four inputs: chip, phase, transit, archetype
- Constrained generation: length, anti-claim, tone
- No wellness or soutien et réflexion language by construction
4-Factor Response Engine
Every daily-check-in produces one short note back. That note comes from the 4-factor response engine — a constrained generation system whose job is to be useful in 60 to 100 words and never overreach.
The four factors
| # | Factor | Source | Why it matters |
|---|---|---|---|
| 1 | Chip | The 14-chip palette in the daily ritual | Names what is true today |
| 2 | Phase | Bayesian cycle estimate | Sets the cycle baseline |
| 3 | Transit context | Today's natal transit if any | Adds the day's flavour |
| 4 | Archetype | Your cycle-related archetype | The pattern across cycles |
The four are combined deterministically into a structured prompt — not free-form. The generation model writes inside a tight template that varies per chip × phase combination.
Why exactly four
We tested two, three, four, and six. Two factors (chip + phase) produced notes that felt too generic. Three (chip + phase + transit) had a habit of leaning too astrology-heavy. Six (adding mood, weather, social load) introduced inconsistency and increased generation latency past the 200ms p50 budget for the daily ritual.
Four is the sweet spot where the note feels specific to you without becoming noisy.
Constraints on the generation
The model output is filtered by three rules at write time:
- Length — 40 to 120 words. Anything outside the band is regenerated.
- Anti-claim — runs the output through the same anti-claim lint that gates blog posts. See non-wellness-cycle-tracking.
- Tone calibration — a small classifier rejects outputs that feel prescriptive, judgmental, or peppy-corporate. Outputs that land in "warm and grounded" pass.
A note that fails any of the three is regenerated up to three times. If all three fail, the user sees a curated fallback that ships with the app.
What the model does NOT see
- The body of your daily note (only the chip).
- Any of your past notes.
- Other users' data.
- Your name, account, or any identifier.
Generation runs on a stripped, anonymised input. The personalisation comes from the structured factors, not from re-reading your text.
Where this lives
The engine is in lib/responseEngine/ in the Soulwise codebase. The structured prompt template is one TypeScript file per chip × phase pair (14 × 4 = 56 templates), each hand-tuned. The model is the smallest one that passed the tone calibration test — a 7B parameter open-weights model running in a Vercel Function with a 200ms p50 budget.
Related Content
Go deeper
See 4-Factor Response Engine read in your full birth chart
A free placement is the headline. A full reading interprets your whole chart.
Frequently Asked Questions
Yes — a small in-context language model with hard constraints. The four inputs are deterministic; the language is generated against a tight template per chip × phase combination.
More factors create noise. Four is the smallest set that produces a note useful enough to keep opening the app.
No. Only the four structured inputs leave your device for generation; the body of your note stays encrypted on-device. See period-privacy.