most-client 1.0.37__tar.gz → 1.0.38__tar.gz

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 (25) hide show
  1. {most_client-1.0.37/most_client.egg-info → most_client-1.0.38}/PKG-INFO +1 -1
  2. {most_client-1.0.37 → most_client-1.0.38}/most/api.py +10 -10
  3. {most_client-1.0.37 → most_client-1.0.38}/most/async_api.py +15 -10
  4. most_client-1.0.38/most/score_calculation.py +79 -0
  5. most_client-1.0.38/most/search_types.py +143 -0
  6. {most_client-1.0.37 → most_client-1.0.38}/most/types.py +2 -19
  7. {most_client-1.0.37 → most_client-1.0.38/most_client.egg-info}/PKG-INFO +1 -1
  8. {most_client-1.0.37 → most_client-1.0.38}/setup.py +1 -1
  9. most_client-1.0.37/most/score_calculation.py +0 -27
  10. most_client-1.0.37/most/search_types.py +0 -59
  11. {most_client-1.0.37 → most_client-1.0.38}/MANIFEST.in +0 -0
  12. {most_client-1.0.37 → most_client-1.0.38}/README.md +0 -0
  13. {most_client-1.0.37 → most_client-1.0.38}/most/__init__.py +0 -0
  14. {most_client-1.0.37 → most_client-1.0.38}/most/_constrants.py +0 -0
  15. {most_client-1.0.37 → most_client-1.0.38}/most/async_searcher.py +0 -0
  16. {most_client-1.0.37 → most_client-1.0.38}/most/async_trainer_api.py +0 -0
  17. {most_client-1.0.37 → most_client-1.0.38}/most/searcher.py +0 -0
  18. {most_client-1.0.37 → most_client-1.0.38}/most/trainer_api.py +0 -0
  19. {most_client-1.0.37 → most_client-1.0.38}/most_client.egg-info/SOURCES.txt +0 -0
  20. {most_client-1.0.37 → most_client-1.0.38}/most_client.egg-info/dependency_links.txt +0 -0
  21. {most_client-1.0.37 → most_client-1.0.38}/most_client.egg-info/requires.txt +0 -0
  22. {most_client-1.0.37 → most_client-1.0.38}/most_client.egg-info/top_level.txt +0 -0
  23. {most_client-1.0.37 → most_client-1.0.38}/most_client.egg-info/zip-safe +0 -0
  24. {most_client-1.0.37 → most_client-1.0.38}/requirements.txt +0 -0
  25. {most_client-1.0.37 → most_client-1.0.38}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: most-client
3
- Version: 1.0.37
3
+ Version: 1.0.38
4
4
  Summary: Most AI API for https://the-most.ai
5
5
  Home-page: https://github.com/the-most-ai/most-client
6
6
  Author: George Kasparyants
@@ -24,8 +24,8 @@ from most.types import (
24
24
 
25
25
  class MostClient(object):
26
26
  retort = Retort(recipe=[
27
- loader(int, lambda x: int(x)),
28
- loader(float, lambda x: float(x)),
27
+ loader(int, lambda x: x if isinstance(x, int) else int(x)),
28
+ loader(float, lambda x: x if isinstance(x, float) else float(x)),
29
29
  loader(datetime, lambda x: datetime.fromtimestamp(x).astimezone(tz=timezone.utc) if isinstance(x, (int, float)) else datetime.fromisoformat(x)),
30
30
  ],)
31
31
 
@@ -264,7 +264,7 @@ class MostClient(object):
264
264
  params={"overwrite": overwrite})
265
265
  result = self.retort.load(resp.json(), Result)
266
266
  if modify_scores:
267
- result = self.score_modifier.modify(result)
267
+ result = self.get_score_modifier().modify(result)
268
268
  return result
269
269
 
270
270
  def apply_on_text(self, text_id,
@@ -280,7 +280,7 @@ class MostClient(object):
280
280
  params={"overwrite": overwrite})
281
281
  result = self.retort.load(resp.json(), Result)
282
282
  if modify_scores:
283
- result = self.score_modifier.modify(result)
283
+ result = self.get_score_modifier().modify(result)
284
284
  return result
285
285
 
286
286
  def transcribe_later(self, audio_id,
@@ -308,7 +308,7 @@ class MostClient(object):
308
308
  params={"overwrite": overwrite})
309
309
  result = self.retort.load(resp.json(), Result)
310
310
  if modify_scores:
311
- result = self.score_modifier.modify(result)
311
+ result = self.get_score_modifier().modify(result)
312
312
  return result
313
313
 
314
314
  def apply_on_text_later(self, text_id,
@@ -324,7 +324,7 @@ class MostClient(object):
324
324
  params={"overwrite": overwrite})
325
325
  result = self.retort.load(resp.json(), Result)
326
326
  if modify_scores:
327
- result = self.score_modifier.modify(result)
327
+ result = self.get_score_modifier().modify(result)
328
328
  return result
329
329
 
330
330
  def get_job_status(self, audio_id) -> JobStatus:
@@ -348,7 +348,7 @@ class MostClient(object):
348
348
  resp = self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/results")
349
349
  result = self.retort.load(resp.json(), Result)
350
350
  if modify_scores:
351
- result = self.score_modifier.modify(result)
351
+ result = self.get_score_modifier().modify(result)
352
352
  return result
353
353
 
354
354
  def fetch_text(self, audio_id: str) -> Result:
@@ -401,7 +401,7 @@ class MostClient(object):
401
401
 
402
402
  def store_info(self,
403
403
  audio_id: str,
404
- data: Dict[str, str]) -> StoredAudioData:
404
+ data: Dict[str, Union[str, int, float]]) -> StoredAudioData:
405
405
  if not is_valid_id(audio_id):
406
406
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
407
407
 
@@ -409,14 +409,14 @@ class MostClient(object):
409
409
  json={
410
410
  "data": data,
411
411
  })
412
- return self.retort.load(resp.json(), StoredAudioData)
412
+ return StoredAudioData.from_dict(resp.json())
413
413
 
414
414
  def fetch_info(self, audio_id: str) -> StoredAudioData:
415
415
  if not is_valid_id(audio_id):
416
416
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
417
417
 
418
418
  resp = self.get(f"/{self.client_id}/audio/{audio_id}/info")
419
- return self.retort.load(resp.json(), StoredAudioData)
419
+ return StoredAudioData.from_dict(resp.json())
420
420
 
421
421
  def __call__(self, audio_path: Path,
422
422
  modify_scores: bool = False) -> Result:
@@ -24,8 +24,8 @@ from most.types import (
24
24
 
25
25
  class AsyncMostClient(object):
26
26
  retort = Retort(recipe=[
27
- loader(int, lambda x: int(x)),
28
- loader(float, lambda x: float(x)),
27
+ loader(int, lambda x: x if isinstance(x, int) else int(x)),
28
+ loader(float, lambda x: x if isinstance(x, float) else float(x)),
29
29
  loader(datetime, lambda x: datetime.fromtimestamp(x).astimezone(tz=timezone.utc) if isinstance(x, (int, float)) else datetime.fromisoformat(x)),
30
30
  ])
31
31
 
@@ -274,7 +274,8 @@ class AsyncMostClient(object):
274
274
  params={"overwrite": overwrite})
275
275
  result = self.retort.load(resp.json(), Result)
276
276
  if modify_scores:
277
- result = self.score_modifier.modify(result)
277
+ score_modifier = await self.get_score_modifier()
278
+ result = score_modifier.modify(result)
278
279
  return result
279
280
 
280
281
  async def apply_on_text(self, text_id,
@@ -290,7 +291,8 @@ class AsyncMostClient(object):
290
291
  params={"overwrite": overwrite})
291
292
  result = self.retort.load(resp.json(), Result)
292
293
  if modify_scores:
293
- result = self.score_modifier.modify(result)
294
+ score_modifier = await self.get_score_modifier()
295
+ result = score_modifier.modify(result)
294
296
  return result
295
297
 
296
298
  async def transcribe_later(self, audio_id,
@@ -318,7 +320,8 @@ class AsyncMostClient(object):
318
320
  params={"overwrite": overwrite})
319
321
  result = self.retort.load(resp.json(), Result)
320
322
  if modify_scores:
321
- result = self.score_modifier.modify(result)
323
+ score_modifier = await self.get_score_modifier()
324
+ result = score_modifier.modify(result)
322
325
  return result
323
326
 
324
327
  async def apply_on_text_later(self, text_id,
@@ -334,7 +337,8 @@ class AsyncMostClient(object):
334
337
  params={"overwrite": overwrite})
335
338
  result = self.retort.load(resp.json(), Result)
336
339
  if modify_scores:
337
- result = self.score_modifier.modify(result)
340
+ score_modifier = await self.get_score_modifier()
341
+ result = score_modifier.modify(result)
338
342
  return result
339
343
 
340
344
  async def get_job_status(self, audio_id) -> JobStatus:
@@ -358,7 +362,8 @@ class AsyncMostClient(object):
358
362
  resp = await self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/results")
359
363
  result = self.retort.load(resp.json(), Result)
360
364
  if modify_scores:
361
- result = self.score_modifier.modify(result)
365
+ score_modifier = await self.get_score_modifier()
366
+ result = score_modifier.modify(result)
362
367
  return result
363
368
 
364
369
  async def fetch_text(self, audio_id) -> Result:
@@ -411,18 +416,18 @@ class AsyncMostClient(object):
411
416
 
412
417
  async def store_info(self,
413
418
  audio_id: str,
414
- data: Dict[str, str]) -> StoredAudioData:
419
+ data: Dict[str, Union[str, int, float]]) -> StoredAudioData:
415
420
  resp = await self.post(f"/{self.client_id}/audio/{audio_id}/info",
416
421
  json={
417
422
  "data": data,
418
423
  })
419
- return self.retort.load(resp.json(), StoredAudioData)
424
+ return StoredAudioData.from_dict(resp.json())
420
425
 
421
426
  async def fetch_info(self, audio_id: str) -> StoredAudioData:
422
427
  if not is_valid_id(audio_id):
423
428
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
424
429
  resp = await self.get(f"/{self.client_id}/audio/{audio_id}/info")
425
- return self.retort.load(resp.json(), StoredAudioData)
430
+ return StoredAudioData.from_dict(resp.json())
426
431
 
427
432
  async def __call__(self, audio_path: Path,
428
433
  modify_scores: bool = False) -> Result:
@@ -0,0 +1,79 @@
1
+ from typing import Dict, Tuple, List, Optional, Literal
2
+ from dataclasses_json import dataclass_json, DataClassJsonMixin
3
+ from dataclasses import dataclass, replace
4
+ from .types import Result, ScriptScoreMapping
5
+
6
+
7
+ @dataclass_json
8
+ @dataclass
9
+ class ScoreCalculation(DataClassJsonMixin):
10
+ score_mapping: List[ScriptScoreMapping]
11
+
12
+ def modify(self, result: Optional[Result]):
13
+ score_mapping = {
14
+ (sm.column, sm.subcolumn, sm.from_score): sm.to_score
15
+ for sm in self.score_mapping
16
+ }
17
+ if result is None:
18
+ return None
19
+ result = replace(result)
20
+ for column_result in result.results:
21
+ for subcolumn_result in column_result.subcolumns:
22
+ subcolumn_result.score = score_mapping.get((column_result.name,
23
+ subcolumn_result.name,
24
+ subcolumn_result.score),
25
+ subcolumn_result.score)
26
+
27
+ return result
28
+
29
+ def unmodify(self, result: Optional[Result]):
30
+ score_mapping = {
31
+ (sm.column, sm.subcolumn, sm.to_score): sm.from_score
32
+ for sm in self.score_mapping
33
+ }
34
+ if result is None:
35
+ return None
36
+ result = replace(result)
37
+ for column_result in result.results:
38
+ for subcolumn_result in column_result.subcolumns:
39
+ subcolumn_result.score = score_mapping.get((column_result.name,
40
+ subcolumn_result.name,
41
+ subcolumn_result.score),
42
+ subcolumn_result.score)
43
+
44
+ return result
45
+
46
+ def modify_single(self,
47
+ column: str, subcolumn: str,
48
+ from_score: int):
49
+ for sm in self.score_mapping:
50
+ if sm.column == column and sm.subcolumn == subcolumn and sm.from_score == from_score:
51
+ return sm.to_score
52
+
53
+ def unmodify_single(self,
54
+ column: str, subcolumn: str,
55
+ to_score: int,
56
+ bound: Literal["strict", "upper", "lower"] = "strict"):
57
+ upper_from_score = None
58
+ lower_from_score = None
59
+
60
+ for sm in self.score_mapping:
61
+ if sm.column == column and sm.subcolumn == subcolumn:
62
+ if sm.to_score == to_score:
63
+ return sm.from_score
64
+
65
+ if sm.to_score > to_score:
66
+ if upper_from_score is None or sm.to_score < upper_from_score[1]:
67
+ upper_from_score = (sm.from_score, sm.to_score)
68
+ elif sm.to_score < to_score:
69
+ if lower_from_score is None or sm.to_score > lower_from_score[1]:
70
+ lower_from_score = (sm.from_score, sm.to_score)
71
+
72
+ if bound == "strict":
73
+ return None
74
+ elif bound == "upper" and upper_from_score is not None:
75
+ return upper_from_score[0]
76
+ elif bound == "lower" and lower_from_score is not None:
77
+ return lower_from_score[0]
78
+ else:
79
+ return None
@@ -0,0 +1,143 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import List, Optional
3
+
4
+ from bson import ObjectId
5
+ from dataclasses_json import DataClassJsonMixin, dataclass_json
6
+
7
+
8
+ @dataclass_json
9
+ @dataclass
10
+ class IDCondition(DataClassJsonMixin):
11
+ equal: Optional[ObjectId] = None
12
+ in_set: Optional[List[ObjectId]] = None
13
+ greater_than: Optional[ObjectId] = None
14
+ less_than: Optional[ObjectId] = None
15
+
16
+
17
+ @dataclass_json
18
+ @dataclass
19
+ class ChannelsCondition(DataClassJsonMixin):
20
+ equal: Optional[int] = None
21
+
22
+
23
+ @dataclass_json
24
+ @dataclass
25
+ class DurationCondition(DataClassJsonMixin):
26
+ greater_than: Optional[int] = None
27
+ less_than: Optional[int] = None
28
+
29
+
30
+ @dataclass_json
31
+ @dataclass
32
+ class StoredInfoCondition(DataClassJsonMixin):
33
+ key: str
34
+ match: Optional[int | str | float] = None
35
+ starts_with: Optional[str] = None
36
+ ends_with: Optional[str] = None
37
+ greater_than: Optional[int | str | float] = None
38
+ less_than: Optional[int | str | float] = None
39
+
40
+
41
+ @dataclass_json
42
+ @dataclass
43
+ class ResultsCondition(DataClassJsonMixin):
44
+ column_idx: int
45
+ subcolumn_idx: int
46
+ model_id: str
47
+ score_equal: Optional[int] = None
48
+ score_in_set: Optional[List[int]] = None
49
+ score_greater_than: Optional[int] = None
50
+ score_less_than: Optional[int] = None
51
+
52
+ def create_from(self, client,
53
+ column: str, subcolumn: str,
54
+ score_equal: Optional[int] = None,
55
+ score_in_set: Optional[List[int]] = None,
56
+ score_greater_than: Optional[int] = None,
57
+ score_less_than: Optional[int] = None,
58
+ modified_scores: bool = False) -> 'ResultsCondition':
59
+ from .api import MostClient
60
+ client: MostClient
61
+ script = client.get_model_script()
62
+ column_idx = [column.name for column in script.columns].index(column)
63
+ subcolumn_idx = script.columns[column_idx].subcolumns.index(subcolumn)
64
+
65
+ if modified_scores:
66
+ score_modifier = client.get_score_modifier()
67
+ if score_equal is not None:
68
+ score_equal = score_modifier.unmodify_single(column, subcolumn,
69
+ score_equal,
70
+ bound="strict")
71
+ if score_in_set is not None:
72
+ score_in_set = [score_modifier.unmodify_single(column, subcolumn,
73
+ score,
74
+ bound="strict")
75
+ for score in score_in_set]
76
+ if score_greater_than is not None:
77
+ score_greater_than = score_modifier.unmodify_single(column, subcolumn,
78
+ score_greater_than,
79
+ bound="upper")
80
+
81
+ if score_less_than is not None:
82
+ score_less_than = score_modifier.unmodify_single(column, subcolumn,
83
+ score_less_than,
84
+ bound="lower")
85
+
86
+ return ResultsCondition(model_id=client.model_id,
87
+ column_idx=column_idx,
88
+ subcolumn_idx=subcolumn_idx,
89
+ score_equal=score_equal,
90
+ score_in_set=score_in_set,
91
+ score_greater_than=score_greater_than,
92
+ score_less_than=score_less_than)
93
+
94
+ async def acreate_from(self, client,
95
+ column: str, subcolumn: str,
96
+ score_equal: Optional[int] = None,
97
+ score_in_set: Optional[List[int]] = None,
98
+ score_greater_than: Optional[int] = None,
99
+ score_less_than: Optional[int] = None,
100
+ modified_scores: bool = False) -> 'ResultsCondition':
101
+ from .async_api import AsyncMostClient
102
+ client: AsyncMostClient
103
+ script = await client.get_model_script()
104
+ column_idx = [column.name for column in script.columns].index(column)
105
+ subcolumn_idx = script.columns[column_idx].subcolumns.index(subcolumn)
106
+
107
+ if modified_scores:
108
+ score_modifier = await client.get_score_modifier()
109
+ if score_equal is not None:
110
+ score_equal = score_modifier.unmodify_single(column, subcolumn,
111
+ score_equal,
112
+ bound="strict")
113
+ if score_in_set is not None:
114
+ score_in_set = [score_modifier.unmodify_single(column, subcolumn,
115
+ score,
116
+ bound="strict")
117
+ for score in score_in_set]
118
+ if score_greater_than is not None:
119
+ score_greater_than = score_modifier.unmodify_single(column, subcolumn,
120
+ score_greater_than,
121
+ bound="upper")
122
+
123
+ if score_less_than is not None:
124
+ score_less_than = score_modifier.unmodify_single(column, subcolumn,
125
+ score_less_than,
126
+ bound="lower")
127
+
128
+ return ResultsCondition(model_id=client.model_id,
129
+ column_idx=column_idx,
130
+ subcolumn_idx=subcolumn_idx,
131
+ score_equal=score_equal,
132
+ score_in_set=score_in_set,
133
+ score_greater_than=score_greater_than,
134
+ score_less_than=score_less_than)
135
+
136
+
137
+ @dataclass_json
138
+ @dataclass
139
+ class SearchParams(DataClassJsonMixin):
140
+ must: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
141
+ should: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
142
+ must_not: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
143
+ should_not: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
@@ -1,8 +1,7 @@
1
1
  import re
2
2
  from dataclasses import dataclass
3
3
  from datetime import datetime
4
- from typing import Dict, List, Literal, Optional
5
- from .search_types import ResultsCondition
4
+ from typing import Dict, List, Literal, Optional, Union
6
5
  from dataclasses_json import DataClassJsonMixin, dataclass_json
7
6
 
8
7
 
@@ -10,7 +9,7 @@ from dataclasses_json import DataClassJsonMixin, dataclass_json
10
9
  @dataclass
11
10
  class StoredAudioData(DataClassJsonMixin):
12
11
  id: str
13
- data: Dict[str, str]
12
+ data: Dict[str, Union[str, int, float]]
14
13
 
15
14
 
16
15
  @dataclass_json
@@ -53,22 +52,6 @@ class Column(DataClassJsonMixin):
53
52
  class Script(DataClassJsonMixin):
54
53
  columns: List[Column]
55
54
 
56
- def create_results_condition(self,
57
- model_id: str,
58
- column: str, subcolumn: str,
59
- score_equal: Optional[int] = None,
60
- score_greater_than: Optional[int] = None,
61
- score_less_than: Optional[int] = None) -> ResultsCondition:
62
-
63
- column_idx = [column.name for column in self.columns].index(column)
64
- subcolumn_idx = self.columns[column_idx].subcolumns.index(subcolumn)
65
- return ResultsCondition(model_id=model_id,
66
- column_idx=column_idx,
67
- subcolumn_idx=subcolumn_idx,
68
- score_equal=score_equal,
69
- score_greater_than=score_greater_than,
70
- score_less_than=score_less_than)
71
-
72
55
 
73
56
  @dataclass_json
74
57
  @dataclass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: most-client
3
- Version: 1.0.37
3
+ Version: 1.0.38
4
4
  Summary: Most AI API for https://the-most.ai
5
5
  Home-page: https://github.com/the-most-ai/most-client
6
6
  Author: George Kasparyants
@@ -8,7 +8,7 @@ with open('requirements.txt', 'r') as f:
8
8
 
9
9
  setup(
10
10
  name='most-client',
11
- version='1.0.37',
11
+ version='1.0.38',
12
12
  python_requires=f'>=3.6',
13
13
  description='Most AI API for https://the-most.ai',
14
14
  url='https://github.com/the-most-ai/most-client',
@@ -1,27 +0,0 @@
1
- from typing import Dict, Tuple, List, Optional
2
- from dataclasses_json import dataclass_json, DataClassJsonMixin
3
- from dataclasses import dataclass, replace
4
- from .types import Result, ScriptScoreMapping
5
-
6
-
7
- @dataclass_json
8
- @dataclass
9
- class ScoreCalculation(DataClassJsonMixin):
10
- score_mapping: List[ScriptScoreMapping]
11
-
12
- def modify(self, result: Optional[Result]):
13
- score_mapping = {
14
- (sm.column, sm.subcolumn, sm.from_score): sm.to_score
15
- for sm in self.score_mapping
16
- }
17
- if result is None:
18
- return None
19
- result = replace(result)
20
- for column_result in result.results:
21
- for subcolumn_result in column_result.subcolumns:
22
- subcolumn_result.score = score_mapping.get((column_result.name,
23
- subcolumn_result.name,
24
- subcolumn_result.score),
25
- subcolumn_result.score)
26
-
27
- return result
@@ -1,59 +0,0 @@
1
- import re
2
- from dataclasses import dataclass, field
3
- from datetime import datetime
4
- from typing import Dict, List, Literal, Optional, Union
5
-
6
- from bson import ObjectId
7
- from dataclasses_json import DataClassJsonMixin, dataclass_json
8
-
9
-
10
- @dataclass_json
11
- @dataclass
12
- class IDCondition(DataClassJsonMixin):
13
- equal: Optional[ObjectId] = None
14
- in_set: Optional[List[ObjectId]] = None
15
- greater_than: Optional[ObjectId] = None
16
- less_than: Optional[ObjectId] = None
17
-
18
-
19
- @dataclass_json
20
- @dataclass
21
- class ChannelsCondition(DataClassJsonMixin):
22
- equal: Optional[int] = None
23
-
24
-
25
- @dataclass_json
26
- @dataclass
27
- class DurationCondition(DataClassJsonMixin):
28
- greater_than: Optional[int] = None
29
- less_than: Optional[int] = None
30
-
31
-
32
- @dataclass_json
33
- @dataclass
34
- class StoredInfoCondition(DataClassJsonMixin):
35
- key: str
36
- match: Optional[str] = None
37
- starts_with: Optional[str] = None
38
- ends_with: Optional[str] = None
39
-
40
-
41
- @dataclass_json
42
- @dataclass
43
- class ResultsCondition(DataClassJsonMixin):
44
- column_idx: int
45
- subcolumn_idx: int
46
- model_id: str
47
- score_equal: Optional[int] = None
48
- score_in_set: Optional[List[int]] = None
49
- score_greater_than: Optional[int] = None
50
- score_less_than: Optional[int] = None
51
-
52
-
53
- @dataclass_json
54
- @dataclass
55
- class SearchParams(DataClassJsonMixin):
56
- must: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
57
- should: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
58
- must_not: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
59
- should_not: List[StoredInfoCondition | ResultsCondition | DurationCondition | ChannelsCondition | IDCondition ] = field(default_factory=list)
File without changes
File without changes
File without changes