Files
contracts/History/sessions/session-11-process-cfm.md
T

1.7 KiB

Сессия 11 — process.cfm: один запрос вместо N+1

Дата: 2026-06-19

Проблема

Сравнение на Lucee занимало 264.6с. Причина:

  1. Браузер делал N+1 HTTP-запросов — по одному fetch('/extractor.cfm') на каждый допник + отдельный fetch('/differ.cfm'). Каждый экстрактор вызывал cfhttp timeout=120 к LLM.
  2. Не было проверки на уже извлечённые — каждый запуск заново гонял LLM для всех допников.
  3. Не было DELETE перед INSERT — плодились дубликаты.
  4. DEFAULT_PROMPT различался — в Python {{ (двойные скобки), в Lucee { (одинарные).

Решение

process.cfm (новый)

Один эндпоинт, аналог Python /llm/process/<cid>:

  • GET /process.cfm?contract_id=X
  • Сервер внутри обходит все допники:
    • Проверяет spec_rows → если есть, skip
    • textify → LLM → parse → DELETE + INSERT
  • Затем differ на свежих данных
  • requesttimeout=600
  • Все ключи JSON в UPPERCASE (как ждёт JS)

index.cfm (JS)

Вместо:

for (supplements) { await fetch('/extractor.cfm?...'); }
await fetch('/differ.cfm?...');

Стало:

await fetch('/process.cfm?contract_id=...');
// один ответ: {OK, EXTRACTED, ALL_CHANGES}

extractor.cfm

DEFAULT_PROMPT: {{"rows":[...]}} вместо {"rows":[...]} — как в Python.

Версия

v1.0.47 → v1.0.49

Деплой

git push origin master → Lucee k8s