basyx commited on
Commit
d7fe904
·
verified ·
1 Parent(s): af84476

Add speaker-aware transcript schema

Browse files
Files changed (1) hide show
  1. app/models/transcript.py +31 -2
app/models/transcript.py CHANGED
@@ -1,6 +1,20 @@
1
  from __future__ import annotations
2
 
3
- from pydantic import BaseModel, ConfigDict, Field
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
 
6
  class TranscriptWord(BaseModel):
@@ -9,6 +23,13 @@ class TranscriptWord(BaseModel):
9
  start: float = Field(ge=0)
10
  end: float = Field(ge=0)
11
  probability: float | None = Field(default=None, ge=0, le=1)
 
 
 
 
 
 
 
12
 
13
 
14
  class TranscriptSegment(BaseModel):
@@ -17,17 +38,25 @@ class TranscriptSegment(BaseModel):
17
  start: float = Field(ge=0)
18
  end: float = Field(ge=0)
19
  text: str
 
20
  words: list[TranscriptWord] = Field(default_factory=list)
21
 
 
 
 
 
 
 
22
 
23
  class Transcript(BaseModel):
24
  model_config = ConfigDict(extra="forbid")
25
- schema_version: str = "1.0"
26
  language: str
27
  language_probability: float = Field(ge=0, le=1)
28
  duration: float = Field(ge=0)
29
  task: str
30
  model: str
31
  text: str
 
32
  segments: list[TranscriptSegment] = Field(default_factory=list)
33
  word_timestamps: bool = True
 
1
  from __future__ import annotations
2
 
3
+ from pydantic import BaseModel, ConfigDict, Field, model_validator
4
+
5
+
6
+ class DiarizationSpan(BaseModel):
7
+ model_config = ConfigDict(extra="forbid")
8
+
9
+ speaker: str = Field(min_length=1, max_length=128)
10
+ start: float = Field(ge=0)
11
+ end: float = Field(ge=0)
12
+
13
+ @model_validator(mode="after")
14
+ def validate_range(self) -> "DiarizationSpan":
15
+ if self.end <= self.start:
16
+ raise ValueError("diarization span end must be greater than start")
17
+ return self
18
 
19
 
20
  class TranscriptWord(BaseModel):
 
23
  start: float = Field(ge=0)
24
  end: float = Field(ge=0)
25
  probability: float | None = Field(default=None, ge=0, le=1)
26
+ speaker: str | None = Field(default=None, min_length=1, max_length=128)
27
+
28
+ @model_validator(mode="after")
29
+ def validate_range(self) -> "TranscriptWord":
30
+ if self.end < self.start:
31
+ raise ValueError("word end must be greater than or equal to start")
32
+ return self
33
 
34
 
35
  class TranscriptSegment(BaseModel):
 
38
  start: float = Field(ge=0)
39
  end: float = Field(ge=0)
40
  text: str
41
+ speaker: str | None = Field(default=None, min_length=1, max_length=128)
42
  words: list[TranscriptWord] = Field(default_factory=list)
43
 
44
+ @model_validator(mode="after")
45
+ def validate_range(self) -> "TranscriptSegment":
46
+ if self.end < self.start:
47
+ raise ValueError("segment end must be greater than or equal to start")
48
+ return self
49
+
50
 
51
  class Transcript(BaseModel):
52
  model_config = ConfigDict(extra="forbid")
53
+ schema_version: str = "1.1"
54
  language: str
55
  language_probability: float = Field(ge=0, le=1)
56
  duration: float = Field(ge=0)
57
  task: str
58
  model: str
59
  text: str
60
+ speakers: list[str] = Field(default_factory=list)
61
  segments: list[TranscriptSegment] = Field(default_factory=list)
62
  word_timestamps: bool = True