Skip to content

X-D-R/hse_dashboard

 
 

Repository files navigation

📊 HSE Chatbot Dashboard

Chatbot Dashboard — веб-дашборд на Streamlit для анализа качества ответов чат-бота и метрик взаимодействия пользователей.
Проект включает витрину (UI) и парсер/пайплайн, который регулярно подтягивает логи, обрабатывает их и сохраняет агрегированные данные в data/.


🚀 Основные возможности

  • Мультистраничный дашборд (Streamlit navigation)
    • Общий обзор (сводные метрики)
    • Ошибки (ошибочные/подозрительные ответы)
    • Анализ по группам (группировка похожих вопросов)
    • Анализ по ключевым словам
    • Вся статистика (страница для разработчиков)
    • Термины / Сценарии использования (встроенная документация)
  • Регулярный фоновой парсинг логов (отдельный сервис parser или поток внутри Streamlit)
  • Кэширование и защита от параллельного запуска (file lock + state-файлы)
  • Экспорт данных (например, Excel / JSON из интерфейса)
  • Семантическая группировка вопросов (SentenceTransformers + эмбеддинги)

🏗 Архитектура и поток данных

Компоненты

  • UI (Streamlit)
    Точка входа: main.py
    Страницы: app_pages/*.py
  • Парсинг/обработка
    Пайплайн: parsing/pipeline.py
    Запускается:
    • либо внутри Streamlit (фоновой поток),
    • либо отдельным воркером parser_worker.py (рекомендуется для Docker).

Что где лежит

  • data/ — входные логи и результаты парсинга (в т.ч. result.json, result_YYYY-MM.json, .state/*, кэш группировщика)
  • logs/ — логи приложения/пайплайна
  • dashboard/ — UI-утилиты, графики, экспорт, конфиги
  • parsing/ — обработка логов, группировка, метрики, кэширование

🛠️ Технологический стек

Язык / UI

  • Python >= 3.12
  • Streamlit

Аналитика и визуализация

  • Pandas, NumPy
  • Plotly, Matplotlib, Seaborn
  • Statsmodels, SciPy, scikit-learn

NLP / ML

  • sentence-transformers, transformers
  • torch (CPU wheel через uv index)
  • datasets, evaluate, nltk, bert-score, rouge-score, sacrebleu
  • wordcloud

Инфраструктура

  • uv (локальная установка зависимостей и запуск)
  • Docker / Docker Compose
  • GNU Make
  • (prod) Caddy (reverse proxy)

📌 Установка и запуск

1) Клонирование репозитория

git clone <REPO_URL>
cd <REPO_DIR>

🧪 Локально (через uv, без Docker)

Установка uv

pip install uv

Установка зависимостей

uv sync

Запуск приложения

uv run streamlit run main.py

Приложение будет доступно:
http://localhost:8501

По умолчанию Streamlit может запускать фоновый пайплайн внутри себя.
Это управляется переменной DISABLE_INTERNAL_PARSER (см. ниже).


🐳 Docker (Compose + Makefile)

Перед запуском убедитесь, что установлены:

  • Docker
  • Docker Compose
  • GNU Make

Проверка:

docker --version
docker compose version
make --version

Основные команды

  • make dev
    Запуск в режиме разработки (docker-compose.dev.yml) — основной режим работы.
make dev
  • make run
    Запуск в продакшн-режиме (docker-compose.yml).
make run

После запуска (dev/prod) UI доступен по адресу:
http://localhost:8501


⚙️ Команды Makefile (полный список)

  • make run — запуск prod (docker-compose.yml)
  • make dev — запуск dev (docker-compose.dev.yml)
  • make build — сборка образов
  • make rebuild — down + build + up (prod)
  • make rebuild_dev — down + build + dev
  • make down — остановка compose
  • make clean — удалить контейнер/образ
  • make view_logs — смотреть логи контейнера
  • make go_in_docker — зайти внутрь контейнера
  • make get_logs — скачать логи с удалённого сервера (если настроено)
  • make get_data — скачать актуальные данные data/ с удалённого сервера (если настроено)

🔧 Переменные окружения

Используются пайплайном и сервисами docker-compose:

  • DISABLE_INTERNAL_PARSER=1
    Отключает фоновый парсер внутри Streamlit.
    В Docker обычно включают (1) и запускают отдельный сервис parser.

  • START_FROM=YYYY-MM (пример: 2025-08)
    Месяц/год, с которого начинать обработку логов.

  • FORCE_REPARSE=true
    Принудительно пересчитать результаты, даже если хэши логов не изменились.
    Включать только при необходимости (может быть долго).

  • TZ=...
    Таймзона контейнеров.


🧩 Структура проекта

.
├── main.py                  # Streamlit entrypoint + навигация по страницам
├── app_pages/               # Страницы Streamlit (General/Errors/Analysis/...)
├── dashboard/               # UI-утилиты, графики, экспорт, конфиги
├── parsing/                 # пайплайн, парсинг логов, группировка, метрики, кэш
├── parser_worker.py         # отдельный воркер для пайплайна (удобно для Docker)
├── data/                    # логи/результаты/кэш
├── logs/                    # логи приложения
├── Images/                  # скриншоты
├── Dockerfile
├── docker-compose.yml       # prod: app + parser + caddy
├── docker-compose.dev.yml   # dev: app + parser
├── Caddyfile                # reverse proxy (prod)
├── pyproject.toml           # зависимости для uv
├── uv.lock                  # lock-файл uv
├── requirements.txt         # зависимости (для Docker)
└── Makefile

📦 Все библиотеки проекта

Ниже — полный список зависимостей, которые реально зафиксированы в pyproject.toml.

Полный список зависимостей (148)
absl-py==2.3.1
aiohappyeyeballs==2.6.1
aiohttp==3.11.18
aiosignal==1.3.2
altair==5.5.0
altex==0.2.0
asn1crypto==1.5.1
attrs==25.1.0
beautifulsoup4==4.13.4
bert-score==0.3.13
blinker==1.9.0
boto3==1.39.2
botocore==1.39.2
cachetools==5.5.2
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
choreographer==1.0.9
click==8.1.8
cloudpickle==3.0.0
colorama==0.4.6
contourpy==1.3.1
cryptography==45.0.5
cycler==0.12.1
datasets==3.6.0
dill==0.3.8
entrypoints==0.4
et-xmlfile==2.0.0
evaluate==0.4.3
faker==37.4.0
favicon==0.7.0
filelock==3.13.1
fonttools==4.56.0
frozenlist==1.6.0
fsspec==2024.6.1
gitdb==4.0.12
gitpython==3.1.44
hf-xet==1.1.5
htbuilder==0.9.0
huggingface-hub==0.34.3
idna==3.10
jinja2==3.1.4
jmespath==1.0.1
joblib==1.5.1
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
kaleido==0.2.1
kiwisolver==1.4.8
logistro==1.1.0
loguru==0.7.3
lxml==6.0.0
markdown==3.8.2
markdown-it-py==3.0.0
markdownlit==0.0.7
markupsafe==2.1.5
matplotlib==3.10.1
mdurl==0.1.2
memory-profiler==0.61.0
mpmath==1.3.0
multidict==6.4.3
multiprocess==0.70.16
narwhals==1.29.0
networkx==3.3
nltk==3.9.1
numpy==2.2.3
openpyxl==3.1.5
orjson==3.11.1
packaging==24.2
pandas==2.2.3
patsy==1.0.1
pillow==11.1.0
platformdirs==4.3.8
plotly==6.0.0
portalocker==3.2.0
prometheus-client==0.22.1
propcache==0.3.1
protobuf==5.29.3
psutil==7.0.0
pyarrow==18.1.0
pycparser==2.22
pydeck==0.9.1
pygments==2.19.1
pyjwt==2.10.1
pymdown-extensions==10.16
pyopenssl==25.1.0
pyparsing==3.2.1
python-dateutil==2.9.0.post0
pytz==2025.1
pyyaml==6.0.2
referencing==0.36.2
regex==2024.11.6
requests==2.32.3
rich==13.9.4
rouge-score==0.1.2
rpds-py==0.23.1
s3transfer==0.13.0
sacrebleu==2.5.1
safetensors==0.5.3
scikit-learn==1.6.1
scipy==1.15.3
seaborn==0.13.2
sentence-transformers==5.0.0
sentencepiece==0.2.0
setuptools==70.2.0
simplejson==3.20.1
six==1.17.0
smmap==5.0.2
snowflake-connector-python==3.16.0
snowflake-snowpark-python==1.33.0
sortedcontainers==2.4.0
soupsieve==2.7
st-annotated-text==4.0.2
st-theme==1.2.3
statsmodels==0.14.4
streamlit==1.47.1
streamlit-autorefresh==1.0.1
streamlit-avatar==0.1.3
streamlit-calendar-input==0.0.3
streamlit-camera-input-live==0.2.0
streamlit-card==1.0.2
streamlit-embedcode==0.1.2
streamlit-extras==0.7.5
streamlit-faker==0.0.4
streamlit-image-coordinates==0.3.1
streamlit-keyup==0.3.0
streamlit-toggle-switch==1.0.2
streamlit-vertical-slider==2.5.5
sympy==1.13.3
tabulate==0.9.0
tenacity==9.0.0
threadpoolctl==3.6.0
tokenizers==0.21.4
toml==0.10.2
tomlkit==0.13.3
torch>=2.0, <3.0
tornado==6.4.2
tqdm==4.67.1
transformers==4.54.1
typing-extensions==4.12.2
tzdata==2025.1
tzlocal==5.3.1
urllib3==2.3.0
validators==0.35.0
watchdog==6.0.0
wheel==0.45.1
wordcloud>=1.9.4
xxhash==3.5.0
yarl==1.20.0

About

Dashboard for Higher School of Economics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 99.1%
  • Other 0.9%