4.0 KiB
4.0 KiB
Резюме для нового чата — contracts (contractor/Lucee)
Дата: 2026-06-23 | Версия в git: v1.0.152 | Версия на Lucee: v1.0.152 (после редеплоя)
Архитектура
Браузер (contractor.luceek8s.dev.nubes.ru)
│
├── загрузка файлов → VM (contracts.kube5s.ru/upload)
│ Python convert_server.py, чанки 10KB → chunk.cfm → Lucee DB
│
├── парсинг: PDF→VM (PyPDF2), DOCX/DOC→Lucee (Apache POI через parser.cfm)
│
├── сравнение → VM SSE /process-v2 → LLM (gpt-oss-120b)
│
└── промпты → Lucee prompt.cfm (версионные, extract/diff)
Компоненты:
- Lucee 6.0 (CFML) на k8s —
contractor.luceek8s.dev.nubes.ru - VM Python 3 —
contracts.kube5s.ru(5.172.178.213) - PostgreSQL 15 — внутренний, БД
baza - LLM: gpt-oss-120b через api.aillm.ru (бесплатно, 8000 токенов)
- Nginx:
/upload,/process-v2,/unzip-upload,/convert-doc→ VM:8766
Что сделано (v1.0.109 → v1.0.152)
Успешно работает
- Upload через VM чанками (10KB) — обходит лимит Lucee k8s (~30KB)
- ZIP через /unzip-upload (VM)
- PDF парсинг через PyPDF2 на VM
- Prompts в БД с версионированием, редактор в UI
- Opus-улучшенные промпты (few-shot, глоссарий ЦОД)
- Provenance: prompt_version, source_document_id, raw_llm_response в spec_events
- ↕ стрелки для порядка файлов
- О сервисе — модальное окно
Критические баги исправлены
- JS: UPPERCASE ключи Lucee (OK, BODY, VERSIONS, IS_ACTIVE...)
- JS: лишний
});ломавший весь JS - CORS: дубликаты заголовков на /upload и /unzip-upload
- chunk.cfm:
decode(base64)для правильного хранения файлов - parser.cfm: откачен к рабочей версии (PDF→VM, DOCX→Lucee POI)
Текущее состояние (v1.0.152)
- VM: Python, чанки base64, PDF парсинг ✅
- Lucee: v1.0.152, parser.cfm рабочий, chunk.cfm с base64 ✅
- PDF: загрузка + парсинг работают ✅
- DOCX/DOC: должно работать после v1.0.152 (base64 fix) ✅
- Prompts: работают ✅
Проблемы решённые сегодня
- PDF upload: "Network Error" → chunked upload через VM (10KB чанки)
- PDF parsing: PDFBox сломан → PyPDF2 на VM
- DOCX storage: hex вместо base64 → base64 в chunk.cfm
- CORS дубликаты → nginx только OPTIONS, VM — POST
- JS uppercase keys → исправлено
Правила (важно!)
- ⛔ НИКОГДА ничего не делать без «делай»
- После каждой правки: проверка синтаксиса (node --check для JS, py_compile для Python)
- После каждого изменения: bump версии в index.cfm
- Перед push: git diff, проверить всё
- Lucee требует ручного редеплоя через Nubes UI
- VM: scp + pkill + nohup для перезапуска
- curl к *.ngcloud.ru всегда с --http2 и --max-time
- Lucee serializeJSON → UPPERCASE ключи
- Lucee k8s лимит тела запроса ~30KB
- Документация в History/*.md
Если что-то сломалось
- Проверить git status в /home/naeel/nubes/contracts/contractor
- Проверить версию на Lucee: curl --http2 --max-time 5 -s 'https://contractor.luceek8s.dev.nubes.ru/' | grep 'v1.0.'
- Проверить VM: ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 'ps aux | grep convert'
- Логи nginx: ssh ... 'sudo tail -20 /var/log/nginx/error.log'
- Тест загрузки: curl --http2 -X POST 'https://contracts.kube5s.ru/upload' -F 'files=@file.pdf'