Skip to content

feat(workflow): serve orchestrators through model endpoints - #13083

Closed
furionw wants to merge 1 commit into
qiwa/workflow-remote-executionfrom
qiwa/workflow-frontend-provider
Closed

furionw wants to merge 1 commit into
qiwa/workflow-remote-executionfrom
qiwa/workflow-frontend-provider

Conversation

@furionw

@furionw furionw commented Aug 12, 2026 •

Copy link
Copy Markdown
Contributor

Based on #13081.

Why

The generic frontend should remain independent of workflow authoring and deployment. A workflow orchestrator running as an ordinary discovered model worker still needs a small boundary between Dynamo's endpoint generator ABI and the orchestrator's unary request/chunk contract.

Experimental: This workflow API is under active development and may evolve based on feedback. It is an optional orchestration layer over Dynamo's discoverable workers and endpoints; applications may compose those primitives directly when they prefer to own the orchestration logic.

What Change

  • Add WorkflowEndpointHandler for bound orchestrators.
  • Validate the endpoint ABI from WorkflowIR.
  • Propagate request identity, cancellation, and terminal chunks.
classDiagram
    WorkflowEndpointHandler --> WorkflowOrchestrator : executes request/chunk ABI
    WorkflowOrchestrator --> WorkflowIR : exposes logical endpoint contract
    WorkflowOrchestrator --> GraphScheduler : schedules bound graph
    WorkflowEndpointHandler ..> Endpoint : served by worker

    note for WorkflowEndpointHandler "Adapts discovered endpoint requests"
    note for WorkflowOrchestrator "Owns one bound workflow"
Loading

Test Plan

  • Focused CPU workflow and endpoint-handler tests pass.
  • Applicable pre-commit hooks pass.

@github-actions github-actions Bot added feat frontend `python -m dynamo.frontend` and `dynamo-run in=http|text|grpc` labels Aug 12, 2026
@datadog-official

This comment has been minimized.

@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from b84931d to e2378a7 Compare August 12, 2026 08:35
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 12, 2026
@github-actions

github-actions Bot commented Aug 12, 2026 •

Copy link
Copy Markdown
Contributor

@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 010f43e to 2484ecd Compare August 12, 2026 21:16
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 3fdc640 to 06196c1 Compare August 12, 2026 21:17
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 2484ecd to 4f42576 Compare August 12, 2026 21:58
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 06196c1 to d97c40e Compare August 12, 2026 21:58
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 4f42576 to fbd3a07 Compare August 12, 2026 22:32
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from d97c40e to 3c40733 Compare August 12, 2026 22:32
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from a8a7079 to b9e3f60 Compare August 13, 2026 00:20
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 3c40733 to 7f8547f Compare August 13, 2026 00:20
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from b9e3f60 to fb6d0fd Compare August 13, 2026 22:14
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 7f8547f to 8de19c5 Compare August 13, 2026 22:22
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from fb6d0fd to b199fcb Compare August 13, 2026 23:14
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 8de19c5 to 97c5cd9 Compare August 13, 2026 23:15
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from b199fcb to 5d2b429 Compare August 13, 2026 23:32
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 97c5cd9 to 2b18280 Compare August 13, 2026 23:33
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 5d2b429 to bba4aa7 Compare August 14, 2026 05:15
@furionw
furionw changed the base branch from qiwa/workflow-remote-execution to qiwa/workflow-nixl-carrier August 14, 2026 05:15
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 2b18280 to d9d4c5d Compare August 14, 2026 05:15
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch 2 times, most recently from 3776575 to 43cb87d Compare August 20, 2026 08:05
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 8e2760d to ad7133d Compare August 21, 2026 04:44
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 43cb87d to ae34ef9 Compare August 21, 2026 04:44
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from ad7133d to 49e2f9a Compare August 21, 2026 04:54
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from ae34ef9 to 00fb3d7 Compare August 21, 2026 04:54
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 49e2f9a to b0a2417 Compare August 22, 2026 00:04
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 00fb3d7 to 0e71f3f Compare August 22, 2026 00:29
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from b0a2417 to 4b5260c Compare August 22, 2026 00:46
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 0e71f3f to 7fba583 Compare August 22, 2026 00:46
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from 4b5260c to 22ba645 Compare August 23, 2026 18:22
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 7fba583 to 15effa9 Compare August 23, 2026 18:24
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from fb84356 to b5b16ad Compare August 23, 2026 18:26
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from 15effa9 to eb6d649 Compare August 23, 2026 18:26
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from b5b16ad to b54e963 Compare August 23, 2026 18:30
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch 2 times, most recently from 2234f2c to accdc07 Compare August 23, 2026 21:38
@furionw furionw changed the title feat(frontend): load workflow token providers feat(workflow): serve orchestrators through model endpoints Aug 23, 2026
@furionw
furionw force-pushed the qiwa/workflow-remote-execution branch from d6fb423 to 50c0c67 Compare August 25, 2026 21:26
@furionw
furionw force-pushed the qiwa/workflow-frontend-provider branch from accdc07 to a75493d Compare August 25, 2026 21:27
@furionw
furionw marked this pull request as ready for review August 25, 2026 23:10

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

WorkflowEndpointHandler(orchestrator)


async def test_endpoint_handler_cancels_workflow_when_context_stops() -> None:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Cancellation test can hang CI forever without a timeout

This test drives BlockingRunner, which awaits asyncio.Event().wait() and only unblocks when the handler cancels the workflow. It carries no @pytest.mark.timeout. If the cancellation path regresses, the async-for never completes and the run hangs indefinitely. The pytest guidelines require a timeout on any test with an unbounded wait.

Suggested change
async def test_endpoint_handler_cancels_workflow_when_context_stops() -> None:
@pytest.mark.timeout(30)
async def test_endpoint_handler_cancels_workflow_when_context_stops() -> None:
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation feat frontend `python -m dynamo.frontend` and `dynamo-run in=http|text|grpc` size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant