From 970faa3fa0086865d43b2bd9d86a4e1aa13b2e7e Mon Sep 17 00:00:00 2001 From: gilesb Date: Sun, 11 Jan 2026 17:50:36 +0000 Subject: [PATCH] Fix run recipe: optional fields in RunStatus, list->dict nodes - Made recipe and inputs optional in RunStatus model - Convert DAG nodes from list format to dict format when running recipes Co-Authored-By: Claude Opus 4.5 --- app/routers/recipes.py | 10 ++++++++++ app/routers/runs.py | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/routers/recipes.py b/app/routers/recipes.py index bd7d6f2..2fc2c2d 100644 --- a/app/routers/recipes.py +++ b/app/routers/recipes.py @@ -220,6 +220,16 @@ async def run_recipe( dag_copy = json.loads(json.dumps(recipe_dag)) # Deep copy nodes = dag_copy.get("nodes", {}) + # Convert nodes from list to dict if needed + if isinstance(nodes, list): + nodes_dict = {} + for node in nodes: + node_id = node.get("id") + if node_id: + nodes_dict[node_id] = node + nodes = nodes_dict + dag_copy["nodes"] = nodes + # Map input names to content hashes for input_name, content_hash in req.inputs.items(): if input_name in nodes: diff --git a/app/routers/runs.py b/app/routers/runs.py index e744be5..9a828df 100644 --- a/app/routers/runs.py +++ b/app/routers/runs.py @@ -41,8 +41,8 @@ class RunRequest(BaseModel): class RunStatus(BaseModel): run_id: str status: str - recipe: str - inputs: List[str] + recipe: Optional[str] = None + inputs: Optional[List[str]] = None output_name: Optional[str] = None created_at: Optional[str] = None completed_at: Optional[str] = None