Files
sillyhome-next-dev/app/ml/training.py
Otto aaf319ff14
Some checks failed
quality / test (3.11) (push) Has been cancelled
quality / test (3.13) (push) Has been cancelled
harden delivery pipeline and production runtime
2026-06-11 21:14:07 +02:00

37 lines
1.1 KiB
Python

from __future__ import annotations
import logging
from dataclasses import dataclass
from app.ml.feature_store import FeatureStore
logger = logging.getLogger(__name__)
@dataclass
class TrainedArtifact:
artifact_id: str
supported_sensors: tuple[str, ...]
class TrainingPipeline:
def __init__(self, store: FeatureStore) -> None:
self._store = store
self._artifacts: dict[str, TrainedArtifact] = {}
def run(self, artifact_id: str) -> TrainedArtifact:
vectors = self._store.all()
if not vectors:
raise ValueError("FeatureStore enthält keine Trainingsdaten.")
sensors = tuple(sorted({vector.sensor_id for vector in vectors}))
artifact = TrainedArtifact(artifact_id=artifact_id, supported_sensors=sensors)
self._artifacts[artifact_id] = artifact
logger.info("Training abgeschlossen für %s mit %d Sensoren", artifact_id, len(sensors))
return artifact
def export(self, artifact_id: str) -> TrainedArtifact:
if artifact_id not in self._artifacts:
raise KeyError(f"Artifact '{artifact_id}' nicht gefunden.")
return self._artifacts[artifact_id]