most-client 1.0.30__py3-none-any.whl → 1.0.32__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.
- most/api.py +27 -10
- most/async_api.py +27 -10
- most/types.py +19 -0
- {most_client-1.0.30.dist-info → most_client-1.0.32.dist-info}/METADATA +1 -1
- most_client-1.0.32.dist-info/RECORD +13 -0
- most_client-1.0.30.dist-info/RECORD +0 -13
- {most_client-1.0.30.dist-info → most_client-1.0.32.dist-info}/WHEEL +0 -0
- {most_client-1.0.30.dist-info → most_client-1.0.32.dist-info}/top_level.txt +0 -0
- {most_client-1.0.30.dist-info → most_client-1.0.32.dist-info}/zip-safe +0 -0
most/api.py
CHANGED
@@ -18,7 +18,7 @@ from most.types import (
|
|
18
18
|
Script,
|
19
19
|
StoredAudioData,
|
20
20
|
Text,
|
21
|
-
is_valid_id, SearchParams, ScriptScoreMapping, Dialog,
|
21
|
+
is_valid_id, SearchParams, ScriptScoreMapping, Dialog, Usage,
|
22
22
|
)
|
23
23
|
|
24
24
|
|
@@ -26,7 +26,7 @@ class MostClient(object):
|
|
26
26
|
retort = Retort(recipe=[
|
27
27
|
loader(int, lambda x: int(x)),
|
28
28
|
loader(float, lambda x: float(x)),
|
29
|
-
loader(datetime, lambda x: datetime.fromtimestamp(x).
|
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
|
|
32
32
|
def __init__(self,
|
@@ -248,56 +248,64 @@ class MostClient(object):
|
|
248
248
|
for model in resp.json()]
|
249
249
|
|
250
250
|
def apply(self, audio_id,
|
251
|
-
modify_scores: bool = False
|
251
|
+
modify_scores: bool = False,
|
252
|
+
overwrite: bool = False) -> Result:
|
252
253
|
if not is_valid_id(self.model_id):
|
253
254
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
254
255
|
|
255
256
|
if not is_valid_id(audio_id):
|
256
257
|
raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
|
257
258
|
|
258
|
-
resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply"
|
259
|
+
resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply",
|
260
|
+
params={"overwrite": overwrite})
|
259
261
|
result = self.retort.load(resp.json(), Result)
|
260
262
|
if modify_scores:
|
261
263
|
result = self.score_modifier.modify(result)
|
262
264
|
return result
|
263
265
|
|
264
266
|
def apply_on_text(self, text_id,
|
265
|
-
modify_scores: bool = False
|
267
|
+
modify_scores: bool = False,
|
268
|
+
overwrite: bool = False) -> Result:
|
266
269
|
if not is_valid_id(self.model_id):
|
267
270
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
268
271
|
|
269
272
|
if not is_valid_id(text_id):
|
270
273
|
raise RuntimeError("Please use valid text_id. [try text.id from list_texts()]")
|
271
274
|
|
272
|
-
resp = self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply"
|
275
|
+
resp = self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply",
|
276
|
+
params={"overwrite": overwrite})
|
273
277
|
result = self.retort.load(resp.json(), Result)
|
274
278
|
if modify_scores:
|
275
279
|
result = self.score_modifier.modify(result)
|
276
280
|
return result
|
277
281
|
|
278
282
|
def apply_later(self, audio_id,
|
279
|
-
modify_scores: bool = False
|
283
|
+
modify_scores: bool = False,
|
284
|
+
overwrite: bool = False) -> Result:
|
280
285
|
if not is_valid_id(self.model_id):
|
281
286
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
282
287
|
|
283
288
|
if not is_valid_id(audio_id):
|
284
289
|
raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
|
285
290
|
|
286
|
-
resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async"
|
291
|
+
resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async",
|
292
|
+
params={"overwrite": overwrite})
|
287
293
|
result = self.retort.load(resp.json(), Result)
|
288
294
|
if modify_scores:
|
289
295
|
result = self.score_modifier.modify(result)
|
290
296
|
return result
|
291
297
|
|
292
298
|
def apply_on_text_later(self, text_id,
|
293
|
-
modify_scores: bool = False
|
299
|
+
modify_scores: bool = False,
|
300
|
+
overwrite: bool = False) -> Result:
|
294
301
|
if not is_valid_id(self.model_id):
|
295
302
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
296
303
|
|
297
304
|
if not is_valid_id(text_id):
|
298
305
|
raise RuntimeError("Please use valid text_id. [try audio.id from list_texts()]")
|
299
306
|
|
300
|
-
resp = self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async"
|
307
|
+
resp = self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async",
|
308
|
+
params={"overwrite": overwrite})
|
301
309
|
result = self.retort.load(resp.json(), Result)
|
302
310
|
if modify_scores:
|
303
311
|
result = self.score_modifier.modify(result)
|
@@ -436,3 +444,12 @@ class MostClient(object):
|
|
436
444
|
raise RuntimeError("Audio can't be indexed")
|
437
445
|
audio_list = resp.json()
|
438
446
|
return self.retort.load(audio_list, List[Audio])
|
447
|
+
|
448
|
+
def get_usage(self,
|
449
|
+
start_dt: datetime,
|
450
|
+
end_dt: datetime):
|
451
|
+
resp = self.get(f"/{self.client_id}/model/{self.model_id}/usage",
|
452
|
+
params={'start_dt': start_dt.astimezone(timezone.utc).isoformat(),
|
453
|
+
'end_dt': end_dt.astimezone(timezone.utc).isoformat()})
|
454
|
+
resp.raise_for_status()
|
455
|
+
return self.retort.load(resp.json(), Usage)
|
most/async_api.py
CHANGED
@@ -18,7 +18,7 @@ from most.types import (
|
|
18
18
|
Script,
|
19
19
|
StoredAudioData,
|
20
20
|
Text,
|
21
|
-
is_valid_id, SearchParams, ScriptScoreMapping, Dialog,
|
21
|
+
is_valid_id, SearchParams, ScriptScoreMapping, Dialog, Usage,
|
22
22
|
)
|
23
23
|
|
24
24
|
|
@@ -26,7 +26,7 @@ class AsyncMostClient(object):
|
|
26
26
|
retort = Retort(recipe=[
|
27
27
|
loader(int, lambda x: int(x)),
|
28
28
|
loader(float, lambda x: float(x)),
|
29
|
-
loader(datetime, lambda x: datetime.fromtimestamp(x).
|
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
|
|
32
32
|
def __init__(self,
|
@@ -258,56 +258,64 @@ class AsyncMostClient(object):
|
|
258
258
|
for model in resp.json()]
|
259
259
|
|
260
260
|
async def apply(self, audio_id,
|
261
|
-
modify_scores: bool = False
|
261
|
+
modify_scores: bool = False,
|
262
|
+
overwrite: bool = False) -> Result:
|
262
263
|
if not is_valid_id(self.model_id):
|
263
264
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
264
265
|
|
265
266
|
if not is_valid_id(audio_id):
|
266
267
|
raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
|
267
268
|
|
268
|
-
resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply"
|
269
|
+
resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply",
|
270
|
+
params={"overwrite": overwrite})
|
269
271
|
result = self.retort.load(resp.json(), Result)
|
270
272
|
if modify_scores:
|
271
273
|
result = self.score_modifier.modify(result)
|
272
274
|
return result
|
273
275
|
|
274
276
|
async def apply_on_text(self, text_id,
|
275
|
-
modify_scores: bool = False
|
277
|
+
modify_scores: bool = False,
|
278
|
+
overwrite: bool = False) -> Result:
|
276
279
|
if not is_valid_id(self.model_id):
|
277
280
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
278
281
|
|
279
282
|
if not is_valid_id(text_id):
|
280
283
|
raise RuntimeError("Please use valid text_id. [try text.id from list_texts()]")
|
281
284
|
|
282
|
-
resp = await self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply"
|
285
|
+
resp = await self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply",
|
286
|
+
params={"overwrite": overwrite})
|
283
287
|
result = self.retort.load(resp.json(), Result)
|
284
288
|
if modify_scores:
|
285
289
|
result = self.score_modifier.modify(result)
|
286
290
|
return result
|
287
291
|
|
288
292
|
async def apply_later(self, audio_id,
|
289
|
-
modify_scores: bool = False
|
293
|
+
modify_scores: bool = False,
|
294
|
+
overwrite: bool = False) -> Result:
|
290
295
|
if not is_valid_id(self.model_id):
|
291
296
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
292
297
|
|
293
298
|
if not is_valid_id(audio_id):
|
294
299
|
raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
|
295
300
|
|
296
|
-
resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async"
|
301
|
+
resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async",
|
302
|
+
params={"overwrite": overwrite})
|
297
303
|
result = self.retort.load(resp.json(), Result)
|
298
304
|
if modify_scores:
|
299
305
|
result = self.score_modifier.modify(result)
|
300
306
|
return result
|
301
307
|
|
302
308
|
async def apply_on_text_later(self, text_id,
|
303
|
-
modify_scores: bool = False
|
309
|
+
modify_scores: bool = False,
|
310
|
+
overwrite: bool = False) -> Result:
|
304
311
|
if not is_valid_id(self.model_id):
|
305
312
|
raise RuntimeError("Please choose valid model to apply. [try list_models()]")
|
306
313
|
|
307
314
|
if not is_valid_id(text_id):
|
308
315
|
raise RuntimeError("Please use valid text_id. [try audio.id from list_texts()]")
|
309
316
|
|
310
|
-
resp = await self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async"
|
317
|
+
resp = await self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async",
|
318
|
+
params={"overwrite": overwrite})
|
311
319
|
result = self.retort.load(resp.json(), Result)
|
312
320
|
if modify_scores:
|
313
321
|
result = self.score_modifier.modify(result)
|
@@ -442,3 +450,12 @@ class AsyncMostClient(object):
|
|
442
450
|
raise RuntimeError("Audio can't be indexed")
|
443
451
|
audio_list = resp.json()
|
444
452
|
return self.retort.load(audio_list, List[Audio])
|
453
|
+
|
454
|
+
async def get_usage(self,
|
455
|
+
start_dt: datetime,
|
456
|
+
end_dt: datetime):
|
457
|
+
resp = await self.get(f"/{self.client_id}/model/{self.model_id}/usage",
|
458
|
+
params={'start_dt': start_dt.astimezone(timezone.utc).isoformat(),
|
459
|
+
'end_dt': end_dt.astimezone(timezone.utc).isoformat()})
|
460
|
+
resp.raise_for_status()
|
461
|
+
return self.retort.load(resp.json(), Usage)
|
most/types.py
CHANGED
@@ -173,6 +173,25 @@ class HumanFeedback(DataClassJsonMixin):
|
|
173
173
|
return sum((preds[key] == gt[key]) for key in common_keys) / len(common_keys)
|
174
174
|
|
175
175
|
|
176
|
+
@dataclass_json
|
177
|
+
@dataclass
|
178
|
+
class Usage(DataClassJsonMixin):
|
179
|
+
apply_audio_async: int
|
180
|
+
apply_audio_async_duration: int
|
181
|
+
apply_text_async: int
|
182
|
+
|
183
|
+
apply_audio: int
|
184
|
+
apply_audio_duration: int
|
185
|
+
apply_text: int
|
186
|
+
|
187
|
+
upload_audio: int
|
188
|
+
upload_audio_duration: int
|
189
|
+
upload_text: int
|
190
|
+
|
191
|
+
start_dt: datetime
|
192
|
+
end_dt: datetime
|
193
|
+
|
194
|
+
|
176
195
|
def is_valid_objectid(oid: str) -> bool:
|
177
196
|
"""
|
178
197
|
Check if a given string is a valid MongoDB ObjectId (24-character hex).
|
@@ -0,0 +1,13 @@
|
|
1
|
+
most/__init__.py,sha256=b0EXXaPA4kmt-FtGXKRWZr7SCwjipMLcpC6uT5WRIdY,144
|
2
|
+
most/_constrants.py,sha256=SlHKcBoXwe_sPzk8tdbb7lqhQz-Bfo__FhSoeFWodZE,217
|
3
|
+
most/api.py,sha256=3PzHr61qKQ0_BIo9rdsm2SRi43yD0HdQc8GPpW-ehgk,18816
|
4
|
+
most/async_api.py,sha256=uSfdZuWCdPr05JiO2hJ9HraF0uFRiRSPTYVYuUZLCDQ,19973
|
5
|
+
most/async_trainer_api.py,sha256=99rED8RjnOn8VezeEgrTgoVfQrO7DdmOE2Jajumno2g,1052
|
6
|
+
most/score_calculation.py,sha256=1XU1LfIH5LSCwAbAaKkr-EjH5qOTXrJKOUvhCCawka4,1054
|
7
|
+
most/trainer_api.py,sha256=ZwOv4mhROfY97n6i7IY_ZpafsuNRazOqMBAf2dh708k,992
|
8
|
+
most/types.py,sha256=KP34dzS8ayQUhToIxwxTL9O8-7TZz1ySfJzA3ZNGIGw,4921
|
9
|
+
most_client-1.0.32.dist-info/METADATA,sha256=YMrdEObidHQio4UzTc1yINdEEXnhr12EeqWrR110ssY,1027
|
10
|
+
most_client-1.0.32.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
11
|
+
most_client-1.0.32.dist-info/top_level.txt,sha256=2g5fk02LKkM1hV3pVVti_LQ60TToLBcR2zQ3JEKGVk8,5
|
12
|
+
most_client-1.0.32.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
13
|
+
most_client-1.0.32.dist-info/RECORD,,
|
@@ -1,13 +0,0 @@
|
|
1
|
-
most/__init__.py,sha256=b0EXXaPA4kmt-FtGXKRWZr7SCwjipMLcpC6uT5WRIdY,144
|
2
|
-
most/_constrants.py,sha256=SlHKcBoXwe_sPzk8tdbb7lqhQz-Bfo__FhSoeFWodZE,217
|
3
|
-
most/api.py,sha256=_xqIj24dm1bINPy54zZ4Xqp5V8DQa05TN3zocuZW7io,17895
|
4
|
-
most/async_api.py,sha256=7uymQ643SVzFU-j_iR-8MqT5wkNad9v54nR9vT87QoY,18968
|
5
|
-
most/async_trainer_api.py,sha256=99rED8RjnOn8VezeEgrTgoVfQrO7DdmOE2Jajumno2g,1052
|
6
|
-
most/score_calculation.py,sha256=1XU1LfIH5LSCwAbAaKkr-EjH5qOTXrJKOUvhCCawka4,1054
|
7
|
-
most/trainer_api.py,sha256=ZwOv4mhROfY97n6i7IY_ZpafsuNRazOqMBAf2dh708k,992
|
8
|
-
most/types.py,sha256=-voecFH0E4ScMHu0DR_2S6XNdlkGuVJgy0Z1Oui2iM8,4578
|
9
|
-
most_client-1.0.30.dist-info/METADATA,sha256=f-x0jH2hHk7uYN2DMTohvxYEJFRczhoH0eQVHBSn8dg,1027
|
10
|
-
most_client-1.0.30.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
11
|
-
most_client-1.0.30.dist-info/top_level.txt,sha256=2g5fk02LKkM1hV3pVVti_LQ60TToLBcR2zQ3JEKGVk8,5
|
12
|
-
most_client-1.0.30.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
13
|
-
most_client-1.0.30.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|