File size: 8,174 Bytes
e275025 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
"""
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 PATHS
# ============================================================================
PROJECT_ROOT = Path(__file__).parent.parent
RESULTS_DIR = PROJECT_ROOT / "results"
REPORTS_DIR = RESULTS_DIR / "reports"
LOGS_DIR = PROJECT_ROOT / "logs"
# ============================================================================
# UI COLORS (RGB HEX)
# ============================================================================
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"
# ============================================================================
# UI DIMENSIONS (PIXELS)
# ============================================================================
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
# ============================================================================
# FONTS
# ============================================================================
class FontConfig:
"""Font configuration."""
DEFAULT_FONT = "Times New Roman"
DEFAULT_SIZE = 12
HEADING_SIZE = 14
TITLE_SIZE = 14
MONOSPACE_FONT = "Courier New"
# ============================================================================
# AUDIO FORMATS
# ============================================================================
class AudioFormats:
"""Supported audio formats."""
SUPPORTED_EXTENSIONS = [".wav", ".mp3", ".m4a", ".flac", ".ogg"]
FILE_DIALOG_FILTER = "Audio Files (*.wav *.mp3 *.m4a);;All Files (*)"
# ============================================================================
# MODEL CONFIGURATIONS
# ============================================================================
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
# ============================================================================
# API SETTINGS
# ============================================================================
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
# ============================================================================
# LOGGING
# ============================================================================
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"
# ============================================================================
# MESSAGES
# ============================================================================
class Messages:
"""UI message strings."""
# Errors
ERROR_NO_AUDIO_FILE = "Пожалуйста, выберите аудиофайл!"
ERROR_FILE_NOT_FOUND = "Файл не найден"
ERROR_NO_PATIENT_DATA = "Для создания отчёта необходимо заполнить данные пациента!"
ERROR_INVALID_CONFIG = "Ошибка при создании конфига"
ERROR_TRANSCRIPTION_FAILED = "Ошибка обработки"
ERROR_API_KEY_REQUIRED = "OpenRouter API ключ не найден"
# Warnings
WARNING_TITLE = "Внимание"
# Success
SUCCESS_TITLE = "Успешно"
SUCCESS_TRANSCRIPTION = "Транскрибирование завершено!"
SUCCESS_SETTINGS_SAVED = "Настройки сохранены!"
# Status
STATUS_READY = "Готов к обработке"
STATUS_INITIALIZING = "Инициализация пайплайна..."
STATUS_TRANSCRIBING = "Запуск транскрибирования..."
STATUS_COMPLETED = "Обработка завершена!"
STATUS_PATIENT_NOT_FILLED = "Данные пациента не заполнены"
STATUS_PATIENT_FILLED = "Пациент: "
# Buttons
BTN_START = "▶ Начать транскрибирование"
BTN_CLEAR = "🗑 Очистить результаты"
BTN_BROWSE = "Обзор..."
BTN_SAVE = "💾 Сохранить настройки"
BTN_OK = "OK"
BTN_CANCEL = "Отмена"
# Tabs
TAB_TRANSCRIPTION = "Транскрибирование"
TAB_SETTINGS = "Настройки"
# Groups
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 = "База медицинских терминов"
# ============================================================================
# DATA VALIDATION
# ============================================================================
class ValidationRules:
"""Data validation rules."""
MIN_AUDIO_DURATION = 0.1 # seconds
MAX_AUDIO_DURATION = 3600 # seconds (1 hour)
MIN_TEXT_LENGTH = 10 # characters
MAX_TEXT_LENGTH = 1000000 # characters
# ============================================================================
# FILE OPERATIONS
# ============================================================================
class FileDefaults:
"""File operation defaults."""
TIMESTAMP_FORMAT = "%Y%m%d_%H%M%S"
JSON_INDENT = 2
ENCODING = "utf-8"
FILE_PERMISSIONS = 0o644
# ============================================================================
# PLACEHOLDERS
# ============================================================================
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 = "Путь к файлу с медицинскими терминами"
# ============================================================================
# REPORT TEMPLATES
# ============================================================================
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"
|