Solution: Flash LLM core evaluation
Выбранный подход#
Один parameterized Comfy API workflow выполняет ровно один model call и сохраняет raw string. TypeScript harness строит immutable request matrix, генерирует prompts/workflows, хеширует входы и локально оценивает уже сохранённые ответы. Provider не получает authority над rules, RNG, state или event log.
Архитектура и поток данных#
preregistered manifest
-> role fixture + prompt template
-> one OpenRouterLLMNode
-> SaveText raw artifact
-> SHA-256 + response metadata
-> safe JSON boundary
-> role-specific deterministic scorer
-> human narration review + sequential billing audit
-> derived scorecard
Scenario использует richer authoring contract. Intent и narration используют runtime vertical-slice contracts. Между ними нет скрытого compiler/mapping: это три независимые eval lanes.
Структура прототипа#
manifest.ts— exact models/languages/roles/repeat/seed и request IDs.prompts.tsиprompts/*.txt— role fixtures и versioned instructions.evaluation.ts— Comfy workflow builder, safe parse и deterministic scorers.run.ts—prepare,statusиevaluateCLI.run.test.ts— manifest, workflow, trust-boundary и scoring behavior.artifacts/raw/— immutable provider replies, optional telemetry,manual-review.jsonиbilling-audit.jsonпосле разрешённого запуска.artifacts/derived/— versioned preflight manifests, run protocols, job logs и scorecards.
Требования#
- macOS или Linux с network access;
- Node.js 24.14.0 и npm 11.9.0;
- Codex CLI 0.145.0;
- зависимости root
package-lock.json; - authenticated official
comfy-cloudMCP; - Comfy
OpenRouterLLMNodeиSaveText; - credits только после отдельного согласия на pre-registered matrix и soft cap.
Установка#
Из корня репозитория:
npm ci
Запуск#
Локальная подготовка, не расходующая credits:
node RnD/technical/2026-07-26-flash-llm-core-evaluation/prototype/run.ts prepare
Default CLI paths по-прежнему указывают на исторические preflight-v1/run-1
artifacts и не используются для новых correction runs. Default evaluate
читает artifacts/raw/run-1:
node RnD/technical/2026-07-26-flash-llm-core-evaluation/prototype/run.ts evaluate
Historical correction run-2 использовал отдельный preflight-v2: 8 paid scenario+intent jobs и 4 byte-identical narration files из run-1. Позднейший audit обнаружил answer leakage/false positives, поэтому его model-selection вывод superseded.
Current run-3 использует protocol revision 3 и custom paths для подготовки и оценки:
node --input-type=module -e '
import {
evaluateSavedResponses,
prepareEvaluation,
} from "./RnD/technical/2026-07-26-flash-llm-core-evaluation/prototype/run.ts";
await prepareEvaluation(
"RnD/technical/2026-07-26-flash-llm-core-evaluation/artifacts/derived/preflight-v3",
);
await evaluateSavedResponses(
"RnD/technical/2026-07-26-flash-llm-core-evaluation/artifacts/raw/run-3",
"RnD/technical/2026-07-26-flash-llm-core-evaluation/artifacts/derived/run-3-scorecard.json",
);
'
Run-3 reruns all 12 provider cells; prior outputs не переиспользуются.
Parallel OAuth dry-run получил refresh-token race, после чего dry-run
повторялся строго последовательно. Paid execution был одним
submit_batch на 12 jobs, не sequential per-job billing workflow.
Scorecard schema flash-core-eval-scorecard/v2 не может выдать strict pass,
пока:
- все 12 raw responses не оценены;
- все четыре narration cells не имеют human score
0,1или2вmanual-review.json, а выбранная модель не получила2на обоих языках; billing-audit.jsonне содержит ровно 12 последовательных balance before/after records в порядке manifest и подтверждённую дельту не выше согласованных 15 credits.
Manifest schema v2 включает protocolRevision: 3, поэтому run-3 logical
manifestHash
a758d221a63eb2f2600af570d8431764597bd8c3ae75d4960d94d8963e0ebfb8
отличается от prior revisions. Полный preflight-v3 manifest SHA
9780519911a6c7fc2ed3d6efacf292899a321d8156c0c36ec71ff3c553c2d8f3
дополнительно связывает каждый prompt/workflow hash и является bundle
identity.
До scorer amendment canonical scorecard имел SHA-256
08236755f6113150d5f24a8a13cf6457c7a96b8aebc16ac945a454b3fbbf2665.
Его полные serialized bytes восстановлены после review в
artifacts/derived/run-3-scorecard-pre-amendment.json; hash совпадает с
зафиксированным до regeneration. Artifact помечен как byte-exact
reconstruction, а не original write-once snapshot.
Run-3 manual review и billing audit отсутствуют, поэтому scorecard остаётся
inconclusive. Agent semantic audit хранится отдельно и не является
reviewerKind: "human".
Минимальные формы дополнительных raw artifacts:
{
"schemaVersion": "flash-core-eval-manual-review/v1",
"manifestHash": "run-3 logical manifestHash",
"reviewerKind": "human",
"reviewedAt": "ISO-8601 timestamp",
"scores": {
"narration-request-id": 2
}
}
{
"schemaVersion": "flash-core-eval-billing-audit/v1",
"manifestHash": "run-3 logical manifestHash",
"approvedAt": "ISO-8601 timestamp",
"approvedCapCredits": 15,
"jobs": [
{
"requestId": "manifest request id",
"balanceBeforeCredits": 0,
"balanceAfterCredits": 0,
"checkedAt": "ISO-8601 timestamp"
}
]
}
Значения баланса в примере показывают только тип поля, а не ожидаемый или фактический расход.
Тестирование#
node --test RnD/technical/2026-07-26-flash-llm-core-evaluation/prototype/run.test.ts
npm run test:technical
npm run typecheck
npm run validate:technical
Конфигурация#
Секретов и environment variables нет. OAuth управляется Codex/Comfy MCP и не сохраняется в study. Exact generation parameters находятся в immutable manifest:
seed: 20260726;reasoning_effort: off;- один call на workflow.
OpenRouterLLMNode не exposes output-token cap; этот факт нельзя маскировать
как hard budget.
Preregistered cost protocol требовал live get_billing_status до первого
workflow run. Generation tools позднее стали доступны, но billing method в
текущем toolset отсутствовал; поэтому run-1/run-2/run-3 credit delta остаётся
Unknown, а наличие строки enabled, OAuth само по себе billing audit не
доказывает.
Ограничения и безопасность#
- Paid execution не запускается из unit tests или
npm run check. - Raw artifacts не содержат user data: только original test fixtures.
- JSON fences, prose around JSON и malformed shapes отклоняются.
- Model-proposed difficulty проверяется против fixed oracle; current runtime contract ещё не derives difficulty из trusted scenario policy.
- Narration получает actor projection и committed event, но runtime пока не имеет отдельной event-projection функции для произвольной аудитории.
- Balance polling — soft control, не atomic spend cap.
- Missing/invalid manual или billing evidence принудительно оставляет outcome
inconclusive; nullable provider telemetry отдельно публикуется как Unknown. - Run-3 logical hash включает protocol revision, а полный manifest file SHA дополнительно связывает prompt/workflow hashes.
- Scenario compiler доказывает structural graph validity, но не исполняет free-text exit predicates и не измеряет story coherence/host fit.
- Privacy check обнаруживает exact hidden tokens, но не translated/paraphrased leakage.
- Regex scorer не закрывает open-ended grounding hallucinations; agent semantic audit не заменяет human naturalness review.
Условия переноса в production#
Ни одна модель run-3 не прошла bilingual 6/6, поэтому provider winner не выбран. Нужны multi-seed repeats, executable/coherence scenario evaluation, semantic + human narration grounding, paraphrase-aware privacy corpus, provider retry/error telemetry, hard output/cost control, event visibility projection, trusted difficulty policy и authoring-to-runtime compiler. Перенос оформляется отдельной production-задачей.