38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
"""Artifact result types for generation harness workflows."""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Literal
|
|
|
|
from app.services.story_status import StoryAssetStatus
|
|
|
|
AssetCompletionKind = Literal["cover_image", "storybook_images", "audio"]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AssetCompletionResult:
|
|
"""Service-level result for a generated asset completion attempt."""
|
|
|
|
asset: AssetCompletionKind
|
|
status: StoryAssetStatus
|
|
value: str | bytes | None = None
|
|
error: str | None = None
|
|
blocks_main_result: bool = False
|
|
|
|
@property
|
|
def succeeded(self) -> bool:
|
|
"""Whether the asset reached a usable ready state."""
|
|
|
|
return self.status == StoryAssetStatus.READY and self.error is None
|
|
|
|
|
|
def asset_result_metadata(result: AssetCompletionResult) -> dict:
|
|
"""Build JSON-safe metadata for asset workflow events."""
|
|
|
|
return {
|
|
"asset": result.asset,
|
|
"status": result.status.value,
|
|
"error": result.error,
|
|
"blocks_main_result": result.blocks_main_result,
|
|
}
|
|
|