67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
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]
|