Build with Aadya.
Everything you need to run the model and show its output well.
Quickstart
The model is on Hugging Face as manasdutta04/aadya-m1, with a small self-contained Python runtime next to the weights.
# Python 3.10+. Weights are downloaded once, then everything runs offline.
pip install numpy scipy torch safetensors huggingface_hubFor phones and browsers, use aadya-m1-mini, which has the same API in 3.4 MB.
Inputs and outputs
| Argument | Meaning |
|---|---|
past_cycle_lengths | List of past cycle lengths in days, oldest first. May be empty. |
days_since_last_period | Days since the last period started. Use 0 right after a period starts, and increase as days pass. |
age_group | Optional: 18-24, 25-34, 35-44 or 45+. |
ovulation_test_day | Optional, experimental: the cycle day on which a test showed the surge had passed. |
| returns | An array of 120 probabilities. pmf[k - 1] is the probability that the next cycle is k days long. They sum to 1. |
Showing uncertainty
Show the whole distribution, or a window, never a single date presented as certain. model.window(pmf) returns the central 80% window. A good display says “most likely these days, about 8 in 10 chance”, and widens when history is thin.
lo, hi = model.window(pmf) # for example (26, 33) days after the last period startedLearning on the device
After a period is confirmed, call observe_outcome with the real cycle length. This updates a small personalisation state. Export it with export_state if you want to persist it, and keep it on the device. Never upload it.
Ovulation-test input
Optional and experimental. It was studied on one small dataset (41 people, 110 cycles), where it narrowed the 80% window from about 12 to about 7 days. Do not present it as an ovulation date or use it for fertility planning.
Integration rules
- No network calls carrying user data, and no analytics SDKs that phone home.
- Store data locally, under the user’s control.
- Always show uncertainty. Never a lone date.
- No diagnosis, and no contraception or fertility claims.
- State the evidence level: simulated users plus small public cohorts.
- Ask “did you forget to log a period?” when a cycle looks too long. Missed logs are the largest source of error for every method.
FAQ
Does it need a GPU?
No. aadya-m1 runs on CPU. The mini model is built for low-power devices.
Is my data sent anywhere?
No. The model runs on your machine, and this site loads nothing from other hosts.
Can I use it commercially?
The weights are Apache-2.0. Check the model card for the current licence terms before shipping.
Does it predict ovulation or fertile days?
No. It forecasts the start of the next period, and it is not a medical device.
How was it evaluated?
On AadyaBench with paired confidence intervals. See Benchmarks and the paper.