mastra-ai/mastra · error · MastraError
RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED
RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED
Error message
Failed to run experiment: Data array is empty
What it means
`validateEvalsInputs` (called by `runEvals`) requires a non-empty dataset before launching an experiment. If the `data` array has length 0, a MastraError with id RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED (category USER) is thrown. Running an eval on zero examples would produce an empty experiment, so the library refuses up front.
Source
Thrown at packages/core/src/evals/run/index.ts:675
}
function isAgentScorerConfig(scorers: any): scorers is AgentScorerConfig {
return (
typeof scorers === 'object' &&
!Array.isArray(scorers) &&
('agent' in scorers || ('trajectory' in scorers && !('workflow' in scorers) && !('steps' in scorers)))
);
}
function validateEvalsInputs(
data: RunEvalsDataItem<any>[],
scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig | AgentScorerConfig,
target: Agent | Workflow,
gates?: MastraScorer<any, any, any, any>[],
): void {
const hasGates = !!gates && gates.length > 0;
if (data.length === 0) {
throw new MastraError({
domain: 'SCORER',
id: 'RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED',
category: 'USER',
text: 'Failed to run experiment: Data array is empty',
});
}
// Tracks whether any data item carries per-turn gates/scorers, which (like
// top-level scorers/gates) satisfies the "at least one scorer or gate" rule.
let hasAnyTurnAssertions = false;
for (let i = 0; i < data.length; i++) {
const item = data[i];
if (!item || typeof item !== 'object' || (!('input' in item) && !('inputs' in item) && !('turns' in item))) {
throw new MastraError({
domain: 'SCORER',
id: 'INVALID_DATA_ITEM',
category: 'USER',View on GitHub (pinned to 75dd419e61)
Solutions
- Pass a non-empty `data` array to runEvals — check `data.length > 0` before calling
- Fix the upstream data-loading query/file so it actually returns rows
- Log the dataset size right after loading to catch silently-empty sources
- Fail fast in CI with an explicit assertion that the eval dataset exists
Example fix
// before
await mastra.runEvals({ data: loaded.filter(x => x.skip !== true), scorers, target });
// after
const data = loaded.filter(x => x.skip !== true);
if (data.length === 0) throw new Error('Eval dataset is empty: check data file/query');
await mastra.runEvals({ data, scorers, target }); Defensive patterns
Strategy: validation
Validate before calling
function assertNonEmptyDataset(data) {
if (!Array.isArray(data) || data.length === 0) {
throw new Error('runEvals requires a non-empty data array');
}
}
assertNonEmptyDataset(data);
await mastra.runEvals({ data, scorers, target }); Try / catch
try {
await mastra.runEvals({ data, scorers, target });
} catch (e) {
if (e instanceof MastraError && e.id === 'RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED') {
console.error('Eval data was empty — check the loader/query that produced the dataset');
} else throw e;
} Prevention
- Check data.length immediately after loading and before expensive target setup
- Log dataset size in CI so silently-empty loads are visible
- Avoid swallowing errors in data loaders that can produce empty arrays
When it happens
Trigger: Calling `mastra.runEvals({ data: [], scorers, target })` (or equivalent run-experiment API) with an empty array; a data-loading step that filtered out all rows before the call.
Common situations: Loading eval data from a file/DB whose filter matched nothing (wrong path, stale table, wrong date range); slicing or paginating data incorrectly; building the dataset conditionally so it can be empty in CI; JSONL/CSV parse failures swallowed upstream resulting in zero items.
Related errors
- EXPERIMENT_RESULT_MISSING_EXPERIMENT_ID
- EXPERIMENT_INVALID_TARGET
- INVALID_DATA_ITEM
- NO_SCORERS_PROVIDED
- Knowledge scope cannot be empty
AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30).
Data as JSON: /api/errors/d24fda025224ec90.
Report an issue: GitHub.