Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
142 lines (109 loc) · 8.7 KB
/
Copy path.env.example
File metadata and controls
142 lines (109 loc) · 8.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# ==============================================================================
# КОНФИГУРАЦИЯ СТОРОННИХ МОДЕЛЕЙ (VLM / LLM) ДЛЯ РАСПОЗНАВАНИЯ ДОКУМЕНТОВ
# Скопируйте этот файл в .env и заполните нужные параметры
# ==============================================================================
# ВАЖНО: клиент работает ТОЛЬКО по OpenAI-совместимому протоколу (/v1/chat/completions).
# Google Gemini напрямую не поддерживается — используйте его через прокси с
# OpenAI-совместимым API (OpenRouter, LiteLLM и т.п.).
# 1. Вариант OpenAI (или совместимые сервисы: DeepSeek, OpenRouter, LiteLLM)
# OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxxx
# Для DeepSeek / OpenRouter раскомментируйте соответствующий URL:
# OPENAI_BASE_URL=https://api.deepseek.com/v1
# OPENAI_BASE_URL=https://openrouter.ai/api/v1
# AI_MODEL_NAME=gpt-4o-mini
# 2. Вариант локальной модели Ollama (Qwen2.5-VL, Llama3.2-Vision) — по умолчанию
OPENAI_BASE_URL=http://localhost:11434/v1
AI_MODEL_NAME=qwen2.5-vl:7b
OPENAI_API_KEY=dummy_local_key
# 3. Вариант локального сервера vLLM / SGLang / LM Studio
# OPENAI_BASE_URL=http://localhost:8000/v1
# AI_MODEL_NAME=Qwen/Qwen2.5-VL-7B-Instruct
# Каскад экстракции «быстрая → мощная» (необязательно): быстрая VLM
# (например, MoE с малым числом активных параметров, ~30-40 с/документ)
# обрабатывает документ первой; при провале барьеров (JSON, схема плагина,
# заглушка doc_type, regex-восстановление сумм) документ полностью
# переэкстрактируется основной моделью из AI_MODEL_NAME. Работает на том же
# эндпоинте, что и основная. Пусто или отсутствует — одно-модельный режим,
# поведение идентично прежнему. Совпадение с AI_MODEL_NAME игнорируется
# как вырожденная конфигурация (с WARNING в лог).
# VLM_FAST_MODEL_NAME=
# ==============================================================================
# НАСТРОЙКИ КОНВЕЙЕРА (необязательные)
# ==============================================================================
# Таймаут HTTP-запроса к VLM/LLM в секундах (по умолчанию 600)
# VLM_HTTP_TIMEOUT=600
# Ожидание слота/токена в RateLimiter в секундах (по умолчанию 120).
# Раньше обе настройки читали одну переменную VLM_TIMEOUT с разными
# дефолтами (600 у клиента, 120 у лимитера) — теперь они разделены.
# VLM_SLOT_TIMEOUT=120
# УСТАРЕЛО: VLM_TIMEOUT — алиас VLM_HTTP_TIMEOUT, будет удалён.
# VLM_TIMEOUT=600
# Минимальная уверенность VLM-роутера, ниже которой тип документа
# отклоняется и документ помечается как unknown (по умолчанию 0.5).
# Заниженная уверенность — гипотеза, а не результат: она не должна
# молча отправлять документ в чужую ветку экстракции.
# VLM_ROUTER_CONFIDENCE_MIN=0.5
# Лимит запросов в минуту к модели (RPM, по умолчанию 60)
# VLM_RPM_LIMIT=60
# Максимальный параллелизм запросов к модели (по умолчанию 2)
# VLM_MAX_CONCURRENCY=2
# Включение RateLimiter (true/false, по умолчанию true)
# ENABLE_RATE_LIMITER=true
# Включение файлового кэша ответов VLM (true/false, по умолчанию true)
# ENABLE_CACHE=true
# Каталог кэша (по умолчанию ./.cache/scan_reader)
# SCANREADER_CACHE_DIR=
# Максимальное число записей в кэше (по умолчанию 2000, вытеснение LRU:
# первой удаляется наименее недавно использованная, а не первая по порядку вставки)
# SCANREADER_MAX_CACHE_ENTRIES=2000
# Сколько записей копить перед сбросом кэша на диск (по умолчанию 25).
# Сброс выполняется вне блокировки; раньше он делался на каждую вставку под
# замком, что давало квадратичную работу за прогон.
# SCANREADER_CACHE_FLUSH_EVERY=25
# Максимальный интервал между сбросами кэша на диск в секундах (по умолчанию 30).
# Гарантированный сброс дают flush(), close() и контекстный менеджер.
# SCANREADER_CACHE_FLUSH_SECONDS=30
# Сколько страниц документа уходит в один мультимодальный запрос (по умолчанию 20).
# Без ограничения весь PDF превращался в один запрос на десятки мегабайт base64,
# который заведомо не помещается в контекст модели.
# SCANREADER_MAX_PAGES=20
# Число попыток запроса VLM при экстракции, если ответ не содержит JSON (по умолчанию 2).
# Провальные и эвристические ответы не кэшируются: следующий запуск обратится
# к модели повторно вместо возврата мусора из кэша.
# SCANREADER_VLM_ATTEMPTS=2
# Каталог результатов (по умолчанию ./output)
# SCANREADER_OUTPUT_DIR=
# Каталог входящих документов для пакетной обработки (по умолчанию ./incoming)
# SCANREADER_INCOMING_DIR=
# Каталог эталонов Ground Truth (по умолчанию ./data/ground_truth)
# SCANREADER_GROUND_TRUTH_DIR=
# Разрешенные корни для доступа к файлам через JSON-RPC сервер (разделитель ';' на Windows)
# SCANREADER_ALLOWED_DIRS=
# Корень данных лаунчера (по умолчанию корень проекта)
# SCANREADER_HOME=
# ---------------------------------------------------------------------------
# OCR И КРОСС-МОДАЛЬНАЯ ВЕРИФИКАЦИЯ СКАНОВ
# ---------------------------------------------------------------------------
# Независимый OCR-канал для подтверждения реквизитов по изображению.
# Требует установки: pip install "scan-reader[ocr]" (или "scan-reader[ocr-full]")
# Без него гейт для сканов опирается на VLM-транскрипцию, которая НЕ является
# независимой сверкой (та же модель, что и извлечение).
# SCANREADER_OCR_ENABLED=true
# Движок OCR: auto (быстрый поиск) | rapidocr (ONNX, CPU) | paddleocr (GPU)
# SCANREADER_OCR_ENGINE=auto
# Язык распознавания для PaddleOCR
# SCANREADER_OCR_LANG=ru
# Сколько страниц разбирать OCR'ом за один проход (по умолчанию 5).
# Для многостраничных исполнительных листов обычно хватает первых страниц.
# SCANREADER_OCR_MAX_PAGES=5
# Минимальная длина распознанного текста, чтобы считать страницу пригодной
# без OCR (если текстовый слой короче, страница распознаётся изображением).
# SCANREADER_OCR_MIN_TEXT_LENGTH=50
# Резервный проход VLM «точная транскрипция», когда OCR недоступен.
# Полезен, но это НЕ независимая сверка: в отчёте помечается
# gate_source=vlm_transcription и GATE_REFERENCE_FROM_VLM.
# SCANREADER_OCR_CROSSCHECK=true
# Уровень логирования (DEBUG / INFO / WARNING / ERROR, по умолчанию INFO)
# LOG_LEVEL=INFO
# Отключение ANSI-цветов в выводе CLI
# NO_COLOR=1