GymCoach
근력 트레이닝 기록 및 개인 AI 코치
인도의 약물유전체 결과가 PDF와 WhatsApp 사진에 묶여 있다
India's pharmacogenomic results are stuck in PDFs and WhatsApp photos. Pathya reads them with Meta's Muse models into verified, de-identified research records and cohort statistics. Research tool, not
건강TypeScript · PythonGitHub @Abm32온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.