38 lines
2.5 KiB
Python
38 lines
2.5 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
class STTSegment(BaseModel):
|
|
"""발화 단위(Segment) 상세 데이터 모델"""
|
|
start_sec: float = Field(..., description="발화 시작 시간 (초)")
|
|
end_sec: float = Field(..., description="발화 종료 시간 (초)")
|
|
text: str = Field(..., description="교정이 완료된 텍스트")
|
|
speaker: Optional[str] = Field(default=None, description="휴리스틱 발화자 식별 결과")
|
|
absolute_start_time: Optional[str] = Field(default=None, description="ISO 8601 발화 시작 절대 시간")
|
|
absolute_end_time: Optional[str] = Field(default=None, description="ISO 8601 발화 종료 절대 시간")
|
|
audio_path: Optional[str] = Field(default=None, description="로컬 파일 경로 (Opus 변환본)")
|
|
id: Optional[int] = Field(default=None, description="DB segment ID (저장 후 매핑됨)")
|
|
|
|
class STTRequest(BaseModel):
|
|
"""STT 처리를 요청하기 위한 데이터 모델"""
|
|
audio_file_path: str = Field(..., description="변환할 .wav 등 오디오 파일의 절대/상대 경로")
|
|
language: str = Field(default="ko", description="오디오의 주 언어 코드 (기본값: 한국어)")
|
|
base_datetime: Optional[datetime] = Field(default=None, description="녹음 시작 절대 시간 (Line-In 동기화용)")
|
|
|
|
class STTResponse(BaseModel):
|
|
"""STT 처리 결과를 반환하기 위한 데이터 모델"""
|
|
text: str = Field(..., description="변환이 완료된 전체 문자열 텍스트")
|
|
language: str = Field(..., description="인식된/지정된 언어 코드")
|
|
segments: List[STTSegment] = Field(default_factory=list, description="개별 발화 단위 데이터 리스트")
|
|
processing_time_sec: Optional[float] = Field(default=None, description="STT 처리에 소요된 시간 (초)")
|
|
|
|
# 벤치마킹 지표
|
|
load_time_sec: Optional[float] = Field(default=None, description="모델 로드 시간 (초)")
|
|
audio_duration_sec: Optional[float] = Field(default=None, description="원본 오디오 총 길이 (초)")
|
|
peak_memory_mb: Optional[float] = Field(default=None, description="변환 중 발생한 최대 메모리 점유율 (MB)")
|
|
process_speed_x: Optional[float] = Field(default=None, description="오디오 길이 대비 처리 속도 비율 (배수)")
|
|
|
|
# 룰 기반 실시간 분석 결과
|
|
urgency: Optional[str] = Field(default="일반", description="긴급도 판별 결과")
|
|
train_number: Optional[str] = Field(default=None, description="추출된 열차 번호")
|