linshenkx/prompt-optimizer · error · EvaluationParseError
Evaluation result is not a valid object.
Error message
Evaluation result is not a valid object.
What it means
EvaluationParseError thrown during normalizeEvaluationResponse when the parsed evaluation payload is not a plain object (null, array, primitive, or undefined). This guards the normalization step that expects an object containing at least a score. It indicates the extracted JSON, while parseable, is not an evaluation result object.
Source
Thrown at packages/core/src/services/evaluation/service.ts:3113
if (depth === 0) {
return content.slice(start, i + 1);
}
}
}
return null;
}
/**
* 标准化评估响应(统一结构)
*/
private normalizeEvaluationResponse(
data: any,
type: EvaluationType,
metadata?: EvaluationResponse['metadata']
): EvaluationResponse {
if (!data || typeof data !== 'object') {
throw new EvaluationParseError('Evaluation result is not a valid object.');
}
if (data.score === undefined || data.score === null) {
throw new EvaluationParseError('Evaluation result is missing the "score" field.');
}
// 提取分数(0-100,整数)
const extractScore = (value: any, fieldName: string): number => {
if (value === undefined || value === null) {
throw new EvaluationParseError(`Evaluation result is missing score for "${fieldName}".`);
}
const num = typeof value === 'number' ? value : parseInt(String(value));
if (isNaN(num)) {
throw new EvaluationParseError(`Invalid numeric score for "${fieldName}": ${value}`);
}
return Math.max(0, Math.min(100, num));
};
View on GitHub (pinned to 3e677b1d9f)
Solutions
- Log the raw content and the extracted data to see the actual shape returned
- Adjust the judge prompt to return a full JSON object with a score field
- Wrap in retry with stricter instructions or a different judge model
Defensive patterns
Strategy: type-guard
Validate before calling
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) skipOrFlag(rawContent);
Type guard
function isScoreObject(v: unknown): v is Record<string, unknown> { return typeof v === 'object' && v !== null && !Array.isArray(v); } Try / catch
try { ... } catch (e) { if (e instanceof EvaluationParseError) { /* log raw content, adjust prompt, retry once */ } else throw e; } Prevention
- Prompt the judge to return a JSON object, never a bare value
- Validate extracted JSON shape before passing to normalization
When it happens
Trigger: The judge model returns a bare number/string (e.g. just "85") or an array, and it is fed into normalization; or JSON extraction grabs a non-object fragment from the output.
Common situations: Models answering with only the score; extraction regex capturing a JSON scalar; prompt template changed so the model returns a different top-level shape.
Related errors
- Failed to parse evaluation result: no valid score JSON or re
- Evaluation result is missing the "score" field.
- Evaluation result is missing score for "${fieldName}".
- Invalid numeric score for "${fieldName}": ${value}
- Evaluation result is missing a valid overall score.
AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27).
Data as JSON: /api/errors/71a6918ae47479c6.
Report an issue: GitHub.