Skip to content

Commit 3a3114f

Browse files
committed
docs(local): make full-source demo the delivery path
1 parent 34791cf commit 3a3114f

6 files changed

Lines changed: 375 additions & 35 deletions

File tree

‎LOCAL_DEMO.md‎

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
# Локальный запуск NL→SQL (full-source)
2+
3+
Рекомендуемый способ **доставки и демо** — полный исходный checkout на
4+
локальной машине владельца, со **своими** ключами провайдера. UI, Streamlit-режим
5+
и продуктовый pipeline те же, что в приложении; Hugging Face не нужен для
6+
запуска.
7+
8+
Launcher: [`scripts/run_local_demo.py`](scripts/run_local_demo.py)
9+
10+
- все **12** SQLite-баз (полный registry);
11+
- полный Chroma-индекс (`schema_chunks` + few-shot);
12+
- штатный Streamlit UI на loopback `127.0.0.1` (порт по умолчанию `8501`);
13+
- генератор по умолчанию: `mistral` / `codestral-latest`;
14+
- ключ только из gitignored `.env` или из окружения процесса — **не** из CLI.
15+
16+
HF publish/filter/upload/prune и `scripts/deploy_hf.py` — **опциональный
17+
исторический** tooling. Он не вызывается локальным launcher'ом и не является
18+
активным путём доставки.
19+
20+
## Два уровня checkout
21+
22+
| Уровень | Что в дереве | Когда хватает |
23+
|---|---|---|
24+
| **Clone-first** | **9** небольших SQLite DB + prebuilt `chroma_data/` | быстрый smoke UI (`streamlit run app/streamlit_app.py`) |
25+
| **Full-source local** | **все 12** SQLite DB + Chroma, покрывающий те же 12 id | `scripts/run_local_demo.py` (рекомендуемый full demo) |
26+
27+
Чистый git-клон **не** равен full-source: три крупные BIRD-базы не едут в GitHub
28+
из-за лимита размера. На уже подготовленной машине (все 12 + полный индекс)
29+
шаги download/reindex повторять не нужно.
30+
31+
## Требования
32+
33+
- Windows PowerShell 5.1 или новее (команды ниже совместимы с 5.1);
34+
- Python 3.13;
35+
- `uv`;
36+
- собственный `MISTRAL_API_KEY` (embeddings всегда идут через Mistral).
37+
38+
```powershell
39+
python --version
40+
uv --version
41+
```
42+
43+
## Быстрый запуск (full-source)
44+
45+
### 1. Корень репозитория
46+
47+
Выполняйте команды из **корня клона** (каталог, где лежат `app/`, `scripts/`,
48+
`pyproject.toml`). Конкретный путь зависит от вашей машины.
49+
50+
```powershell
51+
# Пример (подставьте свой путь к клону):
52+
# Set-Location C:\path\to\NL_SQL
53+
```
54+
55+
### 2. Зависимости
56+
57+
```powershell
58+
uv sync --extra dev --extra ui
59+
```
60+
61+
### 3. API-ключ владельца
62+
63+
Создайте локальный `.env`, только если его ещё нет:
64+
65+
```powershell
66+
if (-not (Test-Path -LiteralPath '.env')) {
67+
Copy-Item -LiteralPath '.env.example' -Destination '.env'
68+
}
69+
notepad .env
70+
```
71+
72+
В `.env` задайте (значение не показывайте в отчётах и скриншотах):
73+
74+
```dotenv
75+
MISTRAL_API_KEY=
76+
```
77+
78+
Заполните ключ вручную. **Не** передавайте его параметром командной строки и
79+
**не** вставляйте секрет в однострочные env-присваивания в документации,
80+
скриптах, логах или скриншотах. `.env` в `.gitignore`; публиковать его нельзя.
81+
82+
### 4. Preflight (без сети)
83+
84+
```powershell
85+
uv run python scripts/run_local_demo.py --check
86+
```
87+
88+
При успехе launcher печатает строку preflight OK: full-source checkout с
89+
**12** SQLite DB + Chroma и подтверждение, что `MISTRAL_API_KEY` настроен
90+
(**значение ключа не печатается**). Пример формы (точная пунктуация может
91+
совпадать с текущим launcher'ом):
92+
93+
```text
94+
[local-demo] preflight OK: full source checkout (12 SQLite DBs + Chroma); MISTRAL_API_KEY configured (value not printed).
95+
```
96+
97+
`--check` не ходит во внешний API и не тратит квоту.
98+
99+
### 5. Запуск UI
100+
101+
```powershell
102+
uv run python scripts/run_local_demo.py
103+
```
104+
105+
Откройте <http://127.0.0.1:8501>.
106+
107+
Launcher копирует Chroma во **временный** каталог (`NL_SQL_CHROMA_DATA_DIR`),
108+
чтобы housekeeping Chroma не пачкал tracked `chroma_data/` в исходном дереве.
109+
110+
## Первый запуск чистого клона → full-source
111+
112+
Если preflight жалуется на неполный набор DB или индекс:
113+
114+
```powershell
115+
uv run python scripts/download_data.py chinook
116+
uv run python scripts/download_data.py bird-mini-dev
117+
uv run python scripts/build_index.py --db all
118+
uv run python scripts/run_local_demo.py --check
119+
```
120+
121+
`build_index.py` вызывает Mistral embeddings и может расходовать квоту вашего
122+
ключа. На полностью подготовленной машине эти шаги не нужны.
123+
124+
## Health-check работающего UI
125+
126+
```powershell
127+
$response = Invoke-WebRequest `
128+
-UseBasicParsing `
129+
-Uri 'http://127.0.0.1:8501/_stcore/health' `
130+
-TimeoutSec 15
131+
$response.StatusCode
132+
$response.Content
133+
```
134+
135+
Ожидается:
136+
137+
```text
138+
200
139+
ok
140+
```
141+
142+
Smoke в UI (расходует квоту SQL/embed провайдера — только осознанно):
143+
144+
1. База `chinook`, режим `Fast`.
145+
2. Вопрос: `How many albums are in the store?`
146+
3. Ожидание: ответ `347`, SQL `SELECT COUNT(*) FROM Album`.
147+
148+
## Остановка
149+
150+
В терминале launcher'а: `Ctrl+C`.
151+
152+
## Другой порт
153+
154+
```powershell
155+
uv run python scripts/run_local_demo.py --port 8502
156+
```
157+
158+
Затем <http://127.0.0.1:8502>.
159+
160+
## SQL-генератор (продуктовое подмножество)
161+
162+
Документированный набор для доставки:
163+
164+
| `NL_SQL_DEFAULT_PROVIDER` | Ключ / условие |
165+
|---|---|
166+
| `mistral` (default) | `MISTRAL_API_KEY` |
167+
| `github_models` | `GITHUB_TOKEN` |
168+
| `groq` | `GROQ_API_KEY` |
169+
| `ollama` | локальный Ollama + `NL_SQL_OLLAMA_GEN_MODEL` |
170+
171+
Пример в `.env`:
172+
173+
```dotenv
174+
NL_SQL_DEFAULT_PROVIDER=mistral
175+
```
176+
177+
Research/internal имена провайдеров в коде (CLI-мосты, browser bridges и т.п.)
178+
**не** рекомендуются как путь доставки.
179+
180+
**Embeddings** всегда требуют `MISTRAL_API_KEY` (`mistral-embed`), в том числе
181+
когда SQL генерирует Ollama.
182+
183+
## Типовые ошибки
184+
185+
### `MISTRAL_API_KEY is not configured`
186+
187+
Проверьте, что `.env` лежит в **корне репозитория** и значение ключа непустое.
188+
Ключ не должен попадать в argv.
189+
190+
### `Full-source database set is incomplete`
191+
192+
Скачайте данные (раздел «Первый запуск чистого клона»).
193+
194+
### `Chroma index is missing` / incomplete index
195+
196+
```powershell
197+
uv run python scripts/build_index.py --db all
198+
```
199+
200+
### Порт занят
201+
202+
Откройте уже запущенный <http://127.0.0.1:8501> или укажите `--port`.
203+
204+
## Связанные файлы
205+
206+
- Docstring / `--help`: [`scripts/run_local_demo.py`](scripts/run_local_demo.py)
207+
- Обзор в README: раздел **Quick start** → full-source local demo
208+
- Опциональный HF tooling (не runtime-зависимость): [`DEPLOY.md`](DEPLOY.md)

0 commit comments

Comments
 (0)