Refactor project structure and add new features

This commit is contained in:
Serge Zaigraeff
2025-10-23 00:42:09 +03:00
parent 144414fcf8
commit 852f7975b9
63 changed files with 8101 additions and 1341 deletions
+53 -45
View File
@@ -1,76 +1,84 @@
# Структура проекта Whisper API Service
# Whisper API server project structure
Проект представляет собой локальный API-сервис для распознавания речи, построенный на основе модели Whisper. Сервис разработан как OpenAI-совместимый API, что позволяет использовать его в качестве локальной альтернативы облачным сервисам распознавания речи.
The project is a local API service for speech recognition based on the Whisper model. The service is designed as an OpenAI-compatible API, allowing it to be used as a local alternative to cloud-based speech recognition services.
## Основные файлы
## Main files
### Корневые файлы
- **server.py** - точка входа в приложение, инициализирует и запускает сервис
- **server.sh** - bash-скрипт для запуска сервера с опциональным обновлением conda-окружения
- **config.json** - конфигурационный файл с настройками сервиса
- **requirements.txt** - зависимости проекта для conda/pip
### Root files
- **server.py** - Application entry point, initializes and starts the service.
- **server.sh** - Bash script to start the server with optional conda environment update.
- **config.json** - Configuration file with service settings.
- **requirements.txt** - Project dependencies for conda/pip.
### Модуль `app`
### `app` module
#### app/\_\_init\_\_.py
Содержит основной класс `WhisperServiceAPI`, который инициализирует приложение, загружает конфигурацию и запускает сервер на указанном порту.
Contains the main class `WhisperServiceAPI`, which initializes the application, loads the configuration, and starts the server on the specified port using the production-ready Waitress server.
#### app/logger.py
Настройка логирования для всех компонентов приложения.
Configures logging for all application components.
#### app/transcriber.py
Содержит класс `WhisperTranscriber`, который загружает модель Whisper и выполняет распознавание речи. Класс определяет оптимальное устройство для вычислений (CPU, CUDA, MPS) и поддерживает ускорение с помощью Flash Attention 2.
Contains the `WhisperTranscriber` class, which loads the Whisper model and performs speech recognition. The class determines the optimal device for computations (CPU, CUDA, MPS) and supports acceleration with Flash Attention 2.
#### app/audio_processor.py
Содержит класс `AudioProcessor` для предобработки аудиофайлов перед их транскрибацией. Включает методы для:
- Конвертации в WAV с частотой 16 кГц
- Нормализации уровня громкости
- Добавления тишины в начало записи
- Очистки временных файлов
Contains the `AudioProcessor` class for preprocessing audio files before transcription. Includes methods for:
- Converting to WAV with a 16 kHz sample rate.
- Normalizing volume level (with configurable `norm_level` parameters).
- Applying compression/expansion (with configurable `compand_params` parameters).
- Speeding up audio playback for faster recognition (with configurable `audio_speed_factor` parameter).
- Adding silence at the beginning of the recording.
- Cleaning up temporary files.
#### app/audio_sources.py
Содержит абстрактный класс `AudioSource` и его конкретные реализации для различных источников аудио:
- `UploadedFileSource` - для файлов, загруженных через HTTP-запрос
- `URLSource` - для файлов, доступных по URL
- `Base64Source` - для аудио, закодированного в base64
- `LocalFileSource` - для локальных файлов на сервере
- `FakeFile` - вспомогательный класс для унификации обработки из разных источников
Contains the abstract class `AudioSource` and its concrete implementations for various audio sources:
- `UploadedFileSource` - for files uploaded via HTTP request.
- `URLSource` - for files available via URL.
- `Base64Source` - for audio encoded in base64.
- `LocalFileSource` - for local files on the server.
- `FakeFile` - a helper class for unifying processing from different sources.
#### app/history_logger.py
Contains the `HistoryLogger` class for saving transcription history.
#### app/routes.py
Содержит классы:
- `TranscriptionService` - сервис для обработки и транскрибации аудиофайлов
- `Routes` - регистрирует все эндпоинты API, включая OpenAI-совместимые маршруты
Contains the classes:
- `TranscriptionService` - a service for processing and transcribing audio files, including methods for getting audio duration and transcribing from various sources.
- `Routes` - registers all API endpoints, including OpenAI-compatible routes and an endpoint for retrieving service configuration.
## Основные классы и их описание
## Main classes
### WhisperServiceAPI
Основной класс приложения, инициализирует сервис, загружает конфигурацию и запускает сервер с использованием Waitress.
The main application class, initializes the service, loads the configuration, and starts the server using Waitress.
### WhisperTranscriber
Класс для распознавания речи с использованием модели Whisper. Определяет оптимальное устройство для вычислений, загружает модель с учетом доступного оборудования и выполняет транскрибацию аудиофайлов.
A class for speech recognition using the Whisper model. Determines the optimal device for computations, loads the model considering available hardware, and performs transcription of audio files.
### AudioProcessor
Класс для предобработки аудиофайлов. Выполняет конвертацию, нормализацию и добавление тишины в начало записи для улучшения качества распознавания.
A class for preprocessing audio files. Performs conversion, normalization, and adds silence at the beginning of the recording to improve recognition quality, using configurable parameters.
### AudioSource (и наследники)
Абстрактный класс и его реализации для работы с различными источниками аудиофайлов. Обеспечивает унифицированный интерфейс для получения аудиофайлов из разных источников.
### AudioSource (and subclasses)
An abstract class and its implementations for working with various audio file sources. Provides a unified interface for obtaining audio files from different sources.
### HistoryLogger
A class for saving transcription history.
### TranscriptionService
Сервис, объединяющий логику обработки запросов и транскрибации аудио. Принимает источник аудио, обрабатывает его и возвращает результат транскрибации.
A service that combines the logic for processing requests and transcribing audio. Accepts an audio source, processes it, and returns the transcription result.
### Routes
Класс, регистрирующий все маршруты API сервиса, включая совместимые с OpenAI эндпоинты для интеграции с существующими клиентами.
A class that registers all API routes of the service, including OpenAI-compatible endpoints for integration with existing systems, as well as an endpoint for retrieving the current configuration.
## API Endpoints
## API endpoints
Сервис предоставляет несколько эндпоинтов, включая:
- `/health` - проверка статуса сервиса
- `/config` - получение текущей конфигурации
- `/local/transcriptions` - транскрибация локального файла на сервере
- `/v1/models` - получение списка доступных моделей (OpenAI-совместимый)
- `/v1/audio/transcriptions` - транскрибация загруженного файла (OpenAI-совместимый)
- `/v1/audio/transcriptions/url` - транскрибация по URL
- `/v1/audio/transcriptions/base64` - транскрибация из base64
- `/v1/audio/transcriptions/multipart` - транскрибация файла из multipart-формы
The service provides several endpoints, including:
- `/health` - Service status check.
- `/config` - Get current configuration.
- `/local/transcriptions` - Transcribe a local file on the server.
- `/v1/models` - Get a list of available models (OpenAI-compatible).
- `/v1/audio/transcriptions` - Transcribe an uploaded file (OpenAI-compatible).
- `/v1/audio/transcriptions/url` - Transcribe from a URL.
- `/v1/audio/transcriptions/base64` - Transcribe from base64.
- `/v1/audio/transcriptions/multipart` - Transcribe a file from a multipart form.
Сервис разработан таким образом, чтобы обеспечить максимальную гибкость в использовании и интеграцию с существующими системами, поддерживающими API OpenAI Whisper.
The service is designed to provide maximum flexibility in use and integration with existing systems that support the OpenAI Whisper API.