Label view
What is a Label View?
A label view is a Feast primitive for storing judgments about entities — reward signals, safety scores, human reviews, ground-truth answers — separately from the immutable observations stored in feature views.
Stores
What was observed
What was judged
Example
Agent prompt and response
response_quality: "poor", is_safe: 0
Writers
Usually one source
Multiple labelers (human, LLM judge, code)
Changes over time
Append-only
Updated by new label writes
Use a label view when you need governed, training-ready labels that multiple sources can write, disagree on, and resolve — not when you need append-only feature data.
Prerequisites
Before using label views, you need:
Feast with the LabelView primitive
A feature repo with at least one
EntityA
PushSource(or batchDataSource) for label ingestionfeast applyrun after defining label views
Why use Label Views?
Separate features from judgments. Mixing reward labels into feature views blurs two different lifecycles — observations are append-only; labels are overwritten, corrected, and debated.
Support multiple labelers. Human reviewers, safety scanners, and LLM judges can all label the same entity. Feast tracks who wrote what via labeler_field and resolves conflicts via ConflictPolicy.
Generate training datasets. Compose label views with feature views in a FeatureService and retrieve features + labels together with point-in-time correctness.
Data label in the UI. Configure data labeling profiles (annotation profiles) so data scientists can label data directly in the Feast UI — entity forms, document spans, bulk review, or active learning.
Feedback vs Expectations
Not all labels serve the same purpose. Feast distinguishes two common types — both stored in a label view, modeled with field names and tags:
Feedback
Expectation
Question
How good was the actual output?
What is the correct answer?
Example
response_quality: "poor", relevance: "irrelevant"
ground_truth: "relevant", is_default: 1
Typical writers
Human, LLM judge, automated code
Human experts (gold standard)
Training use
Reward signal, quality filter, active-learning queue
Supervised target column
Conflict handling
Common — use ConflictPolicy
Rare — usually one authoritative source
Feast does not require separate primitives for feedback and expectations. Model them with field names and tags:
Practical pattern:
Feedback label view — multi-labeler,
ConflictPolicy, fields likeresponse_quality,safety_score,relevanceExpectation fields or view — stable ground truth, fields like
ground_truth,expected_answer,is_defaultMixed view — one label view with both (e.g. RAG:
relevance= feedback,ground_truth= expectation)
Sources of Labels
Label views accept labels from any source. Track the writer in labeler_field:
Source
labeler example
Typical role
Human reviewer
human-reviewer@company.com
Feedback or expectation
LLM judge
gpt-4-evaluator
Feedback (quality scores)
Automated scanner
nemo-guardrails
Feedback (safety signals)
Batch import
risk-ops-team
Expectation (historical outcomes)
When to use Label Views
Use a FeatureView when…
Use a LabelView when…
Data is observational and append-only
Data is a judgment or data label (annotation)
One source writes the data
Multiple labelers may disagree
No conflict resolution needed
You need governed conflict resolution
No labeling UI needed
You want structured data labeling workflows (annotation)
How Label Views Work
Step 1: Define a label view
Run feast apply to register the label view.
Step 2: Push labels
Labels are written with FeatureStore.push():
Each push appends to the offline store (full history retained) and updates the online store (latest value per key).
Step 3: Data label in the Feast UI
Open the label view in the Feast UI Data Labeling tab (Annotate tab). The UI reads data labeling tags (annotation tags) and shows the right workflow:
Open Label Views in the sidebar
Select a label view (check the Data Labeling badge on the list page)
Go to the Data Labeling tab (Annotate tab)
Choose a data labeling method (annotation method): Entity Form, Document Span, Review & Edit, or Active Learning
Submit labels — they are pushed to the label view's
PushSource
Step 4: Join labels with features for training
Training pipelines get features and resolved labels in one retrieval call.
Data Labeling Profiles (Annotation Profiles)
Data labeling profiles (annotation profiles) configure how labels are created in the UI. Set them via tags — no schema changes required.
Supported profiles
entity-form
RLHF, safety review, per-entity feedback
Form — one entity at a time
document-span
RAG chunk labeling, span labeling (annotation)
Load document, label chunks
table
Bulk review, correcting existing labels
Editable table with dropdowns
active-learning
Label high-value unlabeled entities
Queue from a reference feature view
Choosing a profile
Answer one question:
"I need to review agent responses one at a time" →
entity-form"I need to label document chunks for RAG" →
document-span"I need to correct labels in bulk" →
table"I want to label only the most valuable unlabeled items" →
active-learning(requiresreference_feature_view)
The Data Labeling tab (Annotate tab) shows only relevant data labeling methods (annotation methods) per profile:
document-span
Document Span, Review & Edit
entity-form
Entity Form, Review & Edit, Active Learning
table
Review & Edit, Active Learning, Entity Form
active-learning
Active Learning, Entity Form, Review & Edit
Tag reference
feast.io/labeling-method
Primary data labeling method (annotation method)
entity-form, document-span, table
feast.io/field-role:<field>
Semantic role of a field
feedback, expectation, label, metadata, content, span_start, span_end
feast.io/label-values:<field>
Allowed label values
relevant,irrelevant
feast.io/label-widget:<field>
Input widget type
enum, binary, text, number
Examples by use case
Agent feedback (RLHF / safety)
Feedback from human reviewers and automated safety layers on agent responses.
RAG chunk labeling (feedback + expectation)
One view can hold both a retrieval judgment and ground truth:
Historical ground truth (batch labels)
Pre-existing label tables loaded via feast materialize:
Conflict policies
When multiple labelers write different values for the same entity, ConflictPolicy picks one value for offline store reads (training, UI browse):
LAST_WRITE_WINS
Default. Most recent write wins.
LABELER_PRIORITY
Trusted labelers override others (e.g. human over LLM judge).
MAJORITY_VOTE
Consensus labeling (e.g. multiple labelers on RAG chunks).
Conflict policies apply to the offline store (training). The online store always uses last-write-wins. Full label history is always retained in the offline store.
Best practices
Name fields by intent. Use response_quality (feedback) and ground_truth (expectation) — not generic score or label.
Tag field roles. Set feast.io/field-role:<field> to feedback or expectation so your team and UI know what each field means.
Match conflict policy to label type. Use LABELER_PRIORITY when humans correct automated judges. Use MAJORITY_VOTE for multi-labeler consensus. Use LAST_WRITE_WINS for simple feedback streams.
Link to features. Set reference_feature_view so the UI and documentation show which feature view the labels apply to.
Separate noisy feedback from stable ground truth. When possible, put expectations in dedicated fields or views with stricter writer conventions (human-only).
Limitations
Conflict policies are enforced on offline reads only; online store is always last-write-wins.
LABELER_PRIORITYrequires explicit labeler ordering configuration.Data labeling profiles (annotation profiles) are UI configuration via tags — not enforced at the SDK write path.
Next steps
Feature view — immutable features that label views apply labels to
Feature retrieval — point-in-time joins for training
ADR-0012: LabelView — full design rationale
Last updated
Was this helpful?