Add new file

This commit is contained in:
Markov Andrey
2026-06-30 14:30:29 +00:00
parent 59feffc190
commit a21fb65b38

101
rag/openapi.py Normal file
View File

@@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-
"""
Настройка OpenAPI для RAG-сервера.
Определяет теги, метаданные и примеры для автоматической документации.
"""
from typing import Dict, Any
# Метаданные API
API_METADATA = {
"title": "RAG-сервер Эфцекабот",
"version": "3.0.0",
"description": """
## Единый RAG-сервер для платформы Эфцекабот
Сервис предоставляет REST API для выполнения RAG-запросов, индексации документов,
а также распознавания текста на изображениях (OCR) и транскрибации аудио.
### Основные возможности
- **RAG-запросы** выполнение поиска по базе знаний с генерацией ответа.
- **Индексация** добавление документов в базу знаний.
- **OCR** распознавание текста на изображениях (JPEG, PNG, BMP, TIFF).
- **Транскрибация** преобразование речи в текст (OGG, WAV, MP3, AMR, M4A).
### Аутентификация
Все эндпоинты (кроме `/health`) требуют передачи API-ключа в заголовке `X-API-Key`.
""",
"contact": {
"name": "Команда Эфцекабот",
"email": "support@fckbot.ru",
"url": "https://fckbot.ru",
},
"license": {
"name": "ISC License",
},
}
# Теги для группировки эндпоинтов в документации
OPENAPI_TAGS = [
{
"name": "RAG",
"description": "Основные RAG-эндпоинты: запросы и индексация.",
},
{
"name": "Vision",
"description": "Распознавание текста на изображениях (OCR).",
},
{
"name": "Transcribe",
"description": "Транскрибация аудиофайлов (SaluteSpeech).",
},
{
"name": "Health",
"description": "Проверка состояния сервиса (без аутентификации).",
},
]
# Примеры для эндпоинтов (используются в документации)
EXAMPLES = {
"query": {
"summary": "Пример RAG-запроса",
"value": {
"query": "Какое тактовое время установлено на линии?",
"user_jid": "user@example.com",
"room_jid": None,
"prompts": {},
"intent_override": None,
"last_file_path": None,
"last_file_text": None,
}
},
"index": {
"summary": "Пример индексации документа",
"value": {
"file_name": "example.docx",
"file_text": "Содержимое документа...",
"user_jid": "user@example.com",
"room_jid": "room@conference.example.com",
"is_global": False,
"title": "Пример документа",
"metadata": {"author": "Иван Иванов"},
"file_hash": "a1b2c3...",
"update_if_exists": True,
}
}
}
def get_openapi_config() -> Dict[str, Any]:
"""
Возвращает конфигурацию OpenAPI для приложения FastAPI.
"""
return {
"title": API_METADATA["title"],
"version": API_METADATA["version"],
"description": API_METADATA["description"],
"contact": API_METADATA.get("contact"),
"license_info": API_METADATA.get("license"),
"openapi_tags": OPENAPI_TAGS,
}