roboflow / roboflow/inference

describe_interface rejects workflows with input-passthrough outputs ("output does not contain step selector")

Open
#2,898 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
2.5k
Forks
319
Avg merge
1d 14h
Merged PRs (30d)
133

Description

Summary

POST /workflows/describe_interface throws WorkflowDefinitionError for any workflow whose outputs include a selector pointing at an input ($inputs.<name>) — a construct the execution engine runs fine and the workflow editor lets users build. The error context is describing_workflow_outputs.

Minimal repro (hosted serverless, engine 1.5.1 — reproduces on both roboflow.one and roboflow.com deployments)

{
  "version": "1.0",
  "inputs": [{ "type": "WorkflowImage", "name": "image" }],
  "steps": [{ "type": "roboflow_core/image_blur@v1", "name": "blur", "image": "$inputs.image", "blur_type": "gaussian", "kernel_size": 21 }],
  "outputs": [
    { "type": "JsonField", "name": "input_image", "coordinates_system": "own", "selector": "$inputs.image" },
    { "type": "JsonField", "name": "blurred", "coordinates_system": "own", "selector": "$steps.blur.image" }
  ]
}

Response (400):

{"message":"Workflow definition invalid - output does not contain step selector.","error_type":"WorkflowDefinitionError","context":"describing_workflow_outputs","inner_error_type":null,"inner_error_message":"None"}

Removing the input_image output makes the same spec describe successfully. The same workflow executes correctly (the passthrough output appears in run results), so this is specific to interface description, not compilation/execution.

Compounding: surfaces through inner_workflow as "step misconfigured"

When such a workflow is referenced by roboflow_core/inner_workflow@v1, describing the outer workflow fails with Workflow definition invalid - step \` misconfigured. See details in inner error.` — the inner error being this same rejection of the nested workflow's input-passthrough output. The detail is not surfaced in the response, which made this expensive to diagnose.

Impact

Any product surface that relies on describe_interface to enumerate output kinds silently mis-handles legal workflows containing input-passthrough outputs. Hit in production by a video-processing customer whose workflows (editor-built) include input_image ← $inputs.image; the platform now falls back to static spec analysis (roboflow/roboflow#14841, #14844), but describe gives richer answers and should work for legal specs.

Suggested fix

describing_workflow_outputs should resolve input-selecting outputs to the declared input's kind (e.g. WorkflowImageimage) instead of requiring a step selector; and inner_workflow compile errors should propagate inner_error_message.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the POST /workflows/describe_interface entry point and trace the describing_workflow_outputs context for outputs selecting $inputs. Check how inner_workflow propagates nested errors. Done means input-passthrough outputs resolve to their declared input kind, while inner_workflow exposes the inner error message and the provided reproduction succeeds.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, backend-api-design
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.