File size: 3,824 Bytes
01923e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb019eb
 
 
01923e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
"""Public project metadata and a deliberately incomplete synthetic walkthrough."""
import json
import os
import re
from pathlib import Path

from .models import ClinicalAtoms, Example, ExampleStage, Project, Resource

NAMESPACE = os.getenv("HF_NAMESPACE", "PediaMedAI")
if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,95}", NAMESPACE):
    raise ValueError("HF_NAMESPACE must be a Hugging Face account or organization name")
CODE_URL = os.getenv("CODE_URL", "https://github.com/PediaMedAI/MedCaseAgent").rstrip("/")

PROJECT = Project(
    name="MedCaseAgent",
    title="From Multimodal Clinical Evidence to Rare Disease Case Reports",
    description="We study how AI agents can turn clinical notes, medical images, and retrieved literature into structured rare-disease case reports. MedCaseAgent brings together evidence planning, report writing, and review.",
    organization="PediaMed AI",
    resources=[
        Resource(id="benchmark", name="MedCase-Bench",
                 description="584 structured clinical input records for evaluating case-report generation.",
                 url=f"https://huggingface.co/datasets/{NAMESPACE}/MedCase-Bench"),
        Resource(id="corpus", name="MedCase-150K",
                 description="A large corpus of clinical case reports, including rare-disease cases.",
                 url=None),
        Resource(id="code", name="MedCaseAgent",
                 description="Source code for preprocessing, Planner–Writer–Editor inference, and disease retrieval.",
                 url=CODE_URL),
        Resource(id="demo", name="Web Demo",
                 description="Try MedCaseAgent online to turn clinical notes and medical images into case report drafts.",
                 url="https://medcaseagent.medlastexam.org"),
    ],
)

EXAMPLE = Example(
    title="From clinical atoms to a structured draft",
    label="Synthetic example · Illustrative only",
    description="This intentionally incomplete software-test case comes from the code repository. Switch stages to see how evidence can be organized while preserving missing information. No live inference is performed.",
    atoms=ClinicalAtoms.model_validate(json.loads((Path(__file__).parent / "data" / "synthetic_case.json").read_text())),
    stages=[
        ExampleStage(id="planner", title="Planner", content="1. Establish the available timeline: three days of fatigue.\n2. Separate patient history, presentation, investigations, management, and follow-up.\n3. Mark investigations, treatment, and outcome as unavailable.\n4. Do not infer a diagnosis or add figures or references that were not supplied."),
        ExampleStage(id="writer", title="Writer", content="An adult with no documented prior medical history reported a three-day history of fatigue. No investigation results or treatment details were supplied. Follow-up was unavailable.\n\nThe available information is insufficient for a diagnostic discussion or a complete case report."),
        ExampleStage(id="editor", title="Editor", content="Evidence check\n• The three-day symptom duration is preserved.\n• No undocumented age, sex, examination findings, or diagnosis is introduced.\n• Missing investigation, treatment, and follow-up details remain explicit.\n• No references or images are fabricated.\n\nNext step: obtain the missing clinical evidence before developing a complete report."),
    ],
    report="Clinical history\nAn adult had no documented prior medical history.\n\nPresentation\nThe patient reported a three-day history of fatigue.\n\nInvestigations and management\nNo investigation results or treatment details were supplied.\n\nOutcome\nFollow-up was unavailable.\n\nCompleteness\nThis synthetic input is insufficient for a complete case report. No diagnosis or literature-supported discussion is inferred.",
)