RnD · Линия доказательств Technical R&D
Каталог и оглавление
TECH.DOC RnD/technical/2026-07-26-flash-llm-core-evaluation/SOLUTION.md raw.md ->

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.tsprepare, status и evaluate CLI.
  • 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-cloud MCP;
  • 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, пока:

  1. все 12 raw responses не оценены;
  2. все четыре narration cells не имеют human score 0, 1 или 2 в manual-review.json, а выбранная модель не получила 2 на обоих языках;
  3. 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-задачей.