Development Guide¶
Creating ValidationPlans for New Domains¶
Each ArtifactEngine in artifact-core should have a corresponding ValidationPlan in artifact-experiment. When contributing new artifact types to artifact-core, extend artifact-experiment with the corresponding validation plan:
from artifact_experiment.base.validation_plan import ValidationPlan
class NewDomainValidationPlan(ValidationPlan[...]):
@staticmethod
def _get_callback_factory() -> Type[NewDomainCallbackFactory]:
return NewDomainCallbackFactory
# Implement required artifact type methods...
Adding New Tracking Backends¶
To support a new experiment tracking backend:
- Create RunAdapter: Normalize the backend's native run object
- Create TrackingClient: Implement the unified tracking interface
- Implement ArtifactLoggers: Handle backend-specific artifact export
from artifact_experiment.base.tracking.adapter import RunAdapter
from artifact_experiment.base.tracking.client import TrackingClient
from artifact_experiment.base.tracking.logger import ArtifactLogger
# 1. Create RunAdapter
class MyBackendRunAdapter(RunAdapter[MyNativeRunType]):
def upload(self, path_source: str, dir_target: str):
# Implement backend-specific file upload
pass
def stop(self):
# Implement run termination logic
pass
# 2. Create TrackingClient
class MyBackendTrackingClient(TrackingClient[MyBackendRunAdapter]):
@staticmethod
def _get_score_logger(run: MyBackendRunAdapter) -> ArtifactLogger[float, MyBackendRunAdapter]:
return MyBackendScoreLogger(run=run)
# Implement other logger getters...
# 3. Implement ArtifactLoggers
class MyBackendScoreLogger(ArtifactLogger[float, MyBackendRunAdapter]):
def log(self, artifact: float, artifact_name: str):
# Implement backend-specific score logging
pass