Geetesh
fix: move server files into server/ subfolder
045a5fe
"""
Pydantic models for the Clinical Trial Protocol Review OpenEnv environment.
"""
from __future__ import annotations
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field
# ---------------------------------------------------------------------------
# Action Space
# ---------------------------------------------------------------------------
class ClinicalTrialAction(BaseModel):
"""
The action an agent takes when reviewing clinical trial data.
Fields
------
findings : list of finding dicts, each with:
- finding_type: "protocol_deviation" | "adverse_event" | "eligibility_violation"
| "safety_concern" | "amendment_recommendation"
- severity: "critical" | "major" | "minor" | "informational"
- subject_id: patient/subject ID this finding applies to (null if global)
- description: free-text explanation of the finding
- recommendation: what action should be taken
rationale : overall rationale for the review (free text)
"""
findings: List[Dict[str, Any]] = Field(
default_factory=list,
description="List of structured findings from the protocol review"
)
rationale: str = Field(
default="",
description="Overall rationale and summary of the review"
)
# ---------------------------------------------------------------------------
# Observation Space
# ---------------------------------------------------------------------------
class ClinicalTrialObservation(BaseModel):
"""
What the agent sees at each step.
Fields
------
task_name : which task is being evaluated
protocol_summary: high-level trial description
patient_records : list of patient data dicts
adverse_events : list of reported adverse event dicts
protocol_text : relevant sections of the trial protocol
step : current step number
feedback : feedback from previous action (empty on first step)
partial_score : running score so far [0.0, 1.0]
"""
task_name: str
protocol_summary: str
patient_records: List[Dict[str, Any]] = Field(default_factory=list)
adverse_events: List[Dict[str, Any]] = Field(default_factory=list)
protocol_text: str = ""
step: int = 0
feedback: str = ""
partial_score: float = 0.0
# ---------------------------------------------------------------------------
# Step Result
# ---------------------------------------------------------------------------
class StepResult(BaseModel):
observation: ClinicalTrialObservation
reward: float
done: bool
info: Dict[str, Any] = Field(default_factory=dict)