101 lines
3.8 KiB
Python
101 lines
3.8 KiB
Python
# -*- 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,
|
||
} |