aps-agent/server/shipyard_synthetic/pipeline.py

69 lines
2.2 KiB
Python

from __future__ import annotations
from pathlib import Path
from .config import GeneratorConfig
from .contract_fixture import build_contract_fixture
from .models import DatasetBundle, business_digest
def build_synthetic_dataset(
config: GeneratorConfig,
*,
validate: bool = True,
) -> DatasetBundle:
"""Build the complete canonical synthetic shipyard dataset in dependency order."""
from .alternatives import generate_alternatives
from .engineering import generate_engineering
from .execution_quality import generate_execution_quality
from .master_data import generate_master
from .materials import generate_materials
from .mrp import generate_mrp
from .orders import generate_orders
from .projects import generate_projects
from .rag_skills import generate_rag_and_skills
from .scenarios import generate_scenarios
from .scheduler import generate_schedule
from .sourcing import generate_sourcing
bundle = build_contract_fixture(config)
for generator in (
generate_master,
generate_projects,
generate_engineering,
generate_materials,
generate_mrp,
generate_orders,
generate_sourcing,
generate_schedule,
generate_execution_quality,
generate_alternatives,
generate_scenarios,
generate_rag_and_skills,
):
bundle = generator(bundle, config)
bundle.metadata["businessDigest"] = business_digest(bundle)
if validate:
from .validation import validate_bundle
report = validate_bundle(bundle, config)
bundle.artifacts["validation-report"] = report
if not report.get("valid"):
raise ValueError(
"synthetic shipyard dataset validation failed: "
+ ", ".join(report.get("blockingIssues") or ["unknown error"])
)
return bundle
def generate_to_directory(
config: GeneratorConfig,
output: Path,
*,
validate: bool = True,
) -> dict:
from .exporter import export_bundle
bundle = build_synthetic_dataset(config, validate=validate)
return export_bundle(bundle, config, output, incremental=config.incremental)