from typing import List from pydantic import BaseModel, ValidationError, field_validator from pydantic import model_validator class StreamWordsModel(BaseModel): text: str start_time: float end_time: float @model_validator(mode="after") def check_result(self): if self.end_time < self.start_time: raise ValidationError("end-time 小于 start-time, error") return self class StreamDataModel(BaseModel): text: str language: str final_result: bool para_seq: int start_time: float end_time: float words: List[StreamWordsModel] @model_validator(mode="after") def check_result(self): if self.end_time < self.start_time: raise ValidationError("end-time 小于 start-time, error") return self class StreamResultModel(BaseModel): asr_results: StreamDataModel @field_validator('asr_results', mode="after") def convert_to_seconds(cls, v: StreamDataModel, values): # 在这里处理除以1000的逻辑 v.end_time = v.end_time / 1000 v.start_time = v.start_time / 1000 for word in v.words: word.start_time /= 1000 word.end_time /= 1000 return v class Config: validate_assignment = True class NonStreamDataModel(BaseModel): text: str para_seq: int start_time: float end_time: float @model_validator(mode="after") def check_result(self): if self.end_time < self.start_time: raise ValidationError("end-time 小于 start-time, error") return self class NonStreamResultModel(BaseModel): contents: List[NonStreamDataModel]