Source code for veupath_chatbot.transport.http.schemas.optimization

"""Optimization event/response models shared by chat and SSE schemas."""

from pydantic import BaseModel, Field

from veupath_chatbot.platform.types import JSONValue


[docs] class OptimizationTrialData(BaseModel): """A single optimization trial result.""" trial_number: int = Field(alias="trialNumber") parameters: dict[str, JSONValue] = Field(default_factory=dict) score: float = 0.0 recall: float | None = None false_positive_rate: float | None = Field(default=None, alias="falsePositiveRate") result_count: int | None = Field(default=None, alias="resultCount") positive_hits: int | None = Field(default=None, alias="positiveHits") negative_hits: int | None = Field(default=None, alias="negativeHits") total_positives: int | None = Field(default=None, alias="totalPositives") total_negatives: int | None = Field(default=None, alias="totalNegatives") model_config = {"populate_by_name": True}
[docs] class OptimizationParameterSpecData(BaseModel): """Specification for one optimization parameter.""" name: str type: str min_value: float | None = Field(default=None, alias="minValue") max_value: float | None = Field(default=None, alias="maxValue") log_scale: bool | None = Field(default=None, alias="logScale") choices: list[str] | None = None model_config = {"populate_by_name": True}
[docs] class OptimizationProgressEventData(BaseModel): """Payload for ``optimization_progress`` SSE events.""" optimization_id: str = Field(alias="optimizationId") status: str = "" search_name: str | None = Field(default=None, alias="searchName") record_type: str | None = Field(default=None, alias="recordType") budget: int | None = None objective: str | None = None current_trial: int | None = Field(default=None, alias="currentTrial") total_trials: int | None = Field(default=None, alias="totalTrials") parameter_specs: list[OptimizationParameterSpecData] | None = Field( default=None, alias="parameterSpecs" ) trial: OptimizationTrialData | None = None best_trial: OptimizationTrialData | None = Field(default=None, alias="bestTrial") recent_trials: list[OptimizationTrialData] | None = Field( default=None, alias="recentTrials" ) all_trials: list[OptimizationTrialData] | None = Field( default=None, alias="allTrials" ) pareto_frontier: list[OptimizationTrialData] | None = Field( default=None, alias="paretoFrontier" ) sensitivity: dict[str, float] | None = None total_time_seconds: float | None = Field(default=None, alias="totalTimeSeconds") error: str | None = None model_config = {"populate_by_name": True}