File size: 908 Bytes
ec9e535
e46883d
ec9e535
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""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