czty's picture
Add files using upload-large-folder tool
a9e46a4 verified
Raw
History Blame Contribute Delete
6.37 kB
from __future__ import annotations
from dataclasses import asdict, dataclass, field
from datetime import datetime, timezone
from typing import Any
import uuid
def utc_now_iso() -> str:
return datetime.now(tz=timezone.utc).isoformat()
@dataclass
class FailureMode:
step_name: str
error_type: str
error_message: str
hint: str = ""
@dataclass
class ExperimentReport:
run_id: str
created_at: str
task: str
status: str
input_manifest: dict[str, Any]
pipeline_config_id: str | None
output_artifacts: list[str]
metrics: dict[str, Any]
execution_log: str
failures: list[FailureMode] = field(default_factory=list)
notes: str = ""
@staticmethod
def new(
task: str,
input_manifest: dict[str, Any],
pipeline_config_id: str | None = None,
) -> "ExperimentReport":
return ExperimentReport(
run_id=f"exp-{uuid.uuid4().hex[:12]}",
created_at=utc_now_iso(),
task=task,
status="running",
input_manifest=input_manifest,
pipeline_config_id=pipeline_config_id,
output_artifacts=[],
metrics={},
execution_log="",
)
def to_dict(self) -> dict[str, Any]:
return asdict(self)
@dataclass
class Insight:
insight_id: str
created_at: str
title: str
hypothesis: str
recommendation: str
confidence: float
evidence_run_ids: list[str]
tags: list[str] = field(default_factory=list)
@staticmethod
def build(
title: str,
hypothesis: str,
recommendation: str,
confidence: float,
evidence_run_ids: list[str],
tags: list[str] | None = None,
) -> "Insight":
return Insight(
insight_id=f"ins-{uuid.uuid4().hex[:12]}",
created_at=utc_now_iso(),
title=title,
hypothesis=hypothesis,
recommendation=recommendation,
confidence=max(0.0, min(1.0, confidence)),
evidence_run_ids=evidence_run_ids,
tags=tags or [],
)
def to_dict(self) -> dict[str, Any]:
return asdict(self)
@dataclass
class PipelineConfiguration:
config_id: str
created_at: str
strategy_name: str
task_scope: str
tools: list[str]
parameters: dict[str, Any]
rationale: str
source_insight_ids: list[str] = field(default_factory=list)
@staticmethod
def build(
strategy_name: str,
task_scope: str,
tools: list[str],
parameters: dict[str, Any],
rationale: str,
source_insight_ids: list[str] | None = None,
) -> "PipelineConfiguration":
return PipelineConfiguration(
config_id=f"cfg-{uuid.uuid4().hex[:12]}",
created_at=utc_now_iso(),
strategy_name=strategy_name,
task_scope=task_scope,
tools=tools,
parameters=parameters,
rationale=rationale,
source_insight_ids=source_insight_ids or [],
)
def to_dict(self) -> dict[str, Any]:
return asdict(self)
@dataclass
class Hypothesis:
hypothesis_id: str
created_at: str
domain: str
user_query: str
title: str
hypothesis: str
expected_improvement: str
theoretical_basis: str
tags: list[str] = field(default_factory=list)
source_examples: list[str] = field(default_factory=list)
data_sources: list[str] = field(default_factory=list)
data_operations: list[dict[str, Any]] = field(default_factory=list)
historical_reflection: list[str] = field(default_factory=list)
error_avoidance: list[str] = field(default_factory=list)
reasoning_chain: list[str] = field(default_factory=list)
@staticmethod
def build(
domain: str,
user_query: str,
title: str,
hypothesis: str,
expected_improvement: str,
theoretical_basis: str,
tags: list[str] | None = None,
source_examples: list[str] | None = None,
data_sources: list[str] | None = None,
data_operations: list[dict[str, Any]] | None = None,
historical_reflection: list[str] | None = None,
error_avoidance: list[str] | None = None,
reasoning_chain: list[str] | None = None,
) -> "Hypothesis":
return Hypothesis(
hypothesis_id=f"hyp-{uuid.uuid4().hex[:12]}",
created_at=utc_now_iso(),
domain=domain,
user_query=user_query,
title=title,
hypothesis=hypothesis,
expected_improvement=expected_improvement,
theoretical_basis=theoretical_basis,
tags=tags or [],
source_examples=source_examples or [],
data_sources=data_sources or [],
data_operations=data_operations or [],
historical_reflection=historical_reflection or [],
error_avoidance=error_avoidance or [],
reasoning_chain=reasoning_chain or [],
)
def to_dict(self) -> dict[str, Any]:
return asdict(self)
@dataclass
class ValidationReport:
validation_id: str
created_at: str
hypothesis_id: str
domain: str
level: str
status: str
score: float
confidence: float
key_metrics: dict[str, Any]
failure_reason: str
evidence: str
@staticmethod
def build(
hypothesis_id: str,
domain: str,
level: str,
status: str,
score: float,
confidence: float,
key_metrics: dict[str, Any] | None = None,
failure_reason: str = "",
evidence: str = "",
) -> "ValidationReport":
normalized_status = status if status in {"success", "failed", "inconclusive"} else "inconclusive"
return ValidationReport(
validation_id=f"val-{uuid.uuid4().hex[:12]}",
created_at=utc_now_iso(),
hypothesis_id=hypothesis_id,
domain=domain,
level=level,
status=normalized_status,
score=max(0.0, min(1.0, float(score))),
confidence=max(0.0, min(1.0, float(confidence))),
key_metrics=key_metrics or {},
failure_reason=failure_reason,
evidence=evidence,
)
def to_dict(self) -> dict[str, Any]:
return asdict(self)