CommonAutoRearsh/engine/models.py

85 lines
2.1 KiB
Python

from dataclasses import dataclass, field
from typing import Literal
@dataclass(frozen=True)
class ArtifactsConfig:
include: list[str] = field(default_factory=list)
exclude: list[str] = field(default_factory=list)
max_files_per_iteration: int = 0
@dataclass(frozen=True)
class MutationConfig:
mode: str = ""
allowed_file_types: list[str] = field(default_factory=list)
max_changed_lines: int = 0
@dataclass(frozen=True)
class RunnerConfig:
command: str = ""
cwd: str = "."
timeout_seconds: int = 0
@dataclass(frozen=True)
class ScorerParseConfig:
format: str = ""
score_field: str = ""
metrics_field: str = ""
@dataclass(frozen=True)
class ScorerConfig:
type: str = ""
command: str = ""
parse: ScorerParseConfig = field(default_factory=ScorerParseConfig)
@dataclass(frozen=True)
class ObjectiveConfig:
primary_metric: str = ""
direction: Literal["maximize", "minimize"] = "maximize"
@dataclass(frozen=True)
class ConstraintConfig:
metric: str = ""
op: str = ""
value: int | float = 0
@dataclass(frozen=True)
class PolicyConfig:
keep_if: str = ""
tie_breakers: list[str] = field(default_factory=list)
on_failure: str = ""
@dataclass(frozen=True)
class BudgetConfig:
max_iterations: int = 0
max_failures: int = 0
@dataclass(frozen=True)
class LoggingConfig:
results_file: str = ""
candidate_dir: str = ""
@dataclass(frozen=True)
class TaskConfig:
id: str = ""
description: str = ""
artifacts: ArtifactsConfig = field(default_factory=ArtifactsConfig)
mutation: MutationConfig = field(default_factory=MutationConfig)
runner: RunnerConfig = field(default_factory=RunnerConfig)
scorer: ScorerConfig = field(default_factory=ScorerConfig)
objective: ObjectiveConfig = field(default_factory=ObjectiveConfig)
constraints: list[ConstraintConfig] = field(default_factory=list)
policy: PolicyConfig = field(default_factory=PolicyConfig)
budget: BudgetConfig = field(default_factory=BudgetConfig)
logging: LoggingConfig = field(default_factory=LoggingConfig)