Skip to content

ark2016/MLOpsVK

Repository files navigation

MLOps A.Lebedev — URL→Parser → LLM Load-Balancer → GPU Classifier

TL;DR

# 1. Создайте файл окружения с вашим API‑ключом Mistral:
echo "MISTRAL_API_KEY=<your_key>" > .env

# 2. Сборка и запуск сервисов:
docker compose build --pull   # сперва один раз
docker compose up -d          # затем можно перезапускать без сборки

# 3. Проверка статуса (health‑check):
# Parser       : http://localhost:7000/docs
# Gateway      : http://localhost:7100/docs
# Classifier   : http://localhost:7200/docs
# Llama server : http://localhost:8080/health

🛠️ Prerequisites

  • Ubuntu 22.04 LTS
  • Docker Engine & Docker Compose v2
  • Git
  • CUDA‑capable GPU (для локального Llama)
  • Mistral API key (free tier supported)

⚙️ Setup

  1. Клонируйте репозиторий и перейдите в каталог проекта:
git clone <repo-url>
cd mlops\_project\_a.lebedev
  1. Создайте файл окружения:
echo "MISTRAL_API_KEY=your_key_here" > .env
  1. Сборка образов Docker:
docker compose build --pull
  1. Запуск сервисов в фоне:
docker compose up -d

🚀 Usage

  • Parser (HTML→Markdown):
curl -X POST [http://localhost:7000/parse](http://localhost:7000/parse)&#x20;
-H "Content-Type: application/json"&#x20;
-d '{"url":"[https://example.com"}](https://example.com%22})'

Возвращает JSON с полем text_md.

  • LLM Gateway (Markdown→LLM):
curl -X POST http://localhost:7100/chat \
   -H "Content-Type: application/json" \
   -d '{"messages":[{"role":"user","content":"<text_md>"}]}'
  • Classifier (Text→Category):
curl -X POST [http://localhost:7200/predict](http://localhost:7200/predict)&#x20;
-H "Content-Type: application/json"&#x20;
-d '{"text":"<snippet>","top\_k":3}'c
  • Local Llama (for direct access):
curl http://localhost:8080/health

Predict class by URL

На данный момент отдельного эндпоинта, который принимал бы URL и возвращал категорию «в один вызов», нет. Вместо этого используется двухшаговый сценарий:

  1. Извлечение текста

    curl -s -X POST http://localhost:7000/parse \
         -H "Content-Type: application/json" \
         -d '{"url":"<URL>"}' \
      | jq -r '.text_md' > page.md
  2. Классификация

    curl -s -X POST http://localhost:7200/predict \
         -H "Content-Type: application/json" \
         -d "{\"text\":\"$(head -c 500 page.md)\",\"top_k\":1}" \
      | jq -r '.prediction // .predictions[0]'

где <URL> — адрес страницы.

📁 Project Structure

.
├── README.md
├── classifier_service
│   ├── main.py
│   ├── ru_ecomm_tree_category.json
│   └── ru_ecomm_tree_category.json.dvc
├── docker
│   ├── Dockerfile.classifier
│   ├── Dockerfile.gateway
│   ├── Dockerfile.llama_cpp
│   └── Dockerfile.parser
├── docker-compose.yml
├── llm_gateway
│   ├── main.py
│   └── requirements.txt
├── models
│   ├── QVikhr-3-1.7B-Instruction-noreasoning.Q4_K_M.gguf
│   └── QVikhr-3-1.7B-Instruction-noreasoning.Q4_K_M.gguf.dvc
├── parser_service
│   ├── main.py
   └── requirements.txt
├── res.log
├── tests
│   ├── run_integration_test.sh
│   └── smoke_tests.py
└── utils
    └── preprocess.py

Releases

No releases published

Packages

 
 
 

Contributors