Rubber Duck MCP — отчёты

🦆 Rubber Duck MCP — отчёт тестирования

MCP: {report.mcpUrl}  ·  Моделей: {models.length}  ·  Дата: {report.generatedAt}

Сводка по моделям

{#each models as m (m)} {@const g = perModel[m]} {/each}
Модель Контроль Мысли Слепая Помощник Средняя acc Размечено Утка Вызовов ср. токены out
{modelShort(m)} {scenarioAccuracy(m, 'control')}% {scenarioAccuracy(m, 'thinking')}% {scenarioAccuracy(m, 'blind')}% {scenarioAccuracy(m, 'mentor')}% {g.accuracy}% {g.reviewed} / {g.totalRows} {g.duckUsed} {g.toolCalls} {g.avgGenTokens}
{#if review.pending > 0}
⚠ Не все ответы размечены: {review.reviewed} проверено, {review.pending} ожидают ревью (показаны символом «?»).
{/if}

Агрегат по сценариям (все модели)

{#each SCENARIO_NAMES as key (key)} {@const agg = perScenarioAgg[key]} {#if agg}
{SCENARIO_LABELS[key]}
{SCENARIO_DESCS[key]}
{agg.accuracy}%
{#if agg.pending > 0}
неразмечено: {agg.pending}
{/if}
Верных {agg.correct} / {agg.reviewed} размечено из {agg.tasks}
Утка (MCP) {agg.tasks ? Math.round((agg.duckUsed / agg.tasks) * 100) : 0}% в {agg.duckUsed} из {agg.tasks} задач
quack / задачу {agg.avgCalls} вызовов в среднем
{#each Object.entries(agg.byModel) as [m, g] (m)}
{modelShort(m)}{g.reviewed ? '' : ' (?)'}
{g.accuracy}%
{/each}
{/if} {/each}
{#if Object.keys(report.prompts || {}).length}
Промпты (то, что передаётся модели)
{#each SCENARIO_NAMES as key (key)} {@const p = report.prompts?.[key]} {#if p}
{SCENARIO_LABELS[key]}
{p}
{/if} {/each}
{/if}
{#each SCENARIO_NAMES as key (key)} {/each} показано: {filtered.length} из {rows.length}
{#each filtered as r (r.model + r.id + r.scenario)} {/each}
Модель # Сценарий Утка Вопрос Ожид. in/out Ответ модели
{modelShort(r.model)} {r.id} {SCENARIO_LABELS[r.scenario]} {resultText(r.correct)} {r.duckUsed ? '🦆' : '—'} ({r.toolCalls}) {r.question} {r.expected} {r.promptTokens} / {r.genTokens} {r.response}