chore: snapshot workflow migration progress

This commit is contained in:
2026-04-12 11:49:04 +02:00
parent 0cd02513d5
commit 3e810c74a3
163 changed files with 31774 additions and 2753 deletions
+143 -3
View File
@@ -1,22 +1,27 @@
import uuid
from datetime import datetime
from pydantic import BaseModel
from pydantic import BaseModel, Field
class OutputTypeCreate(BaseModel):
name: str
description: str | None = None
renderer: str = "threejs"
renderer: str = "blender"
render_settings: dict = {}
output_format: str = "png"
sort_order: int = 0
is_active: bool = True
compatible_categories: list[str] = []
render_backend: str = "auto"
render_backend: str = "celery"
is_animation: bool = False
transparent_bg: bool = False
pricing_tier_id: int | None = None
cycles_device: str | None = None
workflow_family: str = "order_line"
artifact_kind: str | None = None
invocation_overrides: dict = {}
workflow_definition_id: uuid.UUID | None = None
workflow_rollout_mode: str = "legacy_only"
material_override: str | None = None
@@ -32,12 +37,43 @@ class OutputTypePatch(BaseModel):
render_backend: str | None = None
is_animation: bool | None = None
transparent_bg: bool | None = None
workflow_family: str | None = None
artifact_kind: str | None = None
invocation_overrides: dict | None = None
pricing_tier_id: int | None = None
cycles_device: str | None = None
workflow_definition_id: uuid.UUID | None = None
workflow_rollout_mode: str | None = None
material_override: str | None = None
class OutputTypeInvocationProfileOut(BaseModel):
renderer: str
render_backend: str
workflow_family: str
artifact_kind: str
output_format: str
is_animation: bool
workflow_definition_id: uuid.UUID | None = None
workflow_rollout_mode: str = "legacy_only"
transparent_bg: bool
cycles_device: str | None = None
material_override: str | None = None
allowed_override_keys: list[str] = Field(default_factory=list)
invocation_overrides: dict = Field(default_factory=dict)
class OutputTypeContractCatalogOut(BaseModel):
workflow_families: list[str] = Field(default_factory=list)
workflow_rollout_modes: list[str] = Field(default_factory=list)
artifact_kinds: list[str] = Field(default_factory=list)
allowed_artifact_kinds_by_family: dict[str, list[str]] = Field(default_factory=dict)
allowed_output_formats_by_family: dict[str, list[str]] = Field(default_factory=dict)
allowed_invocation_override_keys_by_artifact_kind: dict[str, list[str]] = Field(default_factory=dict)
default_output_format_by_artifact_kind: dict[str, str] = Field(default_factory=dict)
parameter_ownership: dict[str, dict | list[str]] = Field(default_factory=dict)
class OutputTypeOut(BaseModel):
id: uuid.UUID
name: str
@@ -50,13 +86,18 @@ class OutputTypeOut(BaseModel):
render_backend: str
is_animation: bool
transparent_bg: bool
workflow_family: str
artifact_kind: str
invocation_overrides: dict
cycles_device: str | None = None
pricing_tier_id: int | None = None
pricing_tier_name: str | None = None
price_per_item: float | None = None
workflow_definition_id: uuid.UUID | None = None
workflow_rollout_mode: str
workflow_name: str | None = None
material_override: str | None = None
invocation_profile: OutputTypeInvocationProfileOut | None = None
is_active: bool
created_at: datetime
updated_at: datetime
@@ -159,11 +200,28 @@ class WorkflowDefinitionOut(BaseModel):
name: str
output_type_id: uuid.UUID | None
config: dict
family: str | None = None
supported_artifact_kinds: list[str] = Field(default_factory=list)
rollout_summary: "WorkflowRolloutSummaryOut" = Field(
default_factory=lambda: WorkflowRolloutSummaryOut()
)
is_active: bool
created_at: datetime
model_config = {"from_attributes": True}
class WorkflowDraftPreflightRequest(BaseModel):
context_id: str
config: dict
workflow_id: uuid.UUID | None = None
class WorkflowDraftDispatchRequest(BaseModel):
context_id: str
config: dict
workflow_id: uuid.UUID | None = None
class WorkflowNodeResultOut(BaseModel):
id: uuid.UUID
node_name: str
@@ -190,6 +248,38 @@ class WorkflowRunOut(BaseModel):
model_config = {"from_attributes": True}
class WorkflowRolloutLatestRunOut(BaseModel):
workflow_run_id: uuid.UUID
execution_mode: str
status: str
created_at: datetime
completed_at: datetime | None = None
class WorkflowRolloutLinkedOutputTypeOut(BaseModel):
id: uuid.UUID
name: str
is_active: bool
artifact_kind: str
workflow_rollout_mode: str
class WorkflowRolloutSummaryOut(BaseModel):
linked_output_type_count: int = 0
active_output_type_count: int = 0
linked_output_type_names: list[str] = Field(default_factory=list)
linked_output_types: list[WorkflowRolloutLinkedOutputTypeOut] = Field(default_factory=list)
rollout_modes: list[str] = Field(default_factory=list)
has_blocking_contracts: bool = False
blocking_reasons: list[str] = Field(default_factory=list)
latest_run: WorkflowRolloutLatestRunOut | None = None
latest_shadow_run: WorkflowRolloutLatestRunOut | None = None
latest_rollout_gate_verdict: str | None = None
latest_rollout_ready: bool | None = None
latest_rollout_status: str | None = None
latest_rollout_reasons: list[str] = Field(default_factory=list)
class WorkflowComparisonArtifactOut(BaseModel):
path: str | None
storage_key: str | None
@@ -208,8 +298,58 @@ class WorkflowRunComparisonOut(BaseModel):
execution_mode: str
status: str
summary: str
rollout_gate_verdict: str
workflow_rollout_ready: bool
workflow_rollout_status: str
rollout_reasons: list[str] = []
rollout_thresholds: dict[str, float] = Field(default_factory=dict)
authoritative_output: WorkflowComparisonArtifactOut
observer_output: WorkflowComparisonArtifactOut
exact_match: bool | None
dimensions_match: bool | None
mean_pixel_delta: float | None
class WorkflowPreflightIssueOut(BaseModel):
severity: str
code: str
message: str
node_id: str | None = None
step: str | None = None
class WorkflowPreflightNodeOut(BaseModel):
node_id: str
step: str
label: str | None = None
execution_kind: str
supported: bool
status: str
issues: list[WorkflowPreflightIssueOut] = []
class WorkflowPreflightOut(BaseModel):
workflow_id: uuid.UUID | None = None
context_id: str
context_kind: str | None = None
expected_context_kind: str
execution_mode: str
graph_dispatch_allowed: bool
summary: str
resolved_order_line_id: uuid.UUID | None = None
resolved_cad_file_id: uuid.UUID | None = None
unsupported_node_ids: list[str] = []
issues: list[WorkflowPreflightIssueOut] = []
nodes: list[WorkflowPreflightNodeOut] = []
class WorkflowOrderLineContextOptionOut(BaseModel):
value: uuid.UUID
label: str
meta: str
class WorkflowOrderLineContextGroupOut(BaseModel):
order_id: uuid.UUID
order_label: str
options: list[WorkflowOrderLineContextOptionOut] = []