Feedback System
A rejection carries information a bare failure does not. When a reviewer rejects a pipeline output at a human-in-the-loop (HITL) gate, the Feedback System records why, decides what should happen next, and can hand the run to a correction pass that keeps the original context.
Core concepts
- Feedback Record: Created when a HITL reviewer rejects a pipeline output. Stores rejection reason, rejected output, producing node/agent, and routing info.
- Feedback Handler: Determines how a rejection is triaged: manual review (
human), automatic AI correction (ai_correction), or AI correction with human review (ai_correction_with_human_review). - Correction Run: A new LangGraph run spawned from a feedback record, pre-configured with the original run’s context and the rejection details.
- Feedback Inbox: UI surface for reviewing, annotating, and resolving feedback records across all pipelines.
API endpoints
| Endpoint | Method | Description |
|---|---|---|
/api/v1/runs/{run_id}/feedback |
POST | Create a feedback record for a run |
/api/v1/feedback |
GET | List feedback records (paginated) |
/api/v1/feedback/{record_id} |
GET | Get a single feedback record |
/api/v1/feedback/{record_id}/status |
PATCH | Set the record’s status: pending, routing, correcting, resolved, escalated, or dismissed |
/api/v1/feedback/{record_id}/detect-gap |
POST | Run the pipeline’s evals against the rejected output and flag an eval gap when none catches it |
/api/v1/feedback/inbox |
GET | List the feedback inbox |
/api/v1/feedback/inbox/{record_id} |
GET | Get an inbox entry, including the pipeline name |
/api/v1/feedback/inbox/{record_id}/review |
POST | Review action: mark_reviewed, dismiss, or create_correction_run, with an optional annotation |
/api/v1/feedback/proposals |
GET | List eval-gap proposals (paginated) |
/api/v1/feedback/proposals/{record_id}/publish |
POST | Publish an eval-gap proposal as a live eval definition |
Routing strategy
A pipeline-level default_feedback_handler applies to all HITL gates unless a gate overrides it with its own feedback_handler. When both reject_target and feedback_handler are set on the same gate, feedback_handler takes precedence.
Eval gap detection
When a rejection is recorded, the system can retroactively run the pipeline’s eval suite against the rejected output. If no existing eval catches the failure, the record is tagged as an eval_gap, indicating an opportunity to expand the eval suite.
Related
- Pipelines: the directed-graph execution model
- Human-in-the-Loop: review gates and governance
- Evals: quality checks on agent output