尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Pathya: Indian pharmacogenomic lab reports (PDFs, WhatsApp photos, dictation) read by Meta's Muse models into verified, de-identified research records and cohort carrier frequencies. Research tool, not medical advice. Meta Global AI Developer Hackathon 2026.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗India's pharmacogenomic results are stuck in PDFs and WhatsApp photos. Pathya turns them into verified, de-identified research data.
Watch the 3-minute demo · Live: https://pathya.anukritiai.com — no sign-up, no code. Read a WhatsApp photo, dictate results, browse the demo cohort, the simulated-population cohort or a sample record. Live runs carry a small per-visitor hourly budget because each one spends model credits.
Research tool, not medical advice. Pathya reads and standardises pharmacogenomic results and aggregates them into cohort statistics. It makes no dose, drug or test recommendation and has no patient-facing output. All data in this repository is synthetic.
Pathya is the Ayurvedic word for the regimen that suits a particular person. Built by Anukriti AI, Kochi, for the Meta Global AI Developer Hackathon 2026 (Startup track, "Build for Your World"). The repository was created during the event; nothing pre-existing is included.
India's evidence on drug-relevant gene variants is thin, and the variants that matter here differ from Europe's:
Labs already run these tests. The results travel to hospitals as PDFs and WhatsApp photos, in many layouts, and stay there. None reach a dataset. Evidence brief with sources: docs/EVIDENCE.md.
src/lib/quality.ts): which India-relevant variants the panel did not name, unreadable calls, and removal of any patient or lab reference./cohort, src/lib/cohort.ts): carrier frequency per variant with Wilson 95% intervals. Panels that never named a variant are left out of its denominator, not counted as non-carriers.| Model | Where |
|---|---|
muse-spark-1.3 | Report reading (PDF and image input, strict JSON schema), dictated-transcript reading, web search for published frequencies |
muse-voice-transcribe-1.0 | Results read aloud: languageBias English + Malayalam, keywords biased to gene and variant names |
meta-models/muse-spark-open-1026 (Muse Spark Open, open weights) | The same reader, on a second inference path. Served through Baseten; runs equally on your own GPU, which is the point. 177/177 on the held-out benchmark |
Not used on purpose: Muse Image and SAM 3.1 (no image to generate or segment).
Where the open-weights model runs. meta-models/muse-spark-open-1026 is served through Baseten's inference API (BASETEN_BASE_URL), called with the same OpenAI wire format as the hosted path, from the same container on AWS Mumbai. Nothing about the call is Baseten-specific: point BASETEN_BASE_URL at a vLLM server on your own hardware and the pipeline is unchanged. Three ways it does real work, not demo work:
provider=baseten on POST /api/analyze. The record then says read by meta-models/muse-spark-open-1026, and the calls section is badged Muse Spark Open.pdftoppm), because the open path has no responses API and cannot take a PDF natively.MUSE_PROVIDER=baseten makes it primary; the end-to-end eval passes with no hosted call at all.Why it matters here: Meta's credit terms allow API content to be used to improve Meta models. A biobank holding real genomic data cannot accept that, so the self-hostable path is the only version of Pathya that could ever touch a real patient's report.
The repository was created on 26 October 2026 and every commit is from the event window. Pathya is not a wrapper around one model call; what follows is ours, written here:
src/lib/quality.ts — the India-relevant variant panel, the three-state coverage model (tested / not in this panel / panel not documented) and de-identification.src/lib/cohort.ts — carrier frequencies, Wilson intervals, and both denominator conventions side by side.scripts/bench/gen.py — the synthetic report generator, both benchmark datasets and their ground truth, and the harnesses that score them.src/lib/pdf-extract.ts — DPYD normalisation from rsID, HGVS and star names, and the two-provider reader.Third-party, and labelled as such wherever it appears: PharmCAT 3.4 (CPIC's reference engine) does allele standardisation and phenotype naming; Meta's Muse models do the reading and transcription; Next.js, Tailwind and the OpenAI SDK are dependencies. The judgement calls about coverage, denominators and what a research record may contain are the parts we wrote.
npx tsx scripts/selftest.mts checks DPYD normalisation, coverage rules, de-identification, Wilson intervals and cohort counting offline.npx tsx scripts/eval.mts <url> runs 6 cases (two VCFs, a lab PDF, the same report as a phone photo, that photo again forced onto the open-weights model, and results read aloud) through a live server: 6/6 on production, 2026-10-31.cp .env.example .env # add MODEL_API_KEY (+ BASETEN_API_KEY for the open-weights path)
docker pull pgkb/pharmcat # dev mode runs PharmCAT via docker
pnpm install && pnpm dev # http://localhost:3000
Then on the home page:
npx tsx scripts/seed-cohort.mts http://localhost:3000.Checks:
npx tsx scripts/selftest.mts # offline, <1 s: normalisation, coverage, de-identification, statistics
npx tsx scripts/eval.mts http://localhost:3000 # 5 end-to-end cases (ACCESS_CODE=... for a gated host)
npx tsx --env-file=.env scripts/bench.mts rules,muse,open # extraction benchmark, see docs/BENCHMARK.md
python3 scripts/getrm/fetch.py --all && python3 scripts/getrm/score.py --all # real reference materials, see docs/GETRM.md
npx tsx --env-file=.env scripts/getrm-read.mts all [baseten] # the same real genotypes through the reader
Production: docker compose up -d --build with the env in .env. EC2 steps, the access gate and the public sample report are in docs/DEPLOY.md.
fixtures/oncology-patient-A.vcf: DPYD *2A het, TPMT *1/*3A, UGT1A1 *28/*28, CYP2C19 *2/*2, NUDT15 *1/*3.fixtures/oncology-patient-B.vcf: DPYD *2A/*2A, TPMT *3A/*3A.fixtures/lab-report-demo.pdf: synthetic Indian-panel lab report (HapB3 + c.85T>C heterozygous, UGT1A1 *1/*28, NUDT15 *1/*3, CYP2D6 *1/*4, CYP2C19 *2/*2). Not a real laboratory.fixtures/lab-report-photo.jpg: the same report as a skewed, noisy phone photo (how reports actually arrive on WhatsApp). Muse Spark vision reads it to the same six calls as the PDF. A copy is served at /sample-photo.jpg for the hero.fixtures/bench/ and fixtures/bench-heldout/: 36 synthetic reports each (4 layouts × 3 renders) with truth.json, generated by scripts/bench/gen.py (seeds 20261030 and 7).All fixtures are synthetic. None is a real patient or laboratory.
src/lib/quality.ts); CYP2D6 copy number and HLA are not assessed.npx tsx scripts/verify-cohort.mts <url>pgkb/pharmcat image.src/lib/limit.ts), and a visitor's run is filed in the visitors cohort so it cannot disturb statistics a script verifies. The one credentialled action is curator review, because that asserts a human checked the page (src/lib/access.ts). Records are labelled, never named.