Перейти к основному содержимому

Management API

URL: http://localhost:5100/

API позволяет:

  • добавлять модели
  • деплоить модели
  • прерывать деплой моделей
  • выполнять Performance тесты с использованием библиотеки compressa-perf
  • выполнять Observability тесты на стандартных или на пользовательском датасете с использованием библиотеки DeepEval или Self-Scoring (для Qwen2.5)

Библиотека моделей

GET /v1/models/

Список моделей, доступных для запуска и дообучения.

Пример:

curl -X 'GET' \
'http://localhost:5100/v1/models/' \
-H 'accept: application/json'

Схема ответа:

[
{
"model_id": "string",
"adapter": true,
"base_model_id": "string"
}
]

POST /v1/models/add/

Скачивание модели с Hugging Face.

Параметры:

  • query: model_id - идентификатор модели на Hugging Face, например Qwen/Qwen3-14B для ссылки.

Пример:

curl -X 'POST' \
'http://localhost:5100/v1/models/add/?model_id=mymodel_id' \
-H 'accept: application/json' \
-d ''

Схема ответа:

{
"id": "4d78d943-1896-4d7b-9f11-b10cc2389ba3",
"name": "DOWNLOAD_mymodel_id",
"status": "RUNNING",
"started_at": "2024-03-21T09:58:29.846708"
}

Запуск моделей

GET /v1/deploy/

Получить информацию о текущей развернутой модели.

Пример:

curl -X 'GET' \
'http://localhost:5100/v1/deploy/' \
-H 'accept: application/json'

Схема ответа:

{
"model_id": "string",
"adapter_ids": [
"string"
]
}

POST /v1/deploy/

Запуск моделей и дообученных адаптеров для инференса. Список id можно получить с помощью GET /v1/models/.

Тело запроса:

{
"model_id": "string",
"adapter_ids": [
"string"
]
}
  • model_id - идентификатор модели
  • adapter_ids - список идентификаторов адаптеров

Пример:

curl -X 'POST' \
'http://localhost:5100/v1/deploy/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model_id": "model_id1",
"adapter_ids": [
"adapter_id1",
"adapter_id2"
]
}'

Схема ответа:

{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string",
"status": "CREATED",
"started_at": "2024-03-21T10:10:07.521Z"
}

GET /v1/deploy/status

Получить статус развернутой модели.

Пример:

curl -X 'GET' \
'http://localhost:5100/v1/deploy/status/' \
-H 'accept: application/json'

Схема ответа:

{
"model_id": "model_id1",
"adapter_ids": [
"adapter_id1",
"adapter_id2"
],
"job": {
"id": "8a63349c-078f-4e98-8968-4f011593329c",
"name": "DEPLOY_model_id1_adapters_id1_id2",
"status": "RUNNING",
"started_at": "2024-03-21T07:35:16.861681"
}
}

POST /v1/deploy/interrupt/

Отключение текущей развернутой модели.

Пример:

curl -X 'POST' \
'http://localhost:5100/v1/deploy/interrupt/' \
-H 'accept: application/json' \
-d ''

Схема ответа:

{
"id": "8a63349c-078f-4e98-8968-4f011593329c",
"name": "DEPLOY_model_id1_adapters_id1_id2",
"status": "RUNNING",
"started_at": "2024-03-21T07:35:16.861681"
}

Jobs

Операции, такие как загрузка модели или развертывание, связаны с jobs. Следующие API позволяют управлять выполнением jobs.

GET /v1/jobs/

Получить все jobs со статусами.

Пример:

curl -X 'GET' \
'http://localhost:5100/v1/jobs/' \
-H 'accept: application/json'

Схема ответа:

[
{
"id": "8a63349c-078f-4e98-8968-4f011593329c",
"name": "DEPLOY_model_id1_adapters_id1_id2",
"status": "RUNNING",
"started_at": "2024-03-21T07:35:16.861681"
},
{
"id": "4d78d943-1896-4d7b-9f11-b10cc2389ba3",
"name": "DOWNLOAD_test",
"status": "FINISHED",
"started_at": "2024-03-21T09:58:29.846708"
}
]

GET /v1/jobs/{job_id}/status/

Получить последний статус job с job_id.

Параметры:

  • path: job_id

Пример:

curl -X 'GET' \
'http://localhost:5100/v1/jobs/4d78d943-1896-4d7b-9f11-b10cc2389ba3/status/' \
-H 'accept: application/json'

Схема ответа:

{
"id": "4d78d943-1896-4d7b-9f11-b10cc2389ba3",
"name": "DOWNLOAD_test",
"status": "FINISHED",
"started_at": "2024-03-21T09:58:29.846708"
}

POST /v1/jobs/{job_id}/interrupt/

Прервать выполнение job с job_id.

Параметры:

  • path: job_id

Пример:

curl -X 'POST' \
'http://localhost:5100/v1/jobs/8a63349c-078f-4e98-8968-4f011593329c/interrupt/' \
-H 'accept: application/json' \
-d ''

Схема ответа:

{
"id": "8a63349c-078f-4e98-8968-4f011593329c",
"name": "DEPLOY_model_id1_adapters_id1_id2",
"status": "KILLED",
"started_at": "2024-03-21T07:35:16.861681"
}

Запуск Performance тестов

GET /v1/performance/

GET /v1/performance/status

Получить информацию о запущенном тесте (если есть) или указание о том что тест завершен и результат сохранен.

Пример:

curl -X 'GET' 'http://localhost:5100/v1/performance/'

Схема ответа если тест в процессе:

{"model":"Compressa-LLM","job":{"id":"b83cb091-5acd-4254-84b5-e1141ec01711","name":"performance TEST","status":"RUNNING","started_at":"2025-08-03T10:07:30.818815","exception_details":null,"retry":0},"message":null}

Схема ответа если тест завершен

{"model":"Compressa-LLM","job":{"id":"b83cb091-5acd-4254-84b5-e1141ec01711","name":"performance TEST","status":"FINISHED","started_at":"2025-08-03T10:07:30.818815","exception_details":null,"retry":0},"message":"Results are available in /app/resources/performance_results"}

POST /v1/performance/

Запуск теста. В запросе передаются параметры теста, такие как число примеров, число потоков, формат формирования отчетов.

Пример

curl -X 'POST' 'http://localhost:5100/v1/performance/?num_tasks=100&num_runners=10&report_mode=md'

Схема ответа:

{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string",
"status": "RUNNING",
"started_at": "2024-03-21T10:10:07.521Z"
}

По окончании тестирования отчеты сохраняются в выбранном формате (pdf, md или csv) в смонтированную ранее папку RESOURCES_PATH

POST /v1/performance/interrupt/

Прерывание запущенного теста.

Пример:

curl -X 'POST' \
'http://localhost:5100/v1/performance/interrupt/' \
-H 'accept: application/json' \
-d ''

Схема ответа:

{"id":"6be69577-ebe8-4062-a5cb-ad8085c11393","name":"performance TEST","status":"INTERRUPTED","started_at":"2025-08-03T10:18:00.368896","exception_details":null,"retry":0}

Запуск тестов качества

GET /v1/metrics/

GET /v1/metrics/status

Получить информацию о запущенном тесте или результат теста если тест завершен.

Пример:

curl -X 'GET' \
'http://localhost:5100/v1/metrics/'

Схема ответа если тест в процессе:

{"model":"Compressa-LLM","message":null,"job":{"id":"26908ef2-60b4-4211-9e7f-3a649c200419","name":"QUALITY TEST","status":"RUNNING","started_at":"2025-08-03T10:30:18.573467","exception_details":null,"retry":0}}

Схема ответа если тест завершен

{"model":"Compressa-LLM","job":{"id":"b83cb091-5acd-4254-84b5-e1141ec01711","name":"observability TEST","status":"FINISHED","started_at":"2025-08-03T10:07:30.818815","exception_details":null,"retry":0},"message":"Results are available in /app/resources/quality_tests"}

POST /v1/metrics/

Запуск теста. В запросе передаются параметры теста, такие как датасет (стандартный или пользовательский) и число случайно выбранных примеров (по умолчанию - 10, если указать -1 - все)

Запрос для стандартного датасета

curl -X 'POST' 'http://localhost:5100/v1/metrics/?dataset=medical&num_examples=5'

Список доступных стандартных датасетов

Запрос для пользовательского датасета

import requests

url = 'http://localhost:5100/v1/metrics/?dataset=custom'
payload = {
"question": [
"Что важно при сварке титана и его сплавов?",
"Для чего нужна борная кислота в теплоносителе реактора?",
"В каком году затонула АПЛ Комсомолец?",
],
"answers": [
"Обеспечить инертную атмосферу в зоне сварки, не допустить окисления титана",
"Борная кислота используется как жидкий поглотитель для управления цепной реакцией деления",
"В 1989 году",
]
}

response = requests.post(
url,
headers={
"accept": "application/json",
"Content-Type": "application/json"
},
json=payload
)

Схема ответа:

{
{"id":"ce79eaee-4541-4341-ac21-b79d9bb7f9bb","name":"QUALITY TEST","status":"RUNNING","started_at":"2025-08-03T10:34:09.113636","exception_details":null,"retry":0}
}

По окончании тестирования отчеты сохраняются в pdf, csv и json формате в смонтированную ранее папку RESOURCES_PATH

POST /v1/metrics/interrupt/

Прерывание запущенного теста.

Пример:

curl -X 'POST' \
'http://localhost:5100/v1/metrics/interrupt/' \
-H 'accept: application/json' \
-d ''

Схема ответа:

{"id":"ce79eaee-4541-4341-ac21-b79d9bb7f9bb","name":"QUALITY TEST","status":"INTERRUPTED","started_at":"2025-08-03T10:34:09.113636","exception_details":null,"retry":0}

Self-Check Mode - Самооценка моделью качества своих ответов на пользовательском датасете без разметки.

Экспериментальный режим.

О методе оценки

Основан на алгоритме EM (Expectation-Maximization) для оценки качества языковых моделей без эталонных ответов (ground truth). Алгоритм анализирует 6 ключевых метрик от 0 до 10 (чем больше, тем лучше):

  • Self-Consistency — согласованность ответов при разных температурах
  • Self-Rating —самооценка модели своих ответов
  • STD-Rating — разброс оценок модели своих ответов при разных температурах
  • Abstention — способность модели выражать неуверенность
  • Chain-of-Thought Critique — качество пошагового рассуждения
  • Paraphrase Self-Consistency — согласованность при перефразировании вопросов

EM-алгоритм ранжирует каждый вопрос из датасета в зависимости от поведения модели на нем. Для каждого вопроса ставится свой latent score, который показывает лишь сравнительное качество модели по отношению к другим вопросам. Чем выше latent score, тем лучше качество модели на этом вопросе.

Так как на разных датасетах может быть разное распределение качества ответов модели, то вводятся веса EM модели, которые показывают, насколько сильно каждая метрика влияет на итоговый latent score. Вес метрики тем больше, чем лучше она описывает весь датасет и согласуется с другими метриками. Итоговая оценка агрегируется как взвешенное среднее оценок метрик по квантилям latent score. Оценки усредняются с учетом весов EM модели. Это даёт возможность получить итоговую объективную оценку качества модели, которую можно сравнивать с другими датасетами.

import requests
url = 'http://localhost:5100/v1/metrics/?dataset=custom&mode=no_gt'
payload = {
"question": [
"Какие факторы повышают риск развития злокачественных опухолей?",
"Как можно быстро перейти в каталог с длинным именем, и как узнать тип файла с помощью команды ls?",
],
"answers": []
}

response = requests.post(
url,
headers={
"accept": "application/json",
"Content-Type": "application/json"
},
json=payload
)

Схема ответа:

{
'id': 'c8b0e922-f89b-4d32-af34-bcee22f5a82f', 'name': 'QUALITY TEST [NO_GT (PARALLEL)]', 'status': 'RUNNING', 'started_at': '2025-10-02T14:19:59.471777', 'exception_details': None, 'retry': 0
}