run-llama/llama_index · error · ValueError
names and results_arr must have same length.
Error message
names and results_arr must have same length.
What it means
get_eval_results_df zips names with results_arr to label each EvaluationResult; if the two lists differ in length the pairing is undefined, so the function raises ValueError('names and results_arr must have same length.') after the pandas import.
Source
Thrown at llama-index-core/llama_index/core/evaluation/notebook_utils.py:62
names: List[str], results_arr: List[EvaluationResult], metric: Optional[str] = None
) -> Tuple[Any, Any]:
"""
Organizes EvaluationResults into a deep dataframe and computes the mean
score.
result:
result_df: pd.DataFrame representing all the evaluation results
mean_df: pd.DataFrame of average scores groupby names
"""
try:
import pandas as pd
except ImportError:
raise ImportError(
"pandas is required for this function. Please install it with `pip install pandas`."
)
if len(names) != len(results_arr):
raise ValueError("names and results_arr must have same length.")
qs = []
ss = []
fs = []
rs = []
cs = []
for res in results_arr:
qs.append(res.query)
ss.append(res.score)
fs.append(res.feedback)
rs.append(res.response)
cs.append(res.contexts)
deep_df = pd.DataFrame(
{
"rag": names,
"query": qs,
"answer": rs,View on GitHub (pinned to afd0fef371)
Solutions
- Make the lists equal length: one name per EvaluationResult entry
- Build them from the same source structure: for name, res in runs: names.append(name); results.append(res)
- Assert len(names) == len(results_arr) right before the call in test/eval scripts
Example fix
# before names = ["gpt-4", "gpt-3.5"] results = [r1, r2, r3] # 3 results, 2 names get_eval_results_df(names, results) # after assert len(names) == len(results) get_eval_results_df(names, results)
Defensive patterns
Strategy: validation
Validate before calling
assert len(names) == len(results_arr), f"names({len(names)}) != results({len(results_arr)})"
result_df, mean_df = get_eval_results_df(names, results_arr) Try / catch
try:
result_df, mean_df = get_eval_results_df(names, results)
except ValueError as e:
if "same length" in str(e):
names, results = align_runs(names, results) # your repair logic
result_df, mean_df = get_eval_results_df(names, results)
else:
raise Prevention
- Build names and results in the same loop so they cannot diverge
- Assert equal lengths immediately before calling the helper
- Store (name, result) pairs together instead of parallel lists
When it happens
Trigger: Calling get_eval_results_df(names, results_arr) with len(names) != len(results_arr), e.g. 3 evaluator names but results from only 2 runs, or a flattened results list.
Common situations: Appending a new evaluator run to names but forgetting results (or vice versa); filtering failed results out of results_arr but not names; off-by-one when manually building the lists.
Related errors
- query, contexts, and response must be provided
- Metric key {metric_key} not in results_df
- query, response, second_response, and reference must be prov
- query, contexts, and response must be provided
- Retrieved ids and expected ids must be provided
AI-assisted analysis of run-llama/llama_index@afd0fef371 (2026-08-15).
Data as JSON: /api/errors/c4a30efee2446b5a.
Report an issue: GitHub.