Веб-приложение для обработки кейсов с использованием epistack и DSPy.
- Именование фактурных примеров - автоматическое создание названия для кейса на основе причинно-следственных связей
- Извлечение фактурных связок - анализ состояний и преобразований в тексте
- Абстрагирование связок - создание абстрактных представлений причинно-следственных связей
- Форматирование текста - улучшение читаемости с помощью markdown форматирования (через Windmill)
- Автоматический перевод - перевод английского текста на русский
- Извлечение библиографии - структурированное извлечение библиографической информации
- Python 3.12+
- pip
- epistack установленный локально
- Клонируйте репозиторий
cd /path/to/your/workspace- Создайте виртуальное окружение
python3 -m venv venv
source venv/bin/activate # На Windows: venv\Scripts\activate- Установите зависимости
pip install -r requirements.txt- Установите epistack
pip install -e ../epistack- Настройте переменные окружения
cp .env.example .envОтредактируйте .env и укажите:
DSPY_MODEL- модель для использования (например,gpt-3.5-turbo)DSPY_API_KEY- API ключ для вашего LLM провайдераDSPY_API_BASE- (опционально) базовый URL если используете кастомный эндпоинтWINDMILL_TOKEN- токен для форматирования текста через WindmillNEXTCLOUD_WEBDAV_URL- адрес WebDAV (.../remote.php/webdav/)NEXTCLOUD_USERNAME/NEXTCLOUD_PASSWORD- учетные данные или app passwordNEXTCLOUD_BASE_FOLDER- базовая директория (по умолчаниюKollektivika Vault)
- Запустите приложение
python app.pyПриложение будет доступно по адресу http://localhost:5000
- Подготовьте epistack
Убедитесь, что директория epistack находится на том же уровне, что и CaseLinter:
repos/
├── CaseLinter/
└── epistack/
- Скопируйте epistack в build контекст
cp -r ../epistack ./epistack- Создайте .env файл
cp .env.example .env
# Отредактируйте .env с вашими настройками- Соберите Docker образ
docker build -t case-linter .- Запустите контейнер
docker run -p 5000:5000 --env-file .env case-linterИли используйте docker-compose (создайте docker-compose.yml):
version: '3.8'
services:
app:
build: .
ports:
- "5000:5000"
env_file:
- .env
restart: unless-stoppedЗатем:
docker-compose up -dПриложение готово к деплою на Coolify! Используется Gunicorn как production WSGI сервер.
-
Создайте новый проект в Coolify
- Выберите "Git Repository"
- Укажите ссылку на репозиторий
-
Настройте переменные окружения
Обязательные:
DSPY_API_KEY=ваш-api-ключ DSPY_MODEL=gpt-3.5-turboОпциональные:
FLASK_DEBUG=False DSPY_API_BASE=https://api.openai.com/v1 -
Настройки билда
- Build Pack: Dockerfile
- Port: 5000
- Health Check Path: /health
-
Деплой
- Нажмите "Deploy"
- Дождитесь окончания сборки
После деплоя проверьте:
curl https://ваш-домен/healthДолжен вернуться:
{
"status": "healthy",
"dspy_configured": true
}- 502 Bad Gateway: Проверьте логи контейнера, убедитесь что DSPY_API_KEY установлен
- Долгая загрузка: Первый запуск может занять время из-за установки epistack из GitHub
- Ошибки обработки: Проверьте валидность API ключа и доступность модели
- Nextcloud upload failed: проверьте
NEXTCLOUD_*, что URL заканчивается на/remote.php/webdav/, а у пользователя есть права на каталог
📖 Подробнее: COOLIFY_DEPLOY.md
-
Откройте браузер и перейдите на
http://localhost:5000 -
Введите данные:
- Текст кейса: Вставьте текст с фактурным примером (если поле «Страница» останется пустым, можно оставить номер страницы в тексте)
- Страница: Укажите номер страницы или диапазон (опционально, например, "с. 123" или "page 45")
- Библиография: Вставьте библиографическую информацию об источнике
-
Нажмите кнопку "Обработать"
-
Просмотрите результаты:
- Кейс-пример: Содержит отформатированный текст, название кейса и абстрагированные связки
- Источник: Содержит структурированные библиографические данные и полную строку для цитирования
-
Скачайте результаты как
.mdфайлы с помощью кнопок "Скачать .md"
Приложение автоматически выгружает оба markdown-файла в Nextcloud сразу после обработки:
- Источник →
Kollektivika Vault/Источники/<имя файла>.md - Пример →
Kollektivika Vault/Примеры/<имя файла>.md
Для работы загрузки заполните переменные NEXTCLOUD_WEBDAV_URL, NEXTCLOUD_USERNAME, NEXTCLOUD_PASSWORD, NEXTCLOUD_BASE_FOLDER. Родительские каталоги создаются автоматически, но путь должен вести в существующее хранилище (например, http://.../remote.php/webdav/).
В ответе API поле nextcloud.details показывает итог (успех/предупреждение). При ошибке WebDAV обработка завершается с кодом 502.
Приложение поддерживает различные LLM провайдеры через DSPy:
DSPY_MODEL=gpt-3.5-turbo
DSPY_API_KEY=sk-your-keyDSPY_MODEL=claude-3-sonnet-20240229
DSPY_API_KEY=sk-ant-your-keyDSPY_MODEL=llama2
DSPY_API_BASE=http://localhost:11434DSPY_MODEL=gpt-35-turbo
DSPY_API_KEY=your-azure-key
DSPY_API_BASE=https://your-resource.openai.azure.com/CaseLinter/
├── app.py # Flask приложение
├── processor.py # Логика обработки кейсов
├── requirements.txt # Python зависимости
├── Dockerfile # Docker конфигурация
├── .env.example # Пример переменных окружения
├── .gitignore # Git ignore файл
├── .dockerignore # Docker ignore файл
├── README.md # Документация
├── templates/
│ └── index.html # HTML шаблон
└── static/
└── style.css # CSS стили
Главная страница приложения
Обработка кейса и библиографии
Request body:
{
"case_text": "текст кейса...",
"bibliography_text": "библиография...",
"page_text": "стр. 123"
}Response:
{
"success": true,
"case_file": "отформатированный кейс...",
"source_file": "отформатированный источник...",
"language": "en",
"page_number": "стр. 123",
"nextcloud": {
"status": "uploaded",
"details": "Файлы загружены в Nextcloud: Kollektivika Vault/..."
}
}Скачивание результата как файла
Request body:
{
"content": "содержимое файла..."
}Проверка состояния приложения
Response:
{
"status": "healthy",
"dspy_configured": true,
"nextcloud_ready": true
}# Активируйте виртуальное окружение
source venv/bin/activate
# Запустите в режиме отладки
export FLASK_DEBUG=True
python app.pypip listpip freeze > requirements.txtУбедитесь, что создали .env файл и указали в нем DSPY_API_KEY.
Убедитесь, что epistack установлен:
pip install -e ../epistackПроверьте:
- Правильность API ключа
- Доступность LLM модели
- Формат входных данных
Убедитесь что:
- epistack скопирован в build контекст
.envфайл существует и корректно заполнен- Порт 5000 не занят другим приложением
Этот проект использует epistack и DSPy. Проверьте их лицензии для коммерческого использования.
Разработано с использованием: