Skip to content
aadya
Newaadya-m1 and aadya-m1-mini are herem1 and m1-mini are here

Forecast the next period, with honest uncertainty.

An open model that gives a probability for every possible cycle length, not one brittle date. It runs on your device, so your data never has to leave it.

By the numbers

Lower error than what trackers do today.

Error is measured with CRPS, a proper scoring rule for probability forecasts. Lower is better. Every number comes from a committed benchmark report.

21%
less error than the usual tracker method
539 simulated users
18%
less error on real users
364 public real users, two cohorts
51%
less error with an ovulation test
optional, experimental, 41 people
256M
parameters, open weights
plus a 0.84M model for phones

aadya-m1 against the usual tracker method

Mean CRPS on each track. Shorter bar is better.

Usual tracker method (rolling median; 28-day for cold start)aadya-m1
View the numbers
TrackDataUsualaadya-m1Lower byAgainst the strongest comparison
Simulated users, all cases539 users3.702.9221%slightly ahead of the best competitor (LSTM)
Hard case: life-stage mix (S4)simulated6.834.7830%better than the Bayes reference
Real data: all public users (pooled)364 users2.351.9318%slightly ahead of the Bayes reference (small but clear)
Real data: Creighton (cross-fitted)251 users2.542.0917.6%slightly ahead of the Bayes reference (small but clear)
Real data: Marquette113 users1.951.5719.4%on par with the Bayes reference
Mid-cycle on real data, no marker (mcPHASES)110 cycles3.492.4330.2%Poisson-with-skips slightly ahead (2.34 vs 2.43; significance not tested)
With an ovulation-test marker (mcPHASES)110 cycles, 41 people3.491.7051.2%better than the best competitor (Poisson-with-skips)
20% of period logs missed (simulated)simulated12.459.5523.3%on par with the Bayes reference
No history, Marquette (cold start)113 users2.132.18-2.3%on par with the 28-day baseline

The big gaps are against the rolling-median method many trackers use. Against the strongest research baseline, a hierarchical Bayes reference, the lead on real users is small (about 1% of the error), and on cold start the model is level with a plain 28-day baseline. Full benchmark details.

What it does

A distribution, not a guess.

After 6 logged cycles: 26, 31, 28, 33, 27, 30 days

Days 25 to 33 (80% likely)

Probability of each cycle length1015202530354045505560days from the start of the last periodmost likely day 29 · 80% window days 25–33

Real aadya-m1 output, computed offline from the released weights.

Every day gets a probability

Input is your past cycle lengths and the days since your last period. Output is a probability for each cycle length from 1 to 120 days.

It widens when it is unsure

With thin or messy history the window widens instead of faking precision. An 80% window should hold the real day about 8 times in 10, and that is checked.

It learns, locally

After each confirmed period the model can update a small state on the device. That state is never uploaded, and nothing needs an account.

Models

Two sizes, one API.

On the public real data we have, the small model is level with the large one.

aadya-m1
256M

Servers, desktops, research and fine-tuning. About 1 GB of weights.

aadya-m1-mini
0.84M

Phones, browsers and low-power devices. 3.4 MB of weights.