|
|
""" |
|
|
Constants and configuration values for Medical Transcriber application. |
|
|
|
|
|
Centralizes all magic numbers, strings, colors, and paths. |
|
|
""" |
|
|
|
|
|
from pathlib import Path |
|
|
from enum import Enum |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROJECT_ROOT = Path(__file__).parent.parent |
|
|
RESULTS_DIR = PROJECT_ROOT / "results" |
|
|
REPORTS_DIR = RESULTS_DIR / "reports" |
|
|
LOGS_DIR = PROJECT_ROOT / "logs" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UIColors: |
|
|
"""UI color palette.""" |
|
|
PRIMARY_GREEN = "#4CAF50" |
|
|
HOVER_GREEN = "#45a049" |
|
|
DISABLED_GRAY = "#cccccc" |
|
|
TEXT_DARK = "#333333" |
|
|
TEXT_LIGHT = "#f5f5f5" |
|
|
BORDER_GRAY = "#cccccc" |
|
|
SUCCESS_GREEN = "#4CAF50" |
|
|
ERROR_RED = "#f44336" |
|
|
WARNING_ORANGE = "#ff9800" |
|
|
INFO_BLUE = "#2196F3" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UIDimensions: |
|
|
"""UI dimension constants.""" |
|
|
MAIN_WINDOW_WIDTH = 1200 |
|
|
MAIN_WINDOW_HEIGHT = 800 |
|
|
DIALOG_WIDTH = 500 |
|
|
DIALOG_HEIGHT = 400 |
|
|
MIN_RESULTS_HEIGHT = 200 |
|
|
BUTTON_PADDING = 10 |
|
|
BORDER_RADIUS = 5 |
|
|
GROUP_BOX_MARGIN_TOP = 10 |
|
|
GROUP_BOX_PADDING = 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FontConfig: |
|
|
"""Font configuration.""" |
|
|
DEFAULT_FONT = "Times New Roman" |
|
|
DEFAULT_SIZE = 12 |
|
|
HEADING_SIZE = 14 |
|
|
TITLE_SIZE = 14 |
|
|
MONOSPACE_FONT = "Courier New" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AudioFormats: |
|
|
"""Supported audio formats.""" |
|
|
SUPPORTED_EXTENSIONS = [".wav", ".mp3", ".m4a", ".flac", ".ogg"] |
|
|
FILE_DIALOG_FILTER = "Audio Files (*.wav *.mp3 *.m4a);;All Files (*)" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelDefaults: |
|
|
"""Default model configurations.""" |
|
|
WHISPER_DEVICE = "auto" |
|
|
WHISPER_DTYPE = "float32" |
|
|
WHISPER_LANGUAGE = "russian" |
|
|
OPENAI_MODEL = "gpt-4o" |
|
|
OPENROUTER_MODEL = "google/gemini-3-flash-preview" |
|
|
TEMPERATURE = 0.1 |
|
|
MAX_TOKENS = 4000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class APISettings: |
|
|
"""API configuration settings.""" |
|
|
OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1" |
|
|
API_TIMEOUT = 120 |
|
|
MAX_RETRIES = 3 |
|
|
RETRY_DELAY = 2 |
|
|
RATE_LIMIT_DELAY = 5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LoggingConfig: |
|
|
"""Logging configuration.""" |
|
|
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" |
|
|
LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S" |
|
|
LOG_LEVEL = "INFO" |
|
|
LOG_FILE_FORMAT = "transcription_{timestamp}.log" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Messages: |
|
|
"""UI message strings.""" |
|
|
|
|
|
ERROR_NO_AUDIO_FILE = "Пожалуйста, выберите аудиофайл!" |
|
|
ERROR_FILE_NOT_FOUND = "Файл не найден" |
|
|
ERROR_NO_PATIENT_DATA = "Для создания отчёта необходимо заполнить данные пациента!" |
|
|
ERROR_INVALID_CONFIG = "Ошибка при создании конфига" |
|
|
ERROR_TRANSCRIPTION_FAILED = "Ошибка обработки" |
|
|
ERROR_API_KEY_REQUIRED = "OpenRouter API ключ не найден" |
|
|
|
|
|
|
|
|
WARNING_TITLE = "Внимание" |
|
|
|
|
|
|
|
|
SUCCESS_TITLE = "Успешно" |
|
|
SUCCESS_TRANSCRIPTION = "Транскрибирование завершено!" |
|
|
SUCCESS_SETTINGS_SAVED = "Настройки сохранены!" |
|
|
|
|
|
|
|
|
STATUS_READY = "Готов к обработке" |
|
|
STATUS_INITIALIZING = "Инициализация пайплайна..." |
|
|
STATUS_TRANSCRIBING = "Запуск транскрибирования..." |
|
|
STATUS_COMPLETED = "Обработка завершена!" |
|
|
STATUS_PATIENT_NOT_FILLED = "Данные пациента не заполнены" |
|
|
STATUS_PATIENT_FILLED = "Пациент: " |
|
|
|
|
|
|
|
|
BTN_START = "▶ Начать транскрибирование" |
|
|
BTN_CLEAR = "🗑 Очистить результаты" |
|
|
BTN_BROWSE = "Обзор..." |
|
|
BTN_SAVE = "💾 Сохранить настройки" |
|
|
BTN_OK = "OK" |
|
|
BTN_CANCEL = "Отмена" |
|
|
|
|
|
|
|
|
TAB_TRANSCRIPTION = "Транскрибирование" |
|
|
TAB_SETTINGS = "Настройки" |
|
|
|
|
|
|
|
|
GROUP_AUDIO_FILE = "1. Выбор аудиофайла" |
|
|
GROUP_PATIENT_DATA = "2. Данные пациента" |
|
|
GROUP_OPTIONS = "3. Опции обработки" |
|
|
GROUP_STATUS = "4. Статус обработки" |
|
|
GROUP_RESULTS = "5. Результаты" |
|
|
GROUP_WHISPER_MODEL = "Модель Whisper" |
|
|
GROUP_OPENROUTER_API = "OpenRouter API (для LLM-коррекции)" |
|
|
GROUP_MEDICAL_TERMS = "База медицинских терминов" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ValidationRules: |
|
|
"""Data validation rules.""" |
|
|
MIN_AUDIO_DURATION = 0.1 |
|
|
MAX_AUDIO_DURATION = 3600 |
|
|
MIN_TEXT_LENGTH = 10 |
|
|
MAX_TEXT_LENGTH = 1000000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FileDefaults: |
|
|
"""File operation defaults.""" |
|
|
TIMESTAMP_FORMAT = "%Y%m%d_%H%M%S" |
|
|
JSON_INDENT = 2 |
|
|
ENCODING = "utf-8" |
|
|
FILE_PERMISSIONS = 0o644 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Placeholders: |
|
|
"""UI placeholder text.""" |
|
|
AUDIO_FILE_NOT_SELECTED = "Аудиофайл не выбран" |
|
|
PATIENT_NAME = "Фамилия Имя Отчество" |
|
|
PATIENT_DOB = "ДД.MM.YYYY" |
|
|
STUDY_AREA = "Область исследования (напр. МРТ головы)" |
|
|
STUDY_NUMBER = "Номер исследования" |
|
|
STUDY_DATE = "ДД.MM.YYYY" |
|
|
DOCTOR_NAME = "ФИО врача" |
|
|
API_KEY = "Введите ваш API ключ OpenRouter" |
|
|
RESULTS_PLACEHOLDER = "Результаты обработки появятся здесь" |
|
|
MODEL_PATH = "Путь к папке с моделью Whisper" |
|
|
TERMS_FILE = "Путь к файлу с медицинскими терминами" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReportDefaults: |
|
|
"""Report generation defaults.""" |
|
|
DOCUMENT_TITLE = "Магнитно-резонансная томография" |
|
|
DEFAULT_FONT_NAME = "Times New Roman" |
|
|
DEFAULT_FONT_SIZE = 12 |
|
|
HEADING_FONT_SIZE = 14 |
|
|
|
|
|
|
|
|
class ProcessingSteps(Enum): |
|
|
"""Pipeline processing steps.""" |
|
|
INITIALIZATION = "initialization" |
|
|
STT = "stt" |
|
|
KNOWLEDGE_BASE = "knowledge_base" |
|
|
CORRECTION = "llm_correction" |
|
|
REPORT_GENERATION = "report_generation" |
|
|
COMPLETION = "completion" |
|
|
|