Skip to content

Leon-Av/Streamlit-Fileshare-LLM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

📂 Файловый Архив с AI-ассистентом

Веб-приложение для обмена файлами с встроенным AI чат-ботом. Бот умеет искать файлы по запросу, отправлять их пользователю и вести осмысленную переписку — всё через локальную LLM, запущенную в LM Studio.

Python Flask LM Studio License


✨ Возможности

Файловый обозреватель

  • Навигация по папкам в стиле Notion
  • Предпросмотр изображений, PDF, видео, аудио, текстовых файлов
  • Скачивание файлов с ограничением по размеру

AI Чат-бот

  • Поиск файлов по ключевым словам, тегам, предметам
  • Отправка файлов прямо в чат (скачивание по одному или всех разом в ZIP)
  • Контекст переписки — бот помнит что обсуждали
  • Многопользовательский режим — сессии изолированы, данные не пересекаются
  • Экспорт истории чата в JSON
  • Поддержка thinking-моделей (фильтрация <think> тегов)

Индексация

  • Автоматическое извлечение текста из PDF, DOCX, XLSX, CSV, TXT, MD
  • OCR изображений через vision-модель (JPG, PNG, GIF, WebP, BMP)
  • Генерация описаний и тегов через LLM
  • Инкрементальная индексация — обрабатываются только новые/изменённые файлы

📋 Требования

  • Python 3.10+
  • LM Studio с запущенным локальным сервером
  • Модель с поддержкой tool calling (рекомендуется Qwen3, Qwen2.5, Mistral и др.)
  • Для OCR изображений — модель с поддержкой vision

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

1. Клонировать репозиторий

git clone https://github.com/Leon-Av/Streamlit-Fileshare-LLM

2. Установить зависимости

pip install -r requirements.txt

3. Настроить конфигурацию

Откройте config.py и измените параметры под себя:

# Адрес LM Studio
LLM_BASE_URL = "http://localhost:1234/v1"

# Название модели (как отображается в LM Studio)
LLM_MODEL = "qwen3.5-9b"

# Думающая модель (фильтровать <think> теги)
IS_THINKING_MODEL = True

# Папка с файлами
ROOT_FOLDER = "./files"

# Порт сервера
PORT = 2345

4. Подготовить файлы

Положите файлы в папку ./files/ (создаётся автоматически). Поддерживается любая структура вложенных папок.

5. Запустить LM Studio

Убедитесь что в LM Studio:

  • Загружена модель с поддержкой tool calling
  • Запущен локальный сервер (вкладка «Local Server» → Start Server)
  • Порт совпадает с LLM_BASE_URL в конфиге

6. Проиндексировать файлы

python indexer.py

Индексатор пройдёт по всем файлам, извлечёт текст и отправит его в LLM для генерации описаний и тегов. Это может занять время в зависимости от количества файлов и скорости модели.

7. Запустить сервер

python app.py

Откройте в браузере:

  • http://localhost:2345 — файловый обозреватель
  • http://localhost:2345/chat — AI чат-бот

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

file-archive/
├── config.py          # Все настройки в одном месте
├── database.py        # Работа с SQLite (общий модуль)
├── indexer.py         # Скрипт индексации файлов
├── app.py             # Flask-сервер (файлы + чат-бот)
├── requirements.txt   # Зависимости Python
├── files/             # Папка с файлами (создаётся автоматически)
└── files_index.db     # БД с индексами (создаётся автоматически)

⚙️ Конфигурация

Все настройки находятся в config.py:

Параметр Описание По умолчанию
PORT Порт сервера 2345
HOST Хост (0.0.0.0 — все, 127.0.0.1 — локально) 0.0.0.0
ROOT_FOLDER Путь к папке с файлами ./files
LLM_BASE_URL URL API LM Studio http://localhost:1234/v1
LLM_MODEL Название модели qwen3.5-9b
IS_THINKING_MODEL Фильтровать <think> теги True
MAX_CONTEXT_MESSAGES Макс. сообщений в контексте чата 30
MAX_FILE_SIZE_GB Лимит на скачивание 5 ГБ
MAX_PREVIEW_SIZE_MB Лимит на предпросмотр 50 МБ
SYSTEM_PROMPT Системный промпт для чат-бота см. файл

🔧 Команды индексатора

# Индексация новых и изменённых файлов
python indexer.py

# Полная переиндексация всех файлов
python indexer.py --reindex-all

Индексатор автоматически:

  • Пропускает уже проиндексированные файлы
  • Переиндексирует изменённые файлы (по дате модификации)
  • Удаляет из БД записи для удалённых файлов

📝 Поддерживаемые форматы

Индексация (извлечение текста + описание от LLM):

Формат Расширения
Текст .txt, .md
PDF .pdf
Word .docx
Excel .xlsx
CSV .csv
Изображения (OCR) .jpg, .jpeg, .png, .gif, .webp, .bmp

Предпросмотр в браузере:

Тип Расширения
Изображения .jpg, .jpeg, .png, .gif, .webp, .svg, .bmp, .ico
PDF .pdf
Видео .mp4, .webm, .mov, .avi, .mkv
Аудио .mp3, .wav, .ogg, .flac, .m4a
Код/текст .txt, .md, .py, .js, .html, .css, .json, .csv, .xml, .yaml

💬 Примеры запросов к чат-боту

• материалы по физике для подготовки к экзамену
• конспекты лекций по математическому анализу
• какие предметы есть в базе?
• пришли все файлы по программированию
• задачи по линейной алгебре

🛠️ Решение проблем

Бот не отвечает / думает бесконечно

  • Проверьте что LM Studio запущен и сервер активен
  • Убедитесь что LLM_MODEL в config.py совпадает с названием модели в LM Studio
  • Смотрите логи в терминале — там подробно показан каждый шаг

Бот не находит файлы

  • Убедитесь что индексация прошла успешно: python indexer.py
  • Проверьте БД: http://localhost:2345/api/stats
  • Попробуйте другие ключевые слова или спросите «какие предметы есть»

Ошибка подключения к LM Studio

  • Проверьте LLM_BASE_URL в config.py
  • Убедитесь что порт LM Studio совпадает (по умолчанию 1234)
  • Если сервер на другой машине — укажите её IP

📄 Лицензия

MIT

About

Streamlit webui filesharing site with LLM chat-bot

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors