Skip to content

Repository files navigation

Case Linter

Веб-приложение для обработки кейсов с использованием epistack и DSPy.

Возможности

  • Именование фактурных примеров - автоматическое создание названия для кейса на основе причинно-следственных связей
  • Извлечение фактурных связок - анализ состояний и преобразований в тексте
  • Абстрагирование связок - создание абстрактных представлений причинно-следственных связей
  • Форматирование текста - улучшение читаемости с помощью markdown форматирования (через Windmill)
  • Автоматический перевод - перевод английского текста на русский
  • Извлечение библиографии - структурированное извлечение библиографической информации

Установка

Требования

  • Python 3.12+
  • pip
  • epistack установленный локально

Локальная установка

  1. Клонируйте репозиторий
cd /path/to/your/workspace
  1. Создайте виртуальное окружение
python3 -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate
  1. Установите зависимости
pip install -r requirements.txt
  1. Установите epistack
pip install -e ../epistack
  1. Настройте переменные окружения
cp .env.example .env

Отредактируйте .env и укажите:

  • DSPY_MODEL - модель для использования (например, gpt-3.5-turbo)
  • DSPY_API_KEY - API ключ для вашего LLM провайдера
  • DSPY_API_BASE - (опционально) базовый URL если используете кастомный эндпоинт
  • WINDMILL_TOKEN - токен для форматирования текста через Windmill
  • NEXTCLOUD_WEBDAV_URL - адрес WebDAV (.../remote.php/webdav/)
  • NEXTCLOUD_USERNAME / NEXTCLOUD_PASSWORD - учетные данные или app password
  • NEXTCLOUD_BASE_FOLDER - базовая директория (по умолчанию Kollektivika Vault)
  1. Запустите приложение
python app.py

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

Docker установка

  1. Подготовьте epistack

Убедитесь, что директория epistack находится на том же уровне, что и CaseLinter:

repos/
├── CaseLinter/
└── epistack/
  1. Скопируйте epistack в build контекст
cp -r ../epistack ./epistack
  1. Создайте .env файл
cp .env.example .env
# Отредактируйте .env с вашими настройками
  1. Соберите Docker образ
docker build -t case-linter .
  1. Запустите контейнер
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

Подготовка

Приложение готово к деплою на Coolify! Используется Gunicorn как production WSGI сервер.

Шаги деплоя

  1. Создайте новый проект в Coolify

    • Выберите "Git Repository"
    • Укажите ссылку на репозиторий
  2. Настройте переменные окружения

    Обязательные:

    DSPY_API_KEY=ваш-api-ключ
    DSPY_MODEL=gpt-3.5-turbo
    

    Опциональные:

    FLASK_DEBUG=False
    DSPY_API_BASE=https://api.openai.com/v1
    
  3. Настройки билда

    • Build Pack: Dockerfile
    • Port: 5000
    • Health Check Path: /health
  4. Деплой

    • Нажмите "Deploy"
    • Дождитесь окончания сборки

Проверка работы

После деплоя проверьте:

curl https://ваш-домен/health

Должен вернуться:

{
  "status": "healthy",
  "dspy_configured": true
}

Troubleshooting

  • 502 Bad Gateway: Проверьте логи контейнера, убедитесь что DSPY_API_KEY установлен
  • Долгая загрузка: Первый запуск может занять время из-за установки epistack из GitHub
  • Ошибки обработки: Проверьте валидность API ключа и доступность модели
  • Nextcloud upload failed: проверьте NEXTCLOUD_*, что URL заканчивается на /remote.php/webdav/, а у пользователя есть права на каталог

📖 Подробнее: COOLIFY_DEPLOY.md

Использование

  1. Откройте браузер и перейдите на http://localhost:5000

  2. Введите данные:

    • Текст кейса: Вставьте текст с фактурным примером (если поле «Страница» останется пустым, можно оставить номер страницы в тексте)
    • Страница: Укажите номер страницы или диапазон (опционально, например, "с. 123" или "page 45")
    • Библиография: Вставьте библиографическую информацию об источнике
  3. Нажмите кнопку "Обработать"

  4. Просмотрите результаты:

    • Кейс-пример: Содержит отформатированный текст, название кейса и абстрагированные связки
    • Источник: Содержит структурированные библиографические данные и полную строку для цитирования
  5. Скачайте результаты как .md файлы с помощью кнопок "Скачать .md"

Nextcloud WebDAV

Приложение автоматически выгружает оба 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.

Конфигурация DSPy

Приложение поддерживает различные LLM провайдеры через DSPy:

OpenAI

DSPY_MODEL=gpt-3.5-turbo
DSPY_API_KEY=sk-your-key

Anthropic Claude

DSPY_MODEL=claude-3-sonnet-20240229
DSPY_API_KEY=sk-ant-your-key

Ollama (локально)

DSPY_MODEL=llama2
DSPY_API_BASE=http://localhost:11434

Azure OpenAI

DSPY_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 стили

API Endpoints

GET /

Главная страница приложения

POST /process

Обработка кейса и библиографии

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/..."
  }
}

POST /download/<filename>

Скачивание результата как файла

Request body:

{
  "content": "содержимое файла..."
}

GET /health

Проверка состояния приложения

Response:

{
  "status": "healthy",
  "dspy_configured": true,
  "nextcloud_ready": true
}

Разработка

Тестирование локально

# Активируйте виртуальное окружение
source venv/bin/activate

# Запустите в режиме отладки
export FLASK_DEBUG=True
python app.py

Проверка зависимостей

pip list

Обновление зависимостей

pip freeze > requirements.txt

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

Ошибка: "DSPY_API_KEY не установлен"

Убедитесь, что создали .env файл и указали в нем DSPY_API_KEY.

Ошибка: "Cannot import epistack"

Убедитесь, что epistack установлен:

pip install -e ../epistack

Ошибка при обработке текста

Проверьте:

  1. Правильность API ключа
  2. Доступность LLM модели
  3. Формат входных данных

Docker контейнер не запускается

Убедитесь что:

  1. epistack скопирован в build контекст
  2. .env файл существует и корректно заполнен
  3. Порт 5000 не занят другим приложением

Лицензия

Этот проект использует epistack и DSPy. Проверьте их лицензии для коммерческого использования.

Авторы

Разработано с использованием:

  • epistack - модульная система для извлечения и абстрагирования связок
  • DSPy - фреймворк для программирования с языковыми моделями
  • Flask - веб-фреймворк

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages