| """TrialCandidate v1 -- Normalized ClinicalTrials MCP search results.""" | |
| from __future__ import annotations | |
| from typing import Optional | |
| from pydantic import BaseModel, Field | |
| class TrialLocation(BaseModel): | |
| country: str | |
| city: Optional[str] = None | |
| class AgeRange(BaseModel): | |
| min: Optional[int] = None | |
| max: Optional[int] = None | |
| class EligibilityText(BaseModel): | |
| inclusion: str | |
| exclusion: str | |
| class TrialCandidate(BaseModel): | |
| nct_id: str = Field(description="NCT identifier e.g. 'NCT01234567'") | |
| title: str | |
| conditions: list[str] = Field(default_factory=list) | |
| phase: Optional[str] = None | |
| status: Optional[str] = None | |
| locations: list[TrialLocation] = Field(default_factory=list) | |
| age_range: Optional[AgeRange] = None | |
| fingerprint_text: str = Field(description="Short text for Gemini reranking") | |
| eligibility_text: Optional[EligibilityText] = None | |