Source code for data_juicer_agents.tools.dev.develop_operator.logic

# -*- coding: utf-8 -*-
"""Tool-level APIs for custom operator scaffold generation."""

from __future__ import annotations

from typing import Any, Dict

from .scaffold import (
    ScaffoldResult,
    generate_operator_scaffold,
    run_smoke_check,
)


[docs] class DevUseCase: """Generate and optionally smoke-check custom operator scaffolds."""
[docs] @staticmethod def execute( *, intent: str, operator_name: str, output_dir: str, operator_type: str | None = None, from_retrieve: str | None = None, smoke_check: bool = False, ) -> Dict[str, Any]: missing = [ field for field, value in { "intent": intent, "operator_name": operator_name, "output_dir": output_dir, }.items() if not str(value).strip() ] if missing: return { "ok": False, "error_type": "missing_required", "requires": missing, "message": "intent/operator_name/output_dir are required", } try: scaffold = generate_operator_scaffold( intent=str(intent).strip(), operator_name=str(operator_name).strip(), output_dir=str(output_dir).strip(), operator_type=(str(operator_type).strip() or None) if operator_type is not None else None, from_retrieve_path=(str(from_retrieve).strip() or None) if from_retrieve is not None else None, ) except Exception as exc: return { "ok": False, "error_type": "dev_failed", "message": f"dev scaffold generation failed: {exc}", } return DevUseCase._serialize_result(scaffold=scaffold, smoke_check=bool(smoke_check))
@staticmethod def _serialize_result(scaffold: ScaffoldResult, smoke_check: bool) -> Dict[str, Any]: smoke: Dict[str, Any] | None = None if smoke_check: smoke_ok, smoke_message = run_smoke_check(scaffold) smoke = { "ok": bool(smoke_ok), "message": str(smoke_message), } result: Dict[str, Any] = { "ok": True if smoke is None else bool(smoke.get("ok")), "operator_name": scaffold.operator_name, "operator_type": scaffold.operator_type, "class_name": scaffold.class_name, "output_dir": str(scaffold.output_dir), "generated_files": list(scaffold.generated_files), "summary_path": str(scaffold.summary_path), "notes": list(scaffold.notes), } if smoke is not None: result["smoke_check"] = smoke return result
__all__ = ["DevUseCase"]