MCPcopy Create free account
hub / github.com/openai/plugins / renderEvaluation

Function renderEvaluation

plugins/plugin-eval/src/renderers/markdown.js:253–313  ·  view source on GitHub ↗
(payload)

Source from the content-addressed store, hash-verified

251}
252
253function renderEvaluation(payload) {
254 const result = ensureEvaluationPayload(payload);
255
256 return [
257 `# Plugin Eval Report: ${result.target.name}`,
258 "",
259 section("At a Glance", [
260 `- Score: ${result.summary.score}/100`,
261 `- Grade: ${result.summary.grade}`,
262 `- Risk: ${result.summary.riskLevel}`,
263 `- Checks: ${result.summary.checkCounts.fail} fail, ${result.summary.checkCounts.warn} warn, ${result.summary.checkCounts.info} info`,
264 `- Active budget: ${result.budgets.trigger_cost_tokens.value + result.budgets.invoke_cost_tokens.value} tokens (${result.budgets.invoke_cost_tokens.band})`,
265 `- Observed usage: ${result.observedUsage?.sampleCount ? `${result.observedUsage.sampleCount} sample${result.observedUsage.sampleCount === 1 ? "" : "s"}` : "not supplied"}`,
266 ]),
267 "",
268 section("Why It Matters", result.summary.whyBullets.map((item) => `- ${item}`)),
269 "",
270 section("Fix First", renderFindingList(result.summary.fixFirst, "No urgent fixes were identified.")),
271 "",
272 section("Recommended Next Step", renderNextAction(result.nextAction)),
273 "",
274 section("Details", [
275 detailsBlock("Watch next", renderFindingList(result.summary.watchNext, "No secondary findings queued.")),
276 detailsBlock(
277 "Improvement brief",
278 [
279 `- ${result.improvementBrief?.summary || "No improvement brief available."}`,
280 ...(result.improvementBrief?.goals?.length > 0
281 ? result.improvementBrief.goals.map((item) => `- Goal: ${item}`)
282 : []),
283 ...(result.improvementBrief?.measurementGoals?.length > 0
284 ? result.improvementBrief.measurementGoals.map((item) => `- Measure: ${item}`)
285 : []),
286 ...(result.improvementBrief?.suggestedPrompt
287 ? [`- Suggested prompt: ${result.improvementBrief.suggestedPrompt}`]
288 : []),
289 ].join("\n"),
290 ),
291 detailsBlock(
292 "Budgets and observed usage",
293 [renderBudgets(result.budgets), "", renderObservedUsage(result.observedUsage)].join("\n"),
294 ),
295 detailsBlock("Measurement plan", renderMeasurementPlan(result.measurementPlan)),
296 detailsBlock("Use From Codex Chat", renderWorkflowGuide(result.workflowGuide)),
297 detailsBlock("Checks", renderChecks(result.checks)),
298 detailsBlock("Metrics", renderMetrics(result.metrics)),
299 detailsBlock("Score details", [
300 `- Starting score: ${result.summary.scoreBreakdown.startingScore}`,
301 `- Total deductions: -${result.summary.scoreBreakdown.totalDeductions}`,
302 `- Final score: ${result.summary.scoreBreakdown.finalScore}`,
303 ...(result.summary.riskReasons?.length > 0
304 ? result.summary.riskReasons.map((item) => `- Risk: ${item}`)
305 : []),
306 "",
307 renderDeductions(result.summary),
308 "",
309 renderCategoryDeductions(result.summary),
310 ].join("\n")),

Callers 1

renderMarkdownFunction · 0.85

Calls 15

ensureEvaluationPayloadFunction · 0.85
renderFindingListFunction · 0.85
detailsBlockFunction · 0.85
renderBudgetsFunction · 0.85
mapMethod · 0.80
filterMethod · 0.80
sectionFunction · 0.70
renderNextActionFunction · 0.70
renderObservedUsageFunction · 0.70
renderMeasurementPlanFunction · 0.70
renderWorkflowGuideFunction · 0.70
renderChecksFunction · 0.70

Tested by

no test coverage detected