fix: align engine task bootstrap scaffold

This commit is contained in:
sladro 2026-04-02 11:16:18 +08:00
parent 726e512603
commit 0c0c0d980f
3 changed files with 57 additions and 52 deletions

View File

@ -1,27 +1 @@
from .models import ( """Artifact Loop Engine package."""
ArtifactsConfig,
BudgetConfig,
ConstraintConfig,
LoggingConfig,
MutationConfig,
ObjectiveConfig,
PolicyConfig,
RunnerConfig,
ScorerConfig,
ScorerParseConfig,
TaskConfig,
)
__all__ = [
"ArtifactsConfig",
"BudgetConfig",
"ConstraintConfig",
"LoggingConfig",
"MutationConfig",
"ObjectiveConfig",
"PolicyConfig",
"RunnerConfig",
"ScorerConfig",
"ScorerParseConfig",
"TaskConfig",
]

View File

@ -1,84 +1,115 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from pathlib import Path
from typing import Literal from typing import Literal
@dataclass(frozen=True) @dataclass(frozen=True)
class ArtifactsConfig: class ArtifactSpec:
include: list[str] = field(default_factory=list) include: list[str] = field(default_factory=list)
exclude: list[str] = field(default_factory=list) exclude: list[str] = field(default_factory=list)
max_files_per_iteration: int = 0 max_files_per_iteration: int = 0
@dataclass(frozen=True) @dataclass(frozen=True)
class MutationConfig: class MutationSpec:
mode: str = "" mode: str = ""
allowed_file_types: list[str] = field(default_factory=list) allowed_file_types: list[str] = field(default_factory=list)
max_changed_lines: int = 0 max_changed_lines: int = 0
@dataclass(frozen=True) @dataclass(frozen=True)
class RunnerConfig: class RunnerSpec:
command: str = "" command: str = ""
cwd: str = "." cwd: Path = Path(".")
timeout_seconds: int = 0 timeout_seconds: int = 0
@dataclass(frozen=True) @dataclass(frozen=True)
class ScorerParseConfig: class ScorerParseSpec:
format: str = "" format: str = ""
score_field: str = "" score_field: str = ""
metrics_field: str = "" metrics_field: str = ""
@dataclass(frozen=True) @dataclass(frozen=True)
class ScorerConfig: class ScorerSpec:
type: str = "" type: str = ""
command: str = "" command: str = ""
parse: ScorerParseConfig = field(default_factory=ScorerParseConfig) parse: ScorerParseSpec = field(default_factory=ScorerParseSpec)
@dataclass(frozen=True) @dataclass(frozen=True)
class ObjectiveConfig: class ObjectiveSpec:
primary_metric: str = "" primary_metric: str = ""
direction: Literal["maximize", "minimize"] = "maximize" direction: Literal["maximize", "minimize"] = "maximize"
@dataclass(frozen=True) @dataclass(frozen=True)
class ConstraintConfig: class ConstraintSpec:
metric: str = "" metric: str = ""
op: str = "" op: str = ""
value: int | float = 0 value: int | float = 0
@dataclass(frozen=True) @dataclass(frozen=True)
class PolicyConfig: class PolicySpec:
keep_if: str = "" keep_if: str = ""
tie_breakers: list[str] = field(default_factory=list) tie_breakers: list[str] = field(default_factory=list)
on_failure: str = "" on_failure: str = ""
@dataclass(frozen=True) @dataclass(frozen=True)
class BudgetConfig: class BudgetSpec:
max_iterations: int = 0 max_iterations: int = 0
max_failures: int = 0 max_failures: int = 0
@dataclass(frozen=True) @dataclass(frozen=True)
class LoggingConfig: class LoggingSpec:
results_file: str = "" results_file: Path = Path()
candidate_dir: str = "" candidate_dir: Path = Path()
@dataclass(frozen=True) @dataclass(frozen=True)
class TaskConfig: class TaskSpec:
id: str = "" id: str = ""
description: str = "" description: str = ""
artifacts: ArtifactsConfig = field(default_factory=ArtifactsConfig) root_dir: Path = Path(".")
mutation: MutationConfig = field(default_factory=MutationConfig) artifacts: ArtifactSpec = field(default_factory=ArtifactSpec)
runner: RunnerConfig = field(default_factory=RunnerConfig) mutation: MutationSpec = field(default_factory=MutationSpec)
scorer: ScorerConfig = field(default_factory=ScorerConfig) runner: RunnerSpec = field(default_factory=RunnerSpec)
objective: ObjectiveConfig = field(default_factory=ObjectiveConfig) scorer: ScorerSpec = field(default_factory=ScorerSpec)
constraints: list[ConstraintConfig] = field(default_factory=list) objective: ObjectiveSpec = field(default_factory=ObjectiveSpec)
policy: PolicyConfig = field(default_factory=PolicyConfig) constraints: list[ConstraintSpec] = field(default_factory=list)
budget: BudgetConfig = field(default_factory=BudgetConfig) policy: PolicySpec = field(default_factory=PolicySpec)
logging: LoggingConfig = field(default_factory=LoggingConfig) budget: BudgetSpec = field(default_factory=BudgetSpec)
logging: LoggingSpec = field(default_factory=LoggingSpec)
@dataclass(frozen=True)
class BaselineSnapshot:
root_dir: Path = Path(".")
files: dict[str, str] = field(default_factory=dict)
@dataclass(frozen=True)
class ScoreResult:
score: float = 0.0
metrics: dict[str, float | int] = field(default_factory=dict)
@dataclass(frozen=True)
class DecisionResult:
keep: bool = False
reason: str = ""
primary_metric: str = ""
primary_value: float = 0.0
@dataclass(frozen=True)
class RunResult:
task_id: str = ""
iteration: int = 0
score: ScoreResult = field(default_factory=ScoreResult)
decision: DecisionResult = field(default_factory=DecisionResult)
baseline: BaselineSnapshot = field(default_factory=BaselineSnapshot)

View File

@ -1 +1 @@
"""Unit tests for the artifact loop engine."""