Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 ODRA-Outcome-Driven RAG Auditor

Status Python FastAPI React TypeScript License

🚀 Повнофункціональна система аудиту документів з AI-аналізом у реальному часі

📖 Документація🚀 Швидкий старт🏗️ Архітектура📝 API🤝 Контрибьют


✨ Ключові можливості

📤 Завантаження документів

  • Групова обробка файлів
  • Підтримка PDF, TXT, JSON
  • Асинхронна обробка
  • Прогрес у реальному часі

🔍 Семантичний пошук

  • Векторні вбудовування (embeddings)
  • Пошук по змісту
  • Кешування результатів
  • AI-аналіз документів

🏛️ Audit Jobs

  • Створення та управління аудитами
  • Відстеження прогресу в реальному часі
  • Детальні метрики якості
  • Автоматичні звіти з рекомендаціями

💬 Human Feedback Loop

  • Зворотний зв'язок від користувачів
  • Поліпшення моделі на льоту
  • Статистика зворотного зв'язку
  • Навчання з людської взаємодії

📊 Аналітика & Звіти

  • Детальні звіти аудиту
  • Метрики точності та повноти
  • Експорт результатів
  • Візуалізація прогресу

🔐 Безпека

  • API Key аутентифікація
  • CORS захист
  • SQL-injection перевірка
  • Валідація Pydantic

🏗️ Архітектура

┌─────────────────────────────────────────────────────────────┐
│          🎨 Frontend (React + TypeScript)                   │
│        📍 http://localhost:5173                             │
│  ┌──────────────────────────────────────────────────────┐  │
│  │ 📤 Upload │ 📋 Jobs │ 📊 Reports │ 💬 Feedback      │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│         ⚙️ Backend API (FastAPI)                            │
│        📍 http://localhost:8000                             │
│  ┌──────────────────────────────────────────────────────┐  │
│  │ Health │ Ingest │ Audit │ Feedback │ Reports        │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
        ↓                        ↓                        ↓
  ┌──────────┐           ┌──────────────┐         ┌──────────┐
  │ 🗄️ SQLite │           │ 🎯 Services  │         │ 🚀 Workers │
  │ Database  │           │              │         │            │
  └──────────┘           │ - Embeddings  │         │ Processing │
                          │ - Ingest      │         │ Pool       │
                          │ - Auditor     │         │            │
                          │ - Task Queue  │         │ (Async)    │
                          └──────────────┘         └──────────┘

🔗 Технологічний стек

Компонент Технологія Версія
Backend Framework FastAPI Latest
Database SQLite / PostgreSQL 3.11+
ORM SQLAlchemy 2.0+
Frontend React + TypeScript 18
Build Tool Vite Latest
Styling Tailwind CSS 3+
Embeddings Mock (для тестів) -
LLM Anthropic Claude / Mock 3-haiku
PDF Parser PyPDF2 3.0.1
Async AsyncIO + Semaphore Python 3.11+
Task Queue Redis/Celery Optional

🚀 Швидкий старт

📋 Вимоги

  • Docker та Docker Compose (рекомендовано)
  • Або Python 3.11+ та Node.js 18+ для локального запуску

⚡ Встановлення

🐳 Варіант А: Docker (Рекомендовано)

1. Клонування репозиторію

git clone https://github.com/Nazickj2023/ODRA
cd ODRA

2. Налаштування змінних оточення (опційно)

cp .env.example .env
# Відредагуйте .env для налаштування API ключів

3. Запуск системи

docker-compose up -d

4. Доступ до системи

Корисні команди Docker:

# Перегляд логів
docker-compose logs -f

# Зупинка системи
docker-compose down

# Перезбірка після змін
docker-compose build
docker-compose up -d

# Очистка БД
docker-compose exec backend python -c "from app.db import SessionLocal, Document, AuditJob; db = SessionLocal(); db.query(Document).delete(); db.query(AuditJob).delete(); db.commit(); print('Cleaned')"

💻 Варіант Б: Локальний запуск

1. Клонування та налаштування

git clone https://github.com/Nazickj2023/ODRA
cd ODRA

# Активація віртуального оточення
python -m venv .venv
source .venv/bin/activate  # macOS/Linux
# або для Windows:
# .venv\Scripts\activate

# Встановлення залежностей
pip install -r backend/requirements.txt
cd frontend && npm install && cd ..

2. Ініціалізація БД

python init_db.py

3. Запуск компонентів

Terminal 1 - Backend:

cd backend
python -m uvicorn app.main:app --reload --port 8000

Terminal 2 - Frontend:

cd frontend
npm run dev

Terminal 3 - Worker (опційно):

python workers/processor.py

4. Доступ до системи


📝 API Посилання

🏥 Health & Status

GET /health
# Повертає: {status, database, embeddings, task_queue, timestamp}

📤 Document Ingestion

POST /ingest/batch
Headers: X-API-Key: dev-key-change-in-production
Body: form-data з файлами
Response: {total_files, queued, results[]}

GET /ingest/status/{task_id}
Response: {task_id, status, progress, error}

🏛️ Audit Operations

POST /audit/run
Headers: X-API-Key: dev-key-change-in-production
Body: {"goal": "...", "scope": "...", "priority": 9}
Response: {job_id, status, created_at}

GET /audit/status/{job_id}
Response: {job_id, status, progress_percent, metrics}

GET /audit/report/{job_id}
Response: {job_id, goal, evidence[], summary, recommendations}

POST /audit/feedback/{job_id}
Headers: X-API-Key: dev-key-change-in-production
Body: {"doc_id": "...", "feedback": "relevant", "comment": "..."}
Response: {status, updated_at}

📚 Все API методи

Метод Endpoint Опис
GET /health Перевірка здоров'я системи
POST /ingest/batch Загрузка документів
GET /ingest/status/{task_id} Статус завантаження
POST /audit/run Запуск аудиту
GET /audit/status/{job_id} Статус аудиту
GET /audit/report/{job_id} Отримання звіту
POST /audit/feedback/{job_id} Надання зворотного зв'язку

🧪 Тестування

Запуск інтеграційних тестів

python test_integration.py

Запуск тестів компонентів

python test_all_components.py

Запуск тестів worker'а

python test_worker_local.py

Перевірка статусу системи

./CHECK_SYSTEM.sh

curl приклади

1. Health Check:

curl http://localhost:8000/health | jq .

2. Загрузка документа:

echo "Financial Report Q1 2024
Total Revenue: 5000000
Total Expenses: 3000000" > test_doc.txt

curl -X POST http://localhost:8000/ingest/batch \
  -H "X-API-Key: dev-key-change-in-production" \
  -F "files=@test_doc.txt"

3. Запуск аудиту:

curl -X POST http://localhost:8000/audit/run \
  -H "X-API-Key: dev-key-change-in-production" \
  -H "Content-Type: application/json" \
  -d '{
    "goal": "Перевірити точність фінансових даних",
    "scope": "finance",
    "priority": 9
  }'

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

ODRA/
├── 📦 backend/
│   ├── app/
│   │   ├── main.py              # FastAPI додаток
│   │   ├── config.py            # Налаштування
│   │   ├── db.py                # Конфігурація БД
│   │   ├── models.py            # Pydantic моделі
│   │   ├── security.py          # Аутентифікація
│   │   ├── api/                 # API маршрути
│   │   └── services/            # Бізнес-логіка
│   ├── tests/                   # Тести
│   └── requirements.txt
│
├── 🎨 frontend/
│   ├── src/
│   │   ├── pages/               # Сторінки
│   │   ├── components/          # React компоненти
│   │   ├── api/                 # API клієнт
│   │   └── App.tsx
│   ├── package.json
│   └── vite.config.ts
│
├── 🚀 workers/
│   └── processor.py             # Фоновий обробник
│
├── 📊 clickhouse/               # ClickHouse схема
├── 📝 scripts/                  # Утиліти
├── 🧪 тести
├── 🐳 docker-compose.yml
└── 📄 README.md

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

Змінні оточення

Створіть .env файл у кореневій папці:

# API
API_KEY=your-secure-key-here
CORS_ORIGINS=http://localhost:3000,http://localhost:5173

# Database
DATABASE_URL=sqlite:///./odra.db
# Для продакшену використовуйте PostgreSQL:
# DATABASE_URL=postgresql://user:pass@localhost/odra

# Redis/Celery
REDIS_URL=redis://localhost:6379/0
USE_CELERY=false

# Embeddings
EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
EMBEDDING_DIMENSION=384

# LLM Provider
LLM_PROVIDER=anthropic  # mock, anthropic, openai, google
ANTHROPIC_API_KEY=your-api-key-here
OPENAI_API_KEY=
GOOGLE_API_KEY=

# Processing
MAX_WORKERS=4
CHUNK_SIZE=1000
OVERLAP=100

# Audit
TARGET_PRECISION=0.85
MAX_ITERATIONS=5

🐳 Docker розгортання

Запуск з Docker Compose

# Клонування репозиторію
git clone https://github.com/Nazickj2023/ODRA
cd ODRA

# Запуск системи
docker-compose up -d

# Перегляд логів
docker-compose logs -f

Доступ:

Корисні команди

# Зупинка
docker-compose down

# Перезбірка
docker-compose build
docker-compose up -d

# Перезапуск конкретного сервісу
docker-compose restart backend
docker-compose restart frontend
docker-compose restart worker

# Очистка бази даних
docker-compose exec backend python -c "from app.db import SessionLocal, Document, AuditJob; db = SessionLocal(); db.query(Document).delete(); db.query(AuditJob).delete(); db.commit(); print('Database cleaned')"

📊 Характеристики продуктивності

Метрика Значення
Пропускна здатність ~100 документів/хвилину
Одночасних worker'ів До 5 процесів
Середня затримка API <100ms
Розмір БД (порожня) ~28KB
На один документ ~3-5KB

🔐 Безпека

✅ Реалізовані функції безпеки

  • ✔️ API Key Validation на захищених endpoints'ах
  • ✔️ CORS Protection з налаштованими origin'ами
  • ✔️ SQL Injection Prevention через SQLAlchemy ORM
  • ✔️ Pydantic Validation для всіх вхідних даних
  • ✔️ Error Handling без витоку інформації
  • ✔️ Retry Logic для надійності

📋 Чек-лист продакшену

  • Змініть API_KEY у конфігурації
  • Оновіть CORS_ORIGINS для продакшену
  • Перейдіть на PostgreSQL
  • Налаштуйте Redis для task queue
  • Включіть HTTPS/SSL
  • Налаштуйте змінні оточення (.env)
  • Запустіть тести безпеки
  • Налаштуйте monitoring (Prometheus, Sentry)
  • Налаштуйте резервне копіювання БД
  • Налаштуйте логування

🚀 Робочий цикл розробки

Додавання нового API endpoint'у

  1. Створіть маршрут у backend/app/api/*.py
  2. Визначте моделі у backend/app/models.py
  3. Реалізуйте логіку у backend/app/services/*.py
  4. Напишіть тести у backend/tests/test_*.py
  5. Оновіть документацію docstring'ів
  6. Протестуйте: python test_integration.py

Додавання фронтенд-сторінки

  1. Створіть компонент у frontend/src/pages/*.tsx
  2. Додайте маршрут у frontend/src/App.tsx
  3. Використовуйте API клієнт з frontend/src/api/client.ts
  4. Стилізуйте Tailwind CSS
  5. Протестуйте у браузері

🧰 Утиліти та команди

# Перевірка статусу системи
./CHECK_SYSTEM.sh

# Запуск всієї системи
./START_SYSTEM.sh

# Швидкий тест інтеграції
python test_integration.py

# Всі тести компонентів
python test_all_components.py

# Тести worker'а
python test_worker_local.py

# Покриття тестами
pytest --cov=backend/app --cov-report=html

📈 Масштабування

Вертикальне масштабування

# backend/app/config.py
MAX_WORKERS = 8  # Збільшіть для більшої пропускної здатності

Горизонтальне масштабування

  • Запустіть декілька worker інстансів
  • Використовуйте Redis для розподіленого task queue
  • Розгорніть Celery для обробки на кількох машинах

Оптимізація БД

  • Перейдіть на PostgreSQL для продакшену
  • Налаштуйте індекси для часто використовуваних полів
  • Використовуйте ClickHouse для аналітики (опційно)

🎯 Roadmap

🚀 Version 1.0 (Поточна версія)

  • Конвеєр загрузки документів
  • Створення та управління аудитами
  • Відстеження прогресу в реальному часі
  • Цикли зворотного зв'язку від людей
  • Комплексне тестування

📅 Version 1.1 (Планується)

  • Інтеграція ClickHouse для аналітики
  • Redis task queue реалізація
  • Celery worker масштабування
  • Розширений фільтрування та пошук
  • Експорт звітів (PDF, Excel)

🎪 Version 2.0 (Майбутнє)

  • Співпраця між користувачами
  • Role-Based Access Control (RBAC)
  • Продвинута аналітика панель
  • Custom rule engine
  • API webhooks та інтеграції

🤝 Контрибьют

Ми приймаємо pull requests! Для великих змін, будь ласка, спочатку відкрийте issue для обговорення.

  1. Зробіть fork репозиторію
  2. Створіть feature branch (git checkout -b feature/amazing-feature)
  3. Commit ваші зміни (git commit -m 'Додав крутий функціонал')
  4. Push на branch (git push origin feature/amazing-feature)
  5. Відкрийте Pull Request

📝 Contribution Guidelines

  • Додайте тести для нового коду
  • Оновіть документацію
  • Дотримуйтесь стилю коду проекту
  • Переконайтесь, що всі тести проходять

📞 Підтримка та документація


📄 Ліцензія

Проект ліцензований під MIT License - дивіться файл LICENSE для деталей.


🙏 Подяки

Побудовано з допомогою:


🌟 Якщо вам подобається проект, дайте йому ⭐ на GitHub!

Готові аудитувати документи? Почніть з docker-compose up -d 🚀

⬆ Повернутися до верхньої частини

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages