# coding: utf-8 """ 服务端数据类模块 定义服务端使用的数据类,包括任务(Task)和结果(Result)。 使用 dataclass 提供类型安全和清晰的数据结构。 """ from dataclasses import dataclass, field from typing import List, Optional @dataclass class Task: """ 语音识别任务 封装发送到识别进程的任务数据,包含音频数据和元信息。 Attributes: type: 任务类型 ('mic' 麦克风, 'file' 文件, 'cmd' 命令) data: 原始音频数据 (float32, 16kHz, mono) offset: 当前片段在整段音频中的时间偏移(秒) overlap: 片段重叠时间(秒),用于去重 task_id: 任务唯一标识 socket_id: WebSocket 连接标识 is_final: 是否为音频流的最后一个片段 time_start: 录音/音频开始时间戳 time_submit: 任务提交时间戳 samplerate: 采样率,默认 16000 Hz """ type: str data: bytes offset: float overlap: float task_id: str socket_id: str is_final: bool time_start: float time_submit: float context: str = '' language: str = 'auto' samplerate: int = 16000 command: str = '' # 特殊命令,如 'gpu_boost' / 'gpu_unboost' @dataclass class Result: """ 语音识别结果 封装识别进程返回的结果数据。 Attributes: task_id: 任务唯一标识 socket_id: WebSocket 连接标识 source: 音频来源 ('mic' 或 'file') duration: 已处理的音频总时长(秒) time_start: 录音/音频开始时间戳 time_submit: 片段提交时间戳 time_complete: 识别完成时间戳 text: 主要输出 - 简单文本拼接(不依赖时间戳,用于语音输入) text_accu: 精确输出 - 时间戳去重拼接(用于字幕生成) tokens: 字级 token 列表(与 timestamps 对应) timestamps: 字级时间戳列表(秒) is_final: 是否已完成所有片段识别 """ task_id: str socket_id: str type: str duration: float = 0.0 time_start: float = 0.0 time_submit: float = 0.0 time_complete: float = 0.0 # 主要输出(简单文本拼接) text: str = '' # 精确输出(时间戳拼接) text_accu: str = '' tokens: List[str] = field(default_factory=list) timestamps: List[float] = field(default_factory=list) is_final: bool = False @dataclass class RecognitionSession: """ 识别会话 封装单个 task_id 的所有中间识别状态。 """ task_id: str result: Result # 未来可在此扩展会话级状态,如 N-best 假设、中间特征缓存等