Pin the polygon environment: one commented requirements file with the heavy embedding extra split out, interpreter version declared, README rule five corrected

This commit is contained in:
heaven 2026-08-03 02:02:26 +03:00
parent 48ea521a0e
commit f66518a860
4 changed files with 96 additions and 1 deletions

1
eval/.python-version Normal file
View file

@ -0,0 +1 @@
3.14.4

View file

@ -57,7 +57,7 @@
2. **Претрейн-контаминация:** вся классика (Лу Синь/Акутагава/Уэллс) в претрейне моделей — C0 частично выдаёт канон, эхо систематично (deepseek 13/24 zh-чанков). Выводы на классике = предварительные; решающие замеры — на вебновелл-корпусе владельца. 2. **Претрейн-контаминация:** вся классика (Лу Синь/Акутагава/Уэллс) в претрейне моделей — C0 частично выдаёт канон, эхо систематично (deepseek 13/24 zh-чанков). Выводы на классике = предварительные; решающие замеры — на вебновелл-корпусе владельца.
3. **Тест ставится, только если его исход может перевернуть решение** и не установлен литературой (урок снятого exp05). 3. **Тест ставится, только если его исход может перевернуть решение** и не установлен литературой (урок снятого exp05).
4. **LLM-судьи:** ≤23 семейства, 11+ повторов со свапом позиций, Bradley-Terry/медиана, судья не судит выходы своего семейства (D13.3); κ против человеческого IAA, не «средняя корреляция». 4. **LLM-судьи:** ≤23 семейства, 11+ повторов со свапом позиций, Bradley-Terry/медиана, судья не судит выходы своего семейства (D13.3); κ против человеческого IAA, не «средняя корреляция».
5. Env: `eval/.venv` (torch-cpu, sentence-transformers, openai, dotenv, pymorphy3); ключи скрипты читают из `eval/.env` сами. Стенд: GTX 1070 8GB — модель полигона `qwen3-abliterated:30b-a3b` в ollama не выселять без нужды; **localhost из-под прокси даёт 403** — для локальных вызовов no-proxy. 5. **Env — источник истины `eval/requirements.txt`** (у каждой строки комментарий «зачем и где»; интерпретатор — `.python-version`). Установка: `python3 -m venv .venv && .venv/bin/pip install -r requirements.txt`. Эмбеддинг-бенч (`retrieval_bench.py`) тянет ~2.5 ГБ ОТДЕЛЬНО — `requirements-embed.txt` (версии там намеренно не проставлены). ⚠ Замок снят 03.08.2026 с живого стенда Ubuntu 26.04 / CPython 3.14.4 и **не является стендом закрытых exp1216/promptlang** (те шли на Ubuntu 24 / ~3.12, версии не сохранились) — перепрогон на нём это НОВЫЙ замер, не репродукция. Ключи скрипты читают из `eval/.env` сами. Не офлайн: `tokenizers` ждёт файлы в `eval/tokenizers/` (gitignore, на чистой машине их нет), `tiktoken.get_encoding` качает ~4 МБ BPE при первом вызове. Стенд: GTX 1070 8GB — модель полигона `qwen3-abliterated:30b-a3b` в ollama не выселять без нужды; **localhost из-под прокси даёт 403** — для локальных вызовов no-proxy.
6. `data/` в .gitignore (коммитится только код) — критичные результаты дублируй цифрами в `docs/experiments/`. 6. `data/` в .gitignore (коммитится только код) — критичные результаты дублируй цифрами в `docs/experiments/`.
7. **Экстракция прод-выходов — ТОЛЬКО через `tmctl export` (D39.5, инвариант №8 backend/README):** сырое чтение чекпоинтов store (records.json-стиль) отдаёт НЕнормализованные байты (без export-contract слоя) и молча-неполную книгу (без manifest-join/drift-гарда). `--plaintext` для глаз, дефолтный JSON для скриптов. Прежний путь `final_hash→response_text` — только для форензики сырья, не для оценки качества. 7. **Экстракция прод-выходов — ТОЛЬКО через `tmctl export` (D39.5, инвариант №8 backend/README):** сырое чтение чекпоинтов store (records.json-стиль) отдаёт НЕнормализованные байты (без export-contract слоя) и молча-неполную книгу (без manifest-join/drift-гарда). `--plaintext` для глаз, дефолтный JSON для скриптов. Прежний путь `final_hash→response_text` — только для форензики сырья, не для оценки качества.
8. **Аномалия провайдера ≠ повод гадать:** странный отказ (интермиттентный 404/5xx, новый `finish_reason`, молча игнорируемые параметры) → сначала официальная дока вендора (deprecations/changelog/status) + свежий /models живьём, потом диагноз; в отчёт оба слоя — наблюдение И вендор-факт с датой/URL. Урок: 404-флейки gemini-2.5-flash оказались предвестником EOL всей 2.5-серии 16.10.2026 (research/15 → фактчек 10.07; правило — шапка `00-provider-quirks.md`). 8. **Аномалия провайдера ≠ повод гадать:** странный отказ (интермиттентный 404/5xx, новый `finish_reason`, молча игнорируемые параметры) → сначала официальная дока вендора (deprecations/changelog/status) + свежий /models живьём, потом диагноз; в отчёт оба слоя — наблюдение И вендор-факт с датой/URL. Урок: 404-флейки gemini-2.5-flash оказались предвестником EOL всей 2.5-серии 16.10.2026 (research/15 → фактчек 10.07; правило — шапка `00-provider-quirks.md`).

View file

@ -0,0 +1,29 @@
# eval/ — тяжёлый экстра: эмбеддинг-бенч памяти. Ставится ПОВЕРХ requirements.txt:
# .venv/bin/pip install -r requirements-embed.txt
#
# Вынесено отдельно по одной причине — это ~2.5 ГБ ради ОДНОГО скрипта. Единственный
# потребитель — retrieval_bench.py, и все три импорта у него ФУНКЦИОНАЛЬНЫЕ, а не
# модульные, поэтому без этого файла падает ровно он и ровно на входе в эти функции:
# retrieval_bench.py:93 from sklearn.metrics import roc_auc_score (в threshold_analysis)
# retrieval_bench.py:153 from sentence_transformers import ... (в run_embed_model)
# retrieval_bench.py:223 from rank_bm25 import BM25Okapi (в run_bm25)
# Модульный там только `import numpy` (:34) — он уже в базовом наборе.
#
# torch НИГДЕ не импортируется напрямую (проверено обходом AST по всем 158 файлам) —
# приходит транзитивно через sentence-transformers, поэтому в базовом файле ему не место.
#
# ⚠ ВЕРСИИ НЕ ПРОСТАВЛЕНЫ НАМЕРЕННО: этих пакетов в стенде нет
# (import sklearn / sentence_transformers / rank_bm25 / torch → ModuleNotFoundError),
# а версия из памяти — выдумка. Пины проставить с ПЕРВОЙ реальной установки.
#
# ⚠ CPU-сборка torch ставится с --extra-index-url https://download.pytorch.org/whl/cpu
# — решать при первом реальном прогоне, не заранее.
#
# Под CPython 3.14 колёса есть у всех (сверено на PyPI 02.08.2026: torch
# cp314-manylinux_2_28_x86_64, scikit-learn cp314, sentence-transformers и rank_bm25 —
# чистый Python), так что 3.14 сам по себе не блокер.
sentence-transformers
torch
scikit-learn
rank_bm25

65
eval/requirements.txt Normal file
View file

@ -0,0 +1,65 @@
# eval/ — зависимости полигона.
#
# Установка: python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
# Интерпретатор: см. .python-version (3.14.4).
# Эмбеддинг-бенч (retrieval_bench.py) тянет ~2.5 ГБ отдельно — requirements-embed.txt.
#
# СТЕНД 03.08.2026: Ubuntu 26.04 / CPython 3.14.4. Каждая версия сверена ИСПОЛНЕНИЕМ
# против реальных call-site'ов (compat-прогон 03.08), а не взята из памяти.
#
# ⚠ ЭТО НЕ СТЕНД ЗАКРЫТЫХ exp1216 / promptlang / rerun2. Те шли 12.0701.08 на
# Ubuntu 24 / CPython ~3.12 с НЕИЗВЕСТНЫМИ версиями: манифеста тогда не было, .venv и
# data/ в .gitignore. Единственный уцелевший след — `openai 2.44.0` (комментарий
# rerun2_judge/judge.py:33, 24.07). Следствие: перепрогон на этих пинах — НОВЫЙ замер,
# а не репродукция ратифицированных вердиктов (D30/D32/D37/D38/D39.22/D39.61).
# Цифры живут в docs/experiments/, не здесь.
#
# Здесь только то, что импортируется КОДОМ напрямую. Часть строк пришла бы и
# транзитивно (PyYAML через huggingface-hub, regex/requests через tiktoken, numpy через
# scipy) — объявлены ЯВНО намеренно: код импортирует их сам, и смена чужого дерева
# зависимостей не должна их унести.
# --- вызовы моделей -------------------------------------------------------------
# 12 файлов, все через `from openai import OpenAI` (rerun2_judge/judge.py:33,
# exp15/exp15_llm.py:22). Проверено: extra_body кладёт квирк-ключи ПЛОСКО в тело
# (00-provider-quirks.md на этом стоит), max_tokens и max_completion_tokens оба живы
# и SDK их не переписывает, DeepSeek-овый `prefix: true` в сообщении не срезается.
openai==2.52.0
# 14 файлов читают eval/.env сами.
python-dotenv==1.2.2
# --- данные и разбор ------------------------------------------------------------
# 21 файл. Везде safe_load (`yaml.load(` — 0 вхождений), поэтому слом PyYAML 6.x не кусает.
# Байт-стабильность дампа сида держится на dump(allow_unicode, sort_keys, width) —
# exp15/gender_transport.py:37, exp14b/exp14b_reseed_promote.py:25.
PyYAML==6.0.3
# 8 файлов. НЕСУЩЕЕ: классы письменностей \p{Han}/\p{Cyrillic}, которые stdlib re
# не компилирует вовсе — это паритет с Go unicode.Han/Hiragana (exp15/mem_select.py:32).
regex==2026.7.19
# 6 файлов: русская морфология (pilot/declmetric.py:35, pkg7/rubric_probe.py:83).
# Тянет pymorphy3-dicts-ru (словарь) и setuptools (требование самого pymorphy3 на py>=3.12).
pymorphy3==2.0.6
# --- счёт и статистика ----------------------------------------------------------
# 6 файлов (retrieval_bench.py:34, exp15/fertility_calib.py:15). Все 18 используемых
# атрибутов живы в 2.x; ни одного удалённого имени (np.float_/np.NaN/np.trapz/…) в коде нет.
numpy==2.5.1
# 3 файла — только пере-анализы exp15 (stats.t, ttest_1samp).
scipy==1.18.0
# --- токенизация ----------------------------------------------------------------
# token_calc.py:35, exp14/exp14_common.py:141 — ТОЛЬКО Tokenizer.from_file
# (from_pretrained: 0 вхождений, сети не будет). Тянет huggingface-hub/hf-xet/fsspec.
# ⚠ сами файлы токенизаторов в eval/tokenizers/ (gitignore) — на чистой машине их нет.
tokenizers==0.23.1
# token_calc.py:29. ⚠ get_encoding при первом вызове КАЧАЕТ ~4 МБ BPE-таблицы
# с openaipublic.blob.core.windows.net — $0 и не провайдер, но офлайн не отработает.
tiktoken==0.13.0
# exp15/preflight_models.py:54 — единственный call-site, живой фактчек /models.
requests==2.34.2