audex 1.0.7a3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. audex/__init__.py +9 -0
  2. audex/__main__.py +7 -0
  3. audex/cli/__init__.py +189 -0
  4. audex/cli/apis/__init__.py +12 -0
  5. audex/cli/apis/init/__init__.py +34 -0
  6. audex/cli/apis/init/gencfg.py +130 -0
  7. audex/cli/apis/init/setup.py +330 -0
  8. audex/cli/apis/init/vprgroup.py +125 -0
  9. audex/cli/apis/serve.py +141 -0
  10. audex/cli/args.py +356 -0
  11. audex/cli/exceptions.py +44 -0
  12. audex/cli/helper/__init__.py +0 -0
  13. audex/cli/helper/ansi.py +193 -0
  14. audex/cli/helper/display.py +288 -0
  15. audex/config/__init__.py +64 -0
  16. audex/config/core/__init__.py +30 -0
  17. audex/config/core/app.py +29 -0
  18. audex/config/core/audio.py +45 -0
  19. audex/config/core/logging.py +163 -0
  20. audex/config/core/session.py +11 -0
  21. audex/config/helper/__init__.py +1 -0
  22. audex/config/helper/client/__init__.py +1 -0
  23. audex/config/helper/client/http.py +28 -0
  24. audex/config/helper/client/websocket.py +21 -0
  25. audex/config/helper/provider/__init__.py +1 -0
  26. audex/config/helper/provider/dashscope.py +13 -0
  27. audex/config/helper/provider/unisound.py +18 -0
  28. audex/config/helper/provider/xfyun.py +23 -0
  29. audex/config/infrastructure/__init__.py +31 -0
  30. audex/config/infrastructure/cache.py +51 -0
  31. audex/config/infrastructure/database.py +48 -0
  32. audex/config/infrastructure/recorder.py +32 -0
  33. audex/config/infrastructure/store.py +19 -0
  34. audex/config/provider/__init__.py +18 -0
  35. audex/config/provider/transcription.py +109 -0
  36. audex/config/provider/vpr.py +99 -0
  37. audex/container.py +40 -0
  38. audex/entity/__init__.py +468 -0
  39. audex/entity/doctor.py +109 -0
  40. audex/entity/doctor.pyi +51 -0
  41. audex/entity/fields.py +401 -0
  42. audex/entity/segment.py +115 -0
  43. audex/entity/segment.pyi +38 -0
  44. audex/entity/session.py +133 -0
  45. audex/entity/session.pyi +47 -0
  46. audex/entity/utterance.py +142 -0
  47. audex/entity/utterance.pyi +48 -0
  48. audex/entity/vp.py +68 -0
  49. audex/entity/vp.pyi +35 -0
  50. audex/exceptions.py +157 -0
  51. audex/filters/__init__.py +692 -0
  52. audex/filters/generated/__init__.py +21 -0
  53. audex/filters/generated/doctor.py +987 -0
  54. audex/filters/generated/segment.py +723 -0
  55. audex/filters/generated/session.py +978 -0
  56. audex/filters/generated/utterance.py +939 -0
  57. audex/filters/generated/vp.py +815 -0
  58. audex/helper/__init__.py +1 -0
  59. audex/helper/hash.py +33 -0
  60. audex/helper/mixin.py +65 -0
  61. audex/helper/net.py +19 -0
  62. audex/helper/settings/__init__.py +830 -0
  63. audex/helper/settings/fields.py +317 -0
  64. audex/helper/stream.py +153 -0
  65. audex/injectors/__init__.py +1 -0
  66. audex/injectors/config.py +12 -0
  67. audex/injectors/lifespan.py +7 -0
  68. audex/lib/__init__.py +1 -0
  69. audex/lib/cache/__init__.py +383 -0
  70. audex/lib/cache/inmemory.py +513 -0
  71. audex/lib/database/__init__.py +83 -0
  72. audex/lib/database/sqlite.py +406 -0
  73. audex/lib/exporter.py +189 -0
  74. audex/lib/injectors/__init__.py +1 -0
  75. audex/lib/injectors/cache.py +25 -0
  76. audex/lib/injectors/container.py +47 -0
  77. audex/lib/injectors/exporter.py +26 -0
  78. audex/lib/injectors/recorder.py +33 -0
  79. audex/lib/injectors/server.py +17 -0
  80. audex/lib/injectors/session.py +18 -0
  81. audex/lib/injectors/sqlite.py +24 -0
  82. audex/lib/injectors/store.py +13 -0
  83. audex/lib/injectors/transcription.py +42 -0
  84. audex/lib/injectors/usb.py +12 -0
  85. audex/lib/injectors/vpr.py +65 -0
  86. audex/lib/injectors/wifi.py +7 -0
  87. audex/lib/recorder.py +844 -0
  88. audex/lib/repos/__init__.py +149 -0
  89. audex/lib/repos/container.py +23 -0
  90. audex/lib/repos/database/__init__.py +1 -0
  91. audex/lib/repos/database/sqlite.py +672 -0
  92. audex/lib/repos/decorators.py +74 -0
  93. audex/lib/repos/doctor.py +286 -0
  94. audex/lib/repos/segment.py +302 -0
  95. audex/lib/repos/session.py +285 -0
  96. audex/lib/repos/tables/__init__.py +70 -0
  97. audex/lib/repos/tables/doctor.py +137 -0
  98. audex/lib/repos/tables/segment.py +113 -0
  99. audex/lib/repos/tables/session.py +140 -0
  100. audex/lib/repos/tables/utterance.py +131 -0
  101. audex/lib/repos/tables/vp.py +102 -0
  102. audex/lib/repos/utterance.py +288 -0
  103. audex/lib/repos/vp.py +286 -0
  104. audex/lib/restful.py +251 -0
  105. audex/lib/server/__init__.py +97 -0
  106. audex/lib/server/auth.py +98 -0
  107. audex/lib/server/handlers.py +248 -0
  108. audex/lib/server/templates/index.html.j2 +226 -0
  109. audex/lib/server/templates/login.html.j2 +111 -0
  110. audex/lib/server/templates/static/script.js +68 -0
  111. audex/lib/server/templates/static/style.css +579 -0
  112. audex/lib/server/types.py +123 -0
  113. audex/lib/session.py +503 -0
  114. audex/lib/store/__init__.py +238 -0
  115. audex/lib/store/localfile.py +411 -0
  116. audex/lib/transcription/__init__.py +33 -0
  117. audex/lib/transcription/dashscope.py +525 -0
  118. audex/lib/transcription/events.py +62 -0
  119. audex/lib/usb.py +554 -0
  120. audex/lib/vpr/__init__.py +38 -0
  121. audex/lib/vpr/unisound/__init__.py +185 -0
  122. audex/lib/vpr/unisound/types.py +469 -0
  123. audex/lib/vpr/xfyun/__init__.py +483 -0
  124. audex/lib/vpr/xfyun/types.py +679 -0
  125. audex/lib/websocket/__init__.py +8 -0
  126. audex/lib/websocket/connection.py +485 -0
  127. audex/lib/websocket/pool.py +991 -0
  128. audex/lib/wifi.py +1146 -0
  129. audex/lifespan.py +75 -0
  130. audex/service/__init__.py +27 -0
  131. audex/service/decorators.py +73 -0
  132. audex/service/doctor/__init__.py +652 -0
  133. audex/service/doctor/const.py +36 -0
  134. audex/service/doctor/exceptions.py +96 -0
  135. audex/service/doctor/types.py +54 -0
  136. audex/service/export/__init__.py +236 -0
  137. audex/service/export/const.py +17 -0
  138. audex/service/export/exceptions.py +34 -0
  139. audex/service/export/types.py +21 -0
  140. audex/service/injectors/__init__.py +1 -0
  141. audex/service/injectors/container.py +53 -0
  142. audex/service/injectors/doctor.py +34 -0
  143. audex/service/injectors/export.py +27 -0
  144. audex/service/injectors/session.py +49 -0
  145. audex/service/session/__init__.py +754 -0
  146. audex/service/session/const.py +34 -0
  147. audex/service/session/exceptions.py +67 -0
  148. audex/service/session/types.py +91 -0
  149. audex/types.py +39 -0
  150. audex/utils.py +287 -0
  151. audex/valueobj/__init__.py +81 -0
  152. audex/valueobj/common/__init__.py +1 -0
  153. audex/valueobj/common/auth.py +84 -0
  154. audex/valueobj/common/email.py +16 -0
  155. audex/valueobj/common/ops.py +22 -0
  156. audex/valueobj/common/phone.py +84 -0
  157. audex/valueobj/common/version.py +72 -0
  158. audex/valueobj/session.py +19 -0
  159. audex/valueobj/utterance.py +15 -0
  160. audex/view/__init__.py +51 -0
  161. audex/view/container.py +17 -0
  162. audex/view/decorators.py +303 -0
  163. audex/view/pages/__init__.py +1 -0
  164. audex/view/pages/dashboard/__init__.py +286 -0
  165. audex/view/pages/dashboard/wifi.py +407 -0
  166. audex/view/pages/login.py +110 -0
  167. audex/view/pages/recording.py +348 -0
  168. audex/view/pages/register.py +202 -0
  169. audex/view/pages/sessions/__init__.py +196 -0
  170. audex/view/pages/sessions/details.py +224 -0
  171. audex/view/pages/sessions/export.py +443 -0
  172. audex/view/pages/settings.py +374 -0
  173. audex/view/pages/voiceprint/__init__.py +1 -0
  174. audex/view/pages/voiceprint/enroll.py +195 -0
  175. audex/view/pages/voiceprint/update.py +195 -0
  176. audex/view/static/css/dashboard.css +452 -0
  177. audex/view/static/css/glass.css +22 -0
  178. audex/view/static/css/global.css +541 -0
  179. audex/view/static/css/login.css +386 -0
  180. audex/view/static/css/recording.css +439 -0
  181. audex/view/static/css/register.css +293 -0
  182. audex/view/static/css/sessions/styles.css +501 -0
  183. audex/view/static/css/settings.css +186 -0
  184. audex/view/static/css/voiceprint/enroll.css +43 -0
  185. audex/view/static/css/voiceprint/styles.css +209 -0
  186. audex/view/static/css/voiceprint/update.css +44 -0
  187. audex/view/static/images/logo.svg +95 -0
  188. audex/view/static/js/recording.js +42 -0
  189. audex-1.0.7a3.dist-info/METADATA +361 -0
  190. audex-1.0.7a3.dist-info/RECORD +192 -0
  191. audex-1.0.7a3.dist-info/WHEEL +4 -0
  192. audex-1.0.7a3.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,939 @@
1
+ # This file is auto-generated by PrototypeX filter generator.
2
+ # Do not edit manually - changes will be overwritten.
3
+ # Regenerate using: python -m scripts.gen_filters gen
4
+
5
+ from __future__ import annotations
6
+
7
+ import datetime
8
+ import typing as t
9
+
10
+ from audex.entity.utterance import Utterance
11
+ from audex.filters import FieldFilter
12
+ from audex.filters import Filter
13
+ from audex.filters import FilterBuilder
14
+ from audex.filters import StringBackedFieldFilter
15
+ from audex.filters import StringFieldFilter
16
+ from audex.valueobj.utterance import Speaker
17
+
18
+
19
+ class UtteranceFilterBuilder(FilterBuilder[Utterance]):
20
+ """Utterance filter builder with full type hints and IDE support.
21
+
22
+ This class is auto-generated. Do not edit manually.
23
+ """
24
+
25
+ class _IdField(StringFieldFilter):
26
+ """Chainable id filter with type-safe operations."""
27
+
28
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
29
+ super().__init__("id", object.__getattribute__(builder, "_filter"))
30
+ self._parent_builder = builder
31
+
32
+ def eq(self, value: str) -> UtteranceFilterBuilder:
33
+ super().eq(value)
34
+ return self._parent_builder
35
+
36
+ def ne(self, value: str) -> UtteranceFilterBuilder:
37
+ super().ne(value)
38
+ return self._parent_builder
39
+
40
+ def gt(self, value: str) -> UtteranceFilterBuilder:
41
+ super().gt(value)
42
+ return self._parent_builder
43
+
44
+ def lt(self, value: str) -> UtteranceFilterBuilder:
45
+ super().lt(value)
46
+ return self._parent_builder
47
+
48
+ def gte(self, value: str) -> UtteranceFilterBuilder:
49
+ super().gte(value)
50
+ return self._parent_builder
51
+
52
+ def lte(self, value: str) -> UtteranceFilterBuilder:
53
+ super().lte(value)
54
+ return self._parent_builder
55
+
56
+ def in_(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
57
+ super().in_(values)
58
+ return self._parent_builder
59
+
60
+ def nin(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
61
+ super().nin(values)
62
+ return self._parent_builder
63
+
64
+ def between(self, value1: str, value2: str) -> UtteranceFilterBuilder:
65
+ super().between(value1, value2)
66
+ return self._parent_builder
67
+
68
+ def is_null(self) -> UtteranceFilterBuilder:
69
+ super().is_null()
70
+ return self._parent_builder
71
+
72
+ def is_not_null(self) -> UtteranceFilterBuilder:
73
+ super().is_not_null()
74
+ return self._parent_builder
75
+
76
+ def asc(self) -> UtteranceFilterBuilder:
77
+ super().asc()
78
+ return self._parent_builder
79
+
80
+ def desc(self) -> UtteranceFilterBuilder:
81
+ super().desc()
82
+ return self._parent_builder
83
+
84
+ def contains(self, value: str) -> UtteranceFilterBuilder:
85
+ super().contains(value)
86
+ return self._parent_builder
87
+
88
+ def startswith(self, value: str) -> UtteranceFilterBuilder:
89
+ super().startswith(value)
90
+ return self._parent_builder
91
+
92
+ def endswith(self, value: str) -> UtteranceFilterBuilder:
93
+ super().endswith(value)
94
+ return self._parent_builder
95
+
96
+ class _CreatedAtField(FieldFilter[datetime.datetime]):
97
+ """Chainable created_at filter with type-safe operations."""
98
+
99
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
100
+ super().__init__("created_at", object.__getattribute__(builder, "_filter"))
101
+ self._parent_builder = builder
102
+
103
+ def eq(self, value: datetime.datetime) -> UtteranceFilterBuilder:
104
+ super().eq(value)
105
+ return self._parent_builder
106
+
107
+ def ne(self, value: datetime.datetime) -> UtteranceFilterBuilder:
108
+ super().ne(value)
109
+ return self._parent_builder
110
+
111
+ def gt(self, value: datetime.datetime) -> UtteranceFilterBuilder:
112
+ super().gt(value)
113
+ return self._parent_builder
114
+
115
+ def lt(self, value: datetime.datetime) -> UtteranceFilterBuilder:
116
+ super().lt(value)
117
+ return self._parent_builder
118
+
119
+ def gte(self, value: datetime.datetime) -> UtteranceFilterBuilder:
120
+ super().gte(value)
121
+ return self._parent_builder
122
+
123
+ def lte(self, value: datetime.datetime) -> UtteranceFilterBuilder:
124
+ super().lte(value)
125
+ return self._parent_builder
126
+
127
+ def in_(self, values: t.Sequence[datetime.datetime]) -> UtteranceFilterBuilder:
128
+ super().in_(values)
129
+ return self._parent_builder
130
+
131
+ def nin(self, values: t.Sequence[datetime.datetime]) -> UtteranceFilterBuilder:
132
+ super().nin(values)
133
+ return self._parent_builder
134
+
135
+ def between(
136
+ self, value1: datetime.datetime, value2: datetime.datetime
137
+ ) -> UtteranceFilterBuilder:
138
+ super().between(value1, value2)
139
+ return self._parent_builder
140
+
141
+ def is_null(self) -> UtteranceFilterBuilder:
142
+ super().is_null()
143
+ return self._parent_builder
144
+
145
+ def is_not_null(self) -> UtteranceFilterBuilder:
146
+ super().is_not_null()
147
+ return self._parent_builder
148
+
149
+ def asc(self) -> UtteranceFilterBuilder:
150
+ super().asc()
151
+ return self._parent_builder
152
+
153
+ def desc(self) -> UtteranceFilterBuilder:
154
+ super().desc()
155
+ return self._parent_builder
156
+
157
+ class _UpdatedAtField(FieldFilter[datetime.datetime | None]):
158
+ """Chainable updated_at filter with type-safe operations."""
159
+
160
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
161
+ super().__init__("updated_at", object.__getattribute__(builder, "_filter"))
162
+ self._parent_builder = builder
163
+
164
+ def eq(self, value: datetime.datetime | None) -> UtteranceFilterBuilder:
165
+ super().eq(value)
166
+ return self._parent_builder
167
+
168
+ def ne(self, value: datetime.datetime | None) -> UtteranceFilterBuilder:
169
+ super().ne(value)
170
+ return self._parent_builder
171
+
172
+ def gt(self, value: datetime.datetime | None) -> UtteranceFilterBuilder:
173
+ super().gt(value)
174
+ return self._parent_builder
175
+
176
+ def lt(self, value: datetime.datetime | None) -> UtteranceFilterBuilder:
177
+ super().lt(value)
178
+ return self._parent_builder
179
+
180
+ def gte(self, value: datetime.datetime | None) -> UtteranceFilterBuilder:
181
+ super().gte(value)
182
+ return self._parent_builder
183
+
184
+ def lte(self, value: datetime.datetime | None) -> UtteranceFilterBuilder:
185
+ super().lte(value)
186
+ return self._parent_builder
187
+
188
+ def in_(self, values: t.Sequence[datetime.datetime | None]) -> UtteranceFilterBuilder:
189
+ super().in_(values)
190
+ return self._parent_builder
191
+
192
+ def nin(self, values: t.Sequence[datetime.datetime | None]) -> UtteranceFilterBuilder:
193
+ super().nin(values)
194
+ return self._parent_builder
195
+
196
+ def between(
197
+ self, value1: datetime.datetime | None, value2: datetime.datetime | None
198
+ ) -> UtteranceFilterBuilder:
199
+ super().between(value1, value2)
200
+ return self._parent_builder
201
+
202
+ def is_null(self) -> UtteranceFilterBuilder:
203
+ super().is_null()
204
+ return self._parent_builder
205
+
206
+ def is_not_null(self) -> UtteranceFilterBuilder:
207
+ super().is_not_null()
208
+ return self._parent_builder
209
+
210
+ def asc(self) -> UtteranceFilterBuilder:
211
+ super().asc()
212
+ return self._parent_builder
213
+
214
+ def desc(self) -> UtteranceFilterBuilder:
215
+ super().desc()
216
+ return self._parent_builder
217
+
218
+ class _SessionIdField(StringFieldFilter):
219
+ """Chainable session_id filter with type-safe operations."""
220
+
221
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
222
+ super().__init__("session_id", object.__getattribute__(builder, "_filter"))
223
+ self._parent_builder = builder
224
+
225
+ def eq(self, value: str) -> UtteranceFilterBuilder:
226
+ super().eq(value)
227
+ return self._parent_builder
228
+
229
+ def ne(self, value: str) -> UtteranceFilterBuilder:
230
+ super().ne(value)
231
+ return self._parent_builder
232
+
233
+ def gt(self, value: str) -> UtteranceFilterBuilder:
234
+ super().gt(value)
235
+ return self._parent_builder
236
+
237
+ def lt(self, value: str) -> UtteranceFilterBuilder:
238
+ super().lt(value)
239
+ return self._parent_builder
240
+
241
+ def gte(self, value: str) -> UtteranceFilterBuilder:
242
+ super().gte(value)
243
+ return self._parent_builder
244
+
245
+ def lte(self, value: str) -> UtteranceFilterBuilder:
246
+ super().lte(value)
247
+ return self._parent_builder
248
+
249
+ def in_(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
250
+ super().in_(values)
251
+ return self._parent_builder
252
+
253
+ def nin(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
254
+ super().nin(values)
255
+ return self._parent_builder
256
+
257
+ def between(self, value1: str, value2: str) -> UtteranceFilterBuilder:
258
+ super().between(value1, value2)
259
+ return self._parent_builder
260
+
261
+ def is_null(self) -> UtteranceFilterBuilder:
262
+ super().is_null()
263
+ return self._parent_builder
264
+
265
+ def is_not_null(self) -> UtteranceFilterBuilder:
266
+ super().is_not_null()
267
+ return self._parent_builder
268
+
269
+ def asc(self) -> UtteranceFilterBuilder:
270
+ super().asc()
271
+ return self._parent_builder
272
+
273
+ def desc(self) -> UtteranceFilterBuilder:
274
+ super().desc()
275
+ return self._parent_builder
276
+
277
+ def contains(self, value: str) -> UtteranceFilterBuilder:
278
+ super().contains(value)
279
+ return self._parent_builder
280
+
281
+ def startswith(self, value: str) -> UtteranceFilterBuilder:
282
+ super().startswith(value)
283
+ return self._parent_builder
284
+
285
+ def endswith(self, value: str) -> UtteranceFilterBuilder:
286
+ super().endswith(value)
287
+ return self._parent_builder
288
+
289
+ class _SegmentIdField(StringFieldFilter):
290
+ """Chainable segment_id filter with type-safe operations."""
291
+
292
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
293
+ super().__init__("segment_id", object.__getattribute__(builder, "_filter"))
294
+ self._parent_builder = builder
295
+
296
+ def eq(self, value: str) -> UtteranceFilterBuilder:
297
+ super().eq(value)
298
+ return self._parent_builder
299
+
300
+ def ne(self, value: str) -> UtteranceFilterBuilder:
301
+ super().ne(value)
302
+ return self._parent_builder
303
+
304
+ def gt(self, value: str) -> UtteranceFilterBuilder:
305
+ super().gt(value)
306
+ return self._parent_builder
307
+
308
+ def lt(self, value: str) -> UtteranceFilterBuilder:
309
+ super().lt(value)
310
+ return self._parent_builder
311
+
312
+ def gte(self, value: str) -> UtteranceFilterBuilder:
313
+ super().gte(value)
314
+ return self._parent_builder
315
+
316
+ def lte(self, value: str) -> UtteranceFilterBuilder:
317
+ super().lte(value)
318
+ return self._parent_builder
319
+
320
+ def in_(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
321
+ super().in_(values)
322
+ return self._parent_builder
323
+
324
+ def nin(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
325
+ super().nin(values)
326
+ return self._parent_builder
327
+
328
+ def between(self, value1: str, value2: str) -> UtteranceFilterBuilder:
329
+ super().between(value1, value2)
330
+ return self._parent_builder
331
+
332
+ def is_null(self) -> UtteranceFilterBuilder:
333
+ super().is_null()
334
+ return self._parent_builder
335
+
336
+ def is_not_null(self) -> UtteranceFilterBuilder:
337
+ super().is_not_null()
338
+ return self._parent_builder
339
+
340
+ def asc(self) -> UtteranceFilterBuilder:
341
+ super().asc()
342
+ return self._parent_builder
343
+
344
+ def desc(self) -> UtteranceFilterBuilder:
345
+ super().desc()
346
+ return self._parent_builder
347
+
348
+ def contains(self, value: str) -> UtteranceFilterBuilder:
349
+ super().contains(value)
350
+ return self._parent_builder
351
+
352
+ def startswith(self, value: str) -> UtteranceFilterBuilder:
353
+ super().startswith(value)
354
+ return self._parent_builder
355
+
356
+ def endswith(self, value: str) -> UtteranceFilterBuilder:
357
+ super().endswith(value)
358
+ return self._parent_builder
359
+
360
+ class _SequenceField(FieldFilter[int]):
361
+ """Chainable sequence filter with type-safe operations."""
362
+
363
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
364
+ super().__init__("sequence", object.__getattribute__(builder, "_filter"))
365
+ self._parent_builder = builder
366
+
367
+ def eq(self, value: int) -> UtteranceFilterBuilder:
368
+ super().eq(value)
369
+ return self._parent_builder
370
+
371
+ def ne(self, value: int) -> UtteranceFilterBuilder:
372
+ super().ne(value)
373
+ return self._parent_builder
374
+
375
+ def gt(self, value: int) -> UtteranceFilterBuilder:
376
+ super().gt(value)
377
+ return self._parent_builder
378
+
379
+ def lt(self, value: int) -> UtteranceFilterBuilder:
380
+ super().lt(value)
381
+ return self._parent_builder
382
+
383
+ def gte(self, value: int) -> UtteranceFilterBuilder:
384
+ super().gte(value)
385
+ return self._parent_builder
386
+
387
+ def lte(self, value: int) -> UtteranceFilterBuilder:
388
+ super().lte(value)
389
+ return self._parent_builder
390
+
391
+ def in_(self, values: t.Sequence[int]) -> UtteranceFilterBuilder:
392
+ super().in_(values)
393
+ return self._parent_builder
394
+
395
+ def nin(self, values: t.Sequence[int]) -> UtteranceFilterBuilder:
396
+ super().nin(values)
397
+ return self._parent_builder
398
+
399
+ def between(self, value1: int, value2: int) -> UtteranceFilterBuilder:
400
+ super().between(value1, value2)
401
+ return self._parent_builder
402
+
403
+ def is_null(self) -> UtteranceFilterBuilder:
404
+ super().is_null()
405
+ return self._parent_builder
406
+
407
+ def is_not_null(self) -> UtteranceFilterBuilder:
408
+ super().is_not_null()
409
+ return self._parent_builder
410
+
411
+ def asc(self) -> UtteranceFilterBuilder:
412
+ super().asc()
413
+ return self._parent_builder
414
+
415
+ def desc(self) -> UtteranceFilterBuilder:
416
+ super().desc()
417
+ return self._parent_builder
418
+
419
+ class _SpeakerField(StringBackedFieldFilter[Speaker]):
420
+ """Chainable speaker filter with type-safe operations."""
421
+
422
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
423
+ super().__init__("speaker", object.__getattribute__(builder, "_filter"))
424
+ self._parent_builder = builder
425
+
426
+ def eq(self, value: Speaker) -> UtteranceFilterBuilder:
427
+ super().eq(value)
428
+ return self._parent_builder
429
+
430
+ def ne(self, value: Speaker) -> UtteranceFilterBuilder:
431
+ super().ne(value)
432
+ return self._parent_builder
433
+
434
+ def gt(self, value: Speaker) -> UtteranceFilterBuilder:
435
+ super().gt(value)
436
+ return self._parent_builder
437
+
438
+ def lt(self, value: Speaker) -> UtteranceFilterBuilder:
439
+ super().lt(value)
440
+ return self._parent_builder
441
+
442
+ def gte(self, value: Speaker) -> UtteranceFilterBuilder:
443
+ super().gte(value)
444
+ return self._parent_builder
445
+
446
+ def lte(self, value: Speaker) -> UtteranceFilterBuilder:
447
+ super().lte(value)
448
+ return self._parent_builder
449
+
450
+ def in_(self, values: t.Sequence[Speaker]) -> UtteranceFilterBuilder:
451
+ super().in_(values)
452
+ return self._parent_builder
453
+
454
+ def nin(self, values: t.Sequence[Speaker]) -> UtteranceFilterBuilder:
455
+ super().nin(values)
456
+ return self._parent_builder
457
+
458
+ def between(self, value1: Speaker, value2: Speaker) -> UtteranceFilterBuilder:
459
+ super().between(value1, value2)
460
+ return self._parent_builder
461
+
462
+ def is_null(self) -> UtteranceFilterBuilder:
463
+ super().is_null()
464
+ return self._parent_builder
465
+
466
+ def is_not_null(self) -> UtteranceFilterBuilder:
467
+ super().is_not_null()
468
+ return self._parent_builder
469
+
470
+ def asc(self) -> UtteranceFilterBuilder:
471
+ super().asc()
472
+ return self._parent_builder
473
+
474
+ def desc(self) -> UtteranceFilterBuilder:
475
+ super().desc()
476
+ return self._parent_builder
477
+
478
+ def contains(self, value: str) -> UtteranceFilterBuilder:
479
+ super().contains(value)
480
+ return self._parent_builder
481
+
482
+ def startswith(self, value: str) -> UtteranceFilterBuilder:
483
+ super().startswith(value)
484
+ return self._parent_builder
485
+
486
+ def endswith(self, value: str) -> UtteranceFilterBuilder:
487
+ super().endswith(value)
488
+ return self._parent_builder
489
+
490
+ class _TextField(StringFieldFilter):
491
+ """Chainable text filter with type-safe operations."""
492
+
493
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
494
+ super().__init__("text", object.__getattribute__(builder, "_filter"))
495
+ self._parent_builder = builder
496
+
497
+ def eq(self, value: str) -> UtteranceFilterBuilder:
498
+ super().eq(value)
499
+ return self._parent_builder
500
+
501
+ def ne(self, value: str) -> UtteranceFilterBuilder:
502
+ super().ne(value)
503
+ return self._parent_builder
504
+
505
+ def gt(self, value: str) -> UtteranceFilterBuilder:
506
+ super().gt(value)
507
+ return self._parent_builder
508
+
509
+ def lt(self, value: str) -> UtteranceFilterBuilder:
510
+ super().lt(value)
511
+ return self._parent_builder
512
+
513
+ def gte(self, value: str) -> UtteranceFilterBuilder:
514
+ super().gte(value)
515
+ return self._parent_builder
516
+
517
+ def lte(self, value: str) -> UtteranceFilterBuilder:
518
+ super().lte(value)
519
+ return self._parent_builder
520
+
521
+ def in_(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
522
+ super().in_(values)
523
+ return self._parent_builder
524
+
525
+ def nin(self, values: t.Sequence[str]) -> UtteranceFilterBuilder:
526
+ super().nin(values)
527
+ return self._parent_builder
528
+
529
+ def between(self, value1: str, value2: str) -> UtteranceFilterBuilder:
530
+ super().between(value1, value2)
531
+ return self._parent_builder
532
+
533
+ def is_null(self) -> UtteranceFilterBuilder:
534
+ super().is_null()
535
+ return self._parent_builder
536
+
537
+ def is_not_null(self) -> UtteranceFilterBuilder:
538
+ super().is_not_null()
539
+ return self._parent_builder
540
+
541
+ def asc(self) -> UtteranceFilterBuilder:
542
+ super().asc()
543
+ return self._parent_builder
544
+
545
+ def desc(self) -> UtteranceFilterBuilder:
546
+ super().desc()
547
+ return self._parent_builder
548
+
549
+ def contains(self, value: str) -> UtteranceFilterBuilder:
550
+ super().contains(value)
551
+ return self._parent_builder
552
+
553
+ def startswith(self, value: str) -> UtteranceFilterBuilder:
554
+ super().startswith(value)
555
+ return self._parent_builder
556
+
557
+ def endswith(self, value: str) -> UtteranceFilterBuilder:
558
+ super().endswith(value)
559
+ return self._parent_builder
560
+
561
+ class _ConfidenceField(FieldFilter[float | None]):
562
+ """Chainable confidence filter with type-safe operations."""
563
+
564
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
565
+ super().__init__("confidence", object.__getattribute__(builder, "_filter"))
566
+ self._parent_builder = builder
567
+
568
+ def eq(self, value: float | None) -> UtteranceFilterBuilder:
569
+ super().eq(value)
570
+ return self._parent_builder
571
+
572
+ def ne(self, value: float | None) -> UtteranceFilterBuilder:
573
+ super().ne(value)
574
+ return self._parent_builder
575
+
576
+ def gt(self, value: float | None) -> UtteranceFilterBuilder:
577
+ super().gt(value)
578
+ return self._parent_builder
579
+
580
+ def lt(self, value: float | None) -> UtteranceFilterBuilder:
581
+ super().lt(value)
582
+ return self._parent_builder
583
+
584
+ def gte(self, value: float | None) -> UtteranceFilterBuilder:
585
+ super().gte(value)
586
+ return self._parent_builder
587
+
588
+ def lte(self, value: float | None) -> UtteranceFilterBuilder:
589
+ super().lte(value)
590
+ return self._parent_builder
591
+
592
+ def in_(self, values: t.Sequence[float | None]) -> UtteranceFilterBuilder:
593
+ super().in_(values)
594
+ return self._parent_builder
595
+
596
+ def nin(self, values: t.Sequence[float | None]) -> UtteranceFilterBuilder:
597
+ super().nin(values)
598
+ return self._parent_builder
599
+
600
+ def between(self, value1: float | None, value2: float | None) -> UtteranceFilterBuilder:
601
+ super().between(value1, value2)
602
+ return self._parent_builder
603
+
604
+ def is_null(self) -> UtteranceFilterBuilder:
605
+ super().is_null()
606
+ return self._parent_builder
607
+
608
+ def is_not_null(self) -> UtteranceFilterBuilder:
609
+ super().is_not_null()
610
+ return self._parent_builder
611
+
612
+ def asc(self) -> UtteranceFilterBuilder:
613
+ super().asc()
614
+ return self._parent_builder
615
+
616
+ def desc(self) -> UtteranceFilterBuilder:
617
+ super().desc()
618
+ return self._parent_builder
619
+
620
+ class _StartTimeMsField(FieldFilter[int]):
621
+ """Chainable start_time_ms filter with type-safe operations."""
622
+
623
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
624
+ super().__init__("start_time_ms", object.__getattribute__(builder, "_filter"))
625
+ self._parent_builder = builder
626
+
627
+ def eq(self, value: int) -> UtteranceFilterBuilder:
628
+ super().eq(value)
629
+ return self._parent_builder
630
+
631
+ def ne(self, value: int) -> UtteranceFilterBuilder:
632
+ super().ne(value)
633
+ return self._parent_builder
634
+
635
+ def gt(self, value: int) -> UtteranceFilterBuilder:
636
+ super().gt(value)
637
+ return self._parent_builder
638
+
639
+ def lt(self, value: int) -> UtteranceFilterBuilder:
640
+ super().lt(value)
641
+ return self._parent_builder
642
+
643
+ def gte(self, value: int) -> UtteranceFilterBuilder:
644
+ super().gte(value)
645
+ return self._parent_builder
646
+
647
+ def lte(self, value: int) -> UtteranceFilterBuilder:
648
+ super().lte(value)
649
+ return self._parent_builder
650
+
651
+ def in_(self, values: t.Sequence[int]) -> UtteranceFilterBuilder:
652
+ super().in_(values)
653
+ return self._parent_builder
654
+
655
+ def nin(self, values: t.Sequence[int]) -> UtteranceFilterBuilder:
656
+ super().nin(values)
657
+ return self._parent_builder
658
+
659
+ def between(self, value1: int, value2: int) -> UtteranceFilterBuilder:
660
+ super().between(value1, value2)
661
+ return self._parent_builder
662
+
663
+ def is_null(self) -> UtteranceFilterBuilder:
664
+ super().is_null()
665
+ return self._parent_builder
666
+
667
+ def is_not_null(self) -> UtteranceFilterBuilder:
668
+ super().is_not_null()
669
+ return self._parent_builder
670
+
671
+ def asc(self) -> UtteranceFilterBuilder:
672
+ super().asc()
673
+ return self._parent_builder
674
+
675
+ def desc(self) -> UtteranceFilterBuilder:
676
+ super().desc()
677
+ return self._parent_builder
678
+
679
+ class _EndTimeMsField(FieldFilter[int]):
680
+ """Chainable end_time_ms filter with type-safe operations."""
681
+
682
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
683
+ super().__init__("end_time_ms", object.__getattribute__(builder, "_filter"))
684
+ self._parent_builder = builder
685
+
686
+ def eq(self, value: int) -> UtteranceFilterBuilder:
687
+ super().eq(value)
688
+ return self._parent_builder
689
+
690
+ def ne(self, value: int) -> UtteranceFilterBuilder:
691
+ super().ne(value)
692
+ return self._parent_builder
693
+
694
+ def gt(self, value: int) -> UtteranceFilterBuilder:
695
+ super().gt(value)
696
+ return self._parent_builder
697
+
698
+ def lt(self, value: int) -> UtteranceFilterBuilder:
699
+ super().lt(value)
700
+ return self._parent_builder
701
+
702
+ def gte(self, value: int) -> UtteranceFilterBuilder:
703
+ super().gte(value)
704
+ return self._parent_builder
705
+
706
+ def lte(self, value: int) -> UtteranceFilterBuilder:
707
+ super().lte(value)
708
+ return self._parent_builder
709
+
710
+ def in_(self, values: t.Sequence[int]) -> UtteranceFilterBuilder:
711
+ super().in_(values)
712
+ return self._parent_builder
713
+
714
+ def nin(self, values: t.Sequence[int]) -> UtteranceFilterBuilder:
715
+ super().nin(values)
716
+ return self._parent_builder
717
+
718
+ def between(self, value1: int, value2: int) -> UtteranceFilterBuilder:
719
+ super().between(value1, value2)
720
+ return self._parent_builder
721
+
722
+ def is_null(self) -> UtteranceFilterBuilder:
723
+ super().is_null()
724
+ return self._parent_builder
725
+
726
+ def is_not_null(self) -> UtteranceFilterBuilder:
727
+ super().is_not_null()
728
+ return self._parent_builder
729
+
730
+ def asc(self) -> UtteranceFilterBuilder:
731
+ super().asc()
732
+ return self._parent_builder
733
+
734
+ def desc(self) -> UtteranceFilterBuilder:
735
+ super().desc()
736
+ return self._parent_builder
737
+
738
+ class _TimestampField(FieldFilter[datetime.datetime]):
739
+ """Chainable timestamp filter with type-safe operations."""
740
+
741
+ def __init__(self, builder: UtteranceFilterBuilder) -> None:
742
+ super().__init__("timestamp", object.__getattribute__(builder, "_filter"))
743
+ self._parent_builder = builder
744
+
745
+ def eq(self, value: datetime.datetime) -> UtteranceFilterBuilder:
746
+ super().eq(value)
747
+ return self._parent_builder
748
+
749
+ def ne(self, value: datetime.datetime) -> UtteranceFilterBuilder:
750
+ super().ne(value)
751
+ return self._parent_builder
752
+
753
+ def gt(self, value: datetime.datetime) -> UtteranceFilterBuilder:
754
+ super().gt(value)
755
+ return self._parent_builder
756
+
757
+ def lt(self, value: datetime.datetime) -> UtteranceFilterBuilder:
758
+ super().lt(value)
759
+ return self._parent_builder
760
+
761
+ def gte(self, value: datetime.datetime) -> UtteranceFilterBuilder:
762
+ super().gte(value)
763
+ return self._parent_builder
764
+
765
+ def lte(self, value: datetime.datetime) -> UtteranceFilterBuilder:
766
+ super().lte(value)
767
+ return self._parent_builder
768
+
769
+ def in_(self, values: t.Sequence[datetime.datetime]) -> UtteranceFilterBuilder:
770
+ super().in_(values)
771
+ return self._parent_builder
772
+
773
+ def nin(self, values: t.Sequence[datetime.datetime]) -> UtteranceFilterBuilder:
774
+ super().nin(values)
775
+ return self._parent_builder
776
+
777
+ def between(
778
+ self, value1: datetime.datetime, value2: datetime.datetime
779
+ ) -> UtteranceFilterBuilder:
780
+ super().between(value1, value2)
781
+ return self._parent_builder
782
+
783
+ def is_null(self) -> UtteranceFilterBuilder:
784
+ super().is_null()
785
+ return self._parent_builder
786
+
787
+ def is_not_null(self) -> UtteranceFilterBuilder:
788
+ super().is_not_null()
789
+ return self._parent_builder
790
+
791
+ def asc(self) -> UtteranceFilterBuilder:
792
+ super().asc()
793
+ return self._parent_builder
794
+
795
+ def desc(self) -> UtteranceFilterBuilder:
796
+ super().desc()
797
+ return self._parent_builder
798
+
799
+ def and_(self, *filters: Filter) -> Filter:
800
+ """Combine with other filters using AND logic.
801
+
802
+ Args:
803
+ *filters: Other filters to combine with AND.
804
+
805
+ Returns:
806
+ Combined filter with AND logic.
807
+
808
+ Example:
809
+ ```python
810
+ # username = 'john' AND email = 'john@ex.com'
811
+ filter = (
812
+ utterance_filter()
813
+ .username.eq("john")
814
+ .and_(utterance_filter().email.eq("john@ex.com"))
815
+ )
816
+ ```
817
+ """
818
+ return object.__getattribute__(self, "_filter").and_(*filters)
819
+
820
+ def or_(self, *filters: Filter) -> Filter:
821
+ """Combine with other filters using OR logic.
822
+
823
+ Args:
824
+ *filters: Other filters to combine with OR.
825
+
826
+ Returns:
827
+ Combined filter with OR logic.
828
+
829
+ Example:
830
+ ```python
831
+ # username = 'john' OR email = 'john@ex.com'
832
+ filter = (
833
+ utterance_filter()
834
+ .username.eq("john")
835
+ .or_(utterance_filter().email.eq("john@ex.com"))
836
+ )
837
+ ```
838
+ """
839
+ return object.__getattribute__(self, "_filter").or_(*filters)
840
+
841
+ def not_(self) -> Filter:
842
+ """Negate the current filter.
843
+
844
+ Returns:
845
+ Negated filter.
846
+
847
+ Example:
848
+ ```python
849
+ # NOT (username = 'john')
850
+ filter = utterance_filter().username.eq("john").not_()
851
+ ```
852
+ """
853
+ return object.__getattribute__(self, "_filter").not_()
854
+
855
+ # Field properties
856
+
857
+ @property
858
+ def id(self) -> _IdField:
859
+ """Filter by id field."""
860
+ return self._IdField(self)
861
+
862
+ @property
863
+ def created_at(self) -> _CreatedAtField:
864
+ """Filter by created_at field."""
865
+ return self._CreatedAtField(self)
866
+
867
+ @property
868
+ def updated_at(self) -> _UpdatedAtField:
869
+ """Filter by updated_at field."""
870
+ return self._UpdatedAtField(self)
871
+
872
+ @property
873
+ def session_id(self) -> _SessionIdField:
874
+ """Filter by session_id field."""
875
+ return self._SessionIdField(self)
876
+
877
+ @property
878
+ def segment_id(self) -> _SegmentIdField:
879
+ """Filter by segment_id field."""
880
+ return self._SegmentIdField(self)
881
+
882
+ @property
883
+ def sequence(self) -> _SequenceField:
884
+ """Filter by sequence field."""
885
+ return self._SequenceField(self)
886
+
887
+ @property
888
+ def speaker(self) -> _SpeakerField:
889
+ """Filter by speaker field."""
890
+ return self._SpeakerField(self)
891
+
892
+ @property
893
+ def text(self) -> _TextField:
894
+ """Filter by text field."""
895
+ return self._TextField(self)
896
+
897
+ @property
898
+ def confidence(self) -> _ConfidenceField:
899
+ """Filter by confidence field."""
900
+ return self._ConfidenceField(self)
901
+
902
+ @property
903
+ def start_time_ms(self) -> _StartTimeMsField:
904
+ """Filter by start_time_ms field."""
905
+ return self._StartTimeMsField(self)
906
+
907
+ @property
908
+ def end_time_ms(self) -> _EndTimeMsField:
909
+ """Filter by end_time_ms field."""
910
+ return self._EndTimeMsField(self)
911
+
912
+ @property
913
+ def timestamp(self) -> _TimestampField:
914
+ """Filter by timestamp field."""
915
+ return self._TimestampField(self)
916
+
917
+
918
+ def utterance_filter() -> UtteranceFilterBuilder:
919
+ """Create a Utterance filter builder with full type safety.
920
+
921
+ Returns:
922
+ A UtteranceFilterBuilder instance with full IDE support and chainable fields.
923
+
924
+ Example:
925
+ ```python
926
+ # AND conditions (chained)
927
+ filter = (
928
+ utterance_filter()
929
+ .field1.eq(value1)
930
+ .field2.contains(value2)
931
+ )
932
+
933
+ # OR conditions
934
+ filter = utterance_filter().field1.eq(
935
+ value1
936
+ ) | utterance_filter().field2.eq(value2)
937
+ ```
938
+ """
939
+ return UtteranceFilterBuilder(Utterance)