{"record":{"id":"c4a30efee2446b5a","repo":"run-llama/llama_index","slug":"names-and-results-arr-must-have-same-length","errorCode":null,"errorMessage":"names and results_arr must have same length.","messagePattern":"names and results_arr must have same length\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"llama-index-core/llama_index/core/evaluation/notebook_utils.py","lineNumber":62,"sourceCode":"    names: List[str], results_arr: List[EvaluationResult], metric: Optional[str] = None\n) -> Tuple[Any, Any]:\n    \"\"\"\n    Organizes EvaluationResults into a deep dataframe and computes the mean\n    score.\n\n    result:\n        result_df: pd.DataFrame representing all the evaluation results\n        mean_df: pd.DataFrame of average scores groupby names\n    \"\"\"\n    try:\n        import pandas as pd\n    except ImportError:\n        raise ImportError(\n            \"pandas is required for this function. Please install it with `pip install pandas`.\"\n        )\n\n    if len(names) != len(results_arr):\n        raise ValueError(\"names and results_arr must have same length.\")\n\n    qs = []\n    ss = []\n    fs = []\n    rs = []\n    cs = []\n    for res in results_arr:\n        qs.append(res.query)\n        ss.append(res.score)\n        fs.append(res.feedback)\n        rs.append(res.response)\n        cs.append(res.contexts)\n\n    deep_df = pd.DataFrame(\n        {\n            \"rag\": names,\n            \"query\": qs,\n            \"answer\": rs,","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/run-llama/llama_index/blob/afd0fef371831f9bda13e5af7167cf4e981278ab/llama-index-core/llama_index/core/evaluation/notebook_utils.py#L44-L80","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before\nnames = [\"gpt-4\", \"gpt-3.5\"]\nresults = [r1, r2, r3]  # 3 results, 2 names\nget_eval_results_df(names, results)\n\n# after\nassert len(names) == len(results)\nget_eval_results_df(names, results)","handlingStrategy":"validation","validationCode":"assert len(names) == len(results_arr), f\"names({len(names)}) != results({len(results_arr)})\"\nresult_df, mean_df = get_eval_results_df(names, results_arr)","typeGuard":null,"tryCatchPattern":"try:\n    result_df, mean_df = get_eval_results_df(names, results)\nexcept ValueError as e:\n    if \"same length\" in str(e):\n        names, results = align_runs(names, results)  # your repair logic\n        result_df, mean_df = get_eval_results_df(names, results)\n    else:\n        raise","preventionTips":["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"],"tags":["validation","evaluation","pandas","required-args"],"backgroundTag":null,"analyzedSha":"afd0fef371831f9bda13e5af7167cf4e981278ab","analyzedAt":"2026-08-15T05:42:58.429Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}