2.6 KiB
2.6 KiB
Архитектура contracts-flask
Компоненты
Браузер
│
▼
check.kube5s.ru (nginx)
│
├── /, /static/*, /templates/*
│ → Managed Flask (contractor.pythonk8s.services.ngcloud.ru)
│ Отдаёт HTML + JS. JS в браузере делает API-запросы.
│
└── /api/*, /upload, /llm-ops, /process-v2, /convert-doc, /unzip-upload
→ ВМ :8777 (convert_server.py)
Python http.server → PostgreSQL (contracts_check)
→ LLM (api.aillm.ru, gpt-oss-120b)
Пайплайн
1. Загрузка
JS (FormData) → /upload → parse.py (pdfplumber/python-docx)
→ elements_json → documents (БД)
2. Классификация
JS → /api/classify-batch → classify.py (LLM)
→ doc_type, own_number, parent_number, counterparty, doc_date
3. Группировка
JS → /api/groups → grouping.py (детерминированная)
→ группы по контрактам (нормализация номеров)
4. Сравнение
JS → /process-v2 (SSE) → process.py → llm.py (LLM)
→ ops (ADD/UPDATE/DELETE/UNRESOLVED)
→ spec_events + spec_current (event sourcing)
5. Чат
JS → /chat → Flask → /api/spec-current (ВМ)
→ контекст строк → LLM → ответ
Вход/Выход
| Этап | Вход | Выход |
|---|---|---|
| Загрузка | .docx/.pdf/.doc/.zip (FormData) | elements_json в БД |
| Классификация | elements_json | doc_type, номер, дата, контрагент |
| Группировка | classified documents | группы по contract_number |
| Сравнение | группа документов + spec_current | ops: ADD/UPDATE/DELETE/UNRESOLVED |
| Чат | вопрос + spec_current | текст ответа |
БД
- PostgreSQL
contracts_check(изолирована от продаbaza) - Таблицы: documents, contracts, supplements, spec_current, spec_events, prompts, upload_chunks
LLM
- gpt-oss-120b через api.aillm.ru (бесплатно)
- Используется: классификация, извлечение, сравнение, чат
Изоляция от прода
| Lucee (прод) | Flask (тест) | |
|---|---|---|
| Домен | contracts.kube5s.ru | check.kube5s.ru |
| ВМ порт | 8766 | 8777 |
| БД | baza | contracts_check |
| Код ВМ | ~/contracts/ | ~/contracts-check/ |
| Репо ВМ | contractor/deploy/ | contracts-flask/deploy/ |