most-client 1.0.24__tar.gz → 1.0.26__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.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: most-client
3
- Version: 1.0.24
3
+ Version: 1.0.26
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
@@ -0,0 +1,7 @@
1
+ import httpx
2
+
3
+
4
+ DEFAULT_TIMEOUT = httpx.Timeout(timeout=600.0, connect=5.0)
5
+ DEFAULT_MAX_RETRIES = 2
6
+ DEFAULT_RETRY_DELAY = 5
7
+ DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=1000, max_keepalive_connections=100)
@@ -2,13 +2,12 @@ import io
2
2
  import os
3
3
  import uuid
4
4
  from pathlib import Path
5
- from typing import Dict, List, Optional
6
-
5
+ from typing import Dict, List, Optional, Union
7
6
  import json5
8
- import requests
7
+ import httpx
9
8
  from adaptix import Retort
10
9
  from pydub import AudioSegment
11
-
10
+ from most._constrants import DEFAULT_MAX_RETRIES, DEFAULT_RETRY_DELAY
12
11
  from most.score_calculation import ScoreCalculation
13
12
  from most.types import (
14
13
  Audio,
@@ -28,7 +27,13 @@ class MostClient(object):
28
27
  def __init__(self,
29
28
  client_id=None,
30
29
  client_secret=None,
31
- model_id=None):
30
+ model_id=None,
31
+
32
+ base_url: str | httpx.URL | None = None,
33
+ timeout: Union[float, httpx.Timeout] = 1e10,
34
+ max_retries: int = DEFAULT_MAX_RETRIES,
35
+ # retry_delay: float = DEFAULT_RETRY_DELAY,
36
+ http_client: httpx.Client | None = None):
32
37
  super(MostClient, self).__init__()
33
38
  self.client_id = client_id
34
39
  self.client_secret = client_secret
@@ -46,7 +51,19 @@ class MostClient(object):
46
51
  else:
47
52
  self.save_credentials()
48
53
 
49
- self.session = requests.Session()
54
+ if base_url is None:
55
+ base_url = os.environ.get("MOST_BASE_URL")
56
+ if base_url is None:
57
+ base_url = f"https://api.the-most.ai/api/external"
58
+
59
+ if http_client is None:
60
+ http_client = httpx.Client(base_url=base_url,
61
+ timeout=timeout,
62
+ follow_redirects=True,
63
+ transport=httpx.HTTPTransport(retries=max_retries))
64
+ # self.max_retries = max_retries
65
+ # self.retry_delay = retry_delay
66
+ self.session = http_client
50
67
  self.access_token = None
51
68
  self.model_id = model_id
52
69
  self.score_modifier = None
@@ -89,7 +106,7 @@ class MostClient(object):
89
106
  return client
90
107
 
91
108
  def refresh_access_token(self):
92
- resp = self.session.post("https://api.the-most.ai/api/external/access_token",
109
+ resp = self.session.post("/access_token",
93
110
  json={"client_id": self.client_id,
94
111
  "client_secret": self.client_secret},
95
112
  timeout=None)
@@ -158,18 +175,18 @@ class MostClient(object):
158
175
  return resp
159
176
 
160
177
  def upload_text(self, text: str) -> Text:
161
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_text",
178
+ resp = self.post(f"/{self.client_id}/upload_text",
162
179
  files={"text": text})
163
180
  return self.retort.load(resp.json(), Text)
164
181
 
165
182
  def upload_dialog(self, dialog: Dialog) -> DialogResult:
166
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_dialog",
183
+ resp = self.post(f"/{self.client_id}/upload_dialog",
167
184
  json={"dialog": dialog})
168
185
  return self.retort.load(resp.json(), DialogResult)
169
186
 
170
187
  def upload_audio(self, audio_path) -> Audio:
171
188
  with open(audio_path, 'rb') as f:
172
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
189
+ resp = self.post(f"/{self.client_id}/upload",
173
190
  files={"audio_file": f})
174
191
  return self.retort.load(resp.json(), Audio)
175
192
 
@@ -180,26 +197,26 @@ class MostClient(object):
180
197
  f.seek(0)
181
198
  if audio_name is None:
182
199
  audio_name = uuid.uuid4().hex + ".mp3"
183
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
200
+ resp = self.post(f"/{self.client_id}/upload",
184
201
  files={"audio_file": (audio_name, f, 'audio/mp3')})
185
202
  return self.retort.load(resp.json(), Audio)
186
203
 
187
204
  def upload_audio_url(self, audio_url) -> Audio:
188
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_url",
205
+ resp = self.post(f"/{self.client_id}/upload_url",
189
206
  json={"audio_url": audio_url})
190
207
  return self.retort.load(resp.json(), Audio)
191
208
 
192
209
  def list_audios(self,
193
210
  offset: int = 0,
194
211
  limit: int = 10) -> List[Audio]:
195
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/list?offset={offset}&limit={limit}")
212
+ resp = self.get(f"/{self.client_id}/list?offset={offset}&limit={limit}")
196
213
  audio_list = resp.json()
197
214
  return self.retort.load(audio_list, List[Audio])
198
215
 
199
216
  def list_texts(self,
200
217
  offset: int = 0,
201
218
  limit: int = 10) -> List[Text]:
202
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/list_texts?offset={offset}&limit={limit}")
219
+ resp = self.get(f"/{self.client_id}/list_texts?offset={offset}&limit={limit}")
203
220
  texts_list = resp.json()
204
221
  return self.retort.load(texts_list, List[Text])
205
222
 
@@ -207,7 +224,7 @@ class MostClient(object):
207
224
  if not is_valid_id(self.model_id):
208
225
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
209
226
 
210
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/script")
227
+ resp = self.get(f"/{self.client_id}/model/{self.model_id}/script")
211
228
  return self.retort.load(resp.json(), Script)
212
229
 
213
230
  def get_score_modifier(self):
@@ -215,13 +232,13 @@ class MostClient(object):
215
232
  if not is_valid_id(self.model_id):
216
233
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
217
234
 
218
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/score_mapping")
235
+ resp = self.get(f"/{self.client_id}/model/{self.model_id}/score_mapping")
219
236
  score_mapping = self.retort.load(resp.json(), List[ScriptScoreMapping])
220
237
  self.score_modifier = ScoreCalculation(score_mapping)
221
238
  return self.score_modifier
222
239
 
223
240
  def list_models(self):
224
- resp = self.get("https://api.the-most.ai/api/external/list_models")
241
+ resp = self.get("/list_models")
225
242
  return [self.with_model(model['model'])
226
243
  for model in resp.json()]
227
244
 
@@ -233,7 +250,7 @@ class MostClient(object):
233
250
  if not is_valid_id(audio_id):
234
251
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
235
252
 
236
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply")
253
+ resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply")
237
254
  result = self.retort.load(resp.json(), Result)
238
255
  if modify_scores:
239
256
  result = self.score_modifier.modify(result)
@@ -247,7 +264,7 @@ class MostClient(object):
247
264
  if not is_valid_id(text_id):
248
265
  raise RuntimeError("Please use valid text_id. [try text.id from list_texts()]")
249
266
 
250
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/text/{text_id}/model/{self.model_id}/apply")
267
+ resp = self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply")
251
268
  result = self.retort.load(resp.json(), Result)
252
269
  if modify_scores:
253
270
  result = self.score_modifier.modify(result)
@@ -261,7 +278,7 @@ class MostClient(object):
261
278
  if not is_valid_id(audio_id):
262
279
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
263
280
 
264
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async")
281
+ resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async")
265
282
  result = self.retort.load(resp.json(), Result)
266
283
  if modify_scores:
267
284
  result = self.score_modifier.modify(result)
@@ -275,7 +292,7 @@ class MostClient(object):
275
292
  if not is_valid_id(text_id):
276
293
  raise RuntimeError("Please use valid text_id. [try audio.id from list_texts()]")
277
294
 
278
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async")
295
+ resp = self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async")
279
296
  result = self.retort.load(resp.json(), Result)
280
297
  if modify_scores:
281
298
  result = self.score_modifier.modify(result)
@@ -288,7 +305,7 @@ class MostClient(object):
288
305
  if not is_valid_id(audio_id):
289
306
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
290
307
 
291
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_status")
308
+ resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_status")
292
309
  return self.retort.load(resp.json(), JobStatus)
293
310
 
294
311
  def fetch_results(self, audio_id,
@@ -299,7 +316,7 @@ class MostClient(object):
299
316
  if not is_valid_id(audio_id):
300
317
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
301
318
 
302
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/results")
319
+ resp = self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/results")
303
320
  result = self.retort.load(resp.json(), Result)
304
321
  if modify_scores:
305
322
  result = self.score_modifier.modify(result)
@@ -312,7 +329,7 @@ class MostClient(object):
312
329
  if not is_valid_id(audio_id):
313
330
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
314
331
 
315
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/text")
332
+ resp = self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/text")
316
333
  return self.retort.load(resp.json(), Result)
317
334
 
318
335
  def fetch_dialog(self, audio_id) -> DialogResult:
@@ -322,7 +339,7 @@ class MostClient(object):
322
339
  if not is_valid_id(audio_id):
323
340
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
324
341
 
325
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog")
342
+ resp = self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog")
326
343
  return self.retort.load(resp.json(), DialogResult)
327
344
 
328
345
  def update_dialog(self, audio_id, dialog: Dialog) -> DialogResult:
@@ -332,7 +349,7 @@ class MostClient(object):
332
349
  if not is_valid_id(audio_id):
333
350
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
334
351
 
335
- resp = self.put(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog",
352
+ resp = self.put(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog",
336
353
  json={"dialog": dialog.to_dict()})
337
354
  return self.retort.load(resp.json(), DialogResult)
338
355
 
@@ -345,7 +362,7 @@ class MostClient(object):
345
362
  if not is_valid_id(self.model_id):
346
363
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
347
364
 
348
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/export",
365
+ resp = self.get(f"/{self.client_id}/model/{self.model_id}/export",
349
366
  params={'audio_ids': ','.join(audio_ids),
350
367
  'aggregated_by': aggregated_by,
351
368
  'aggregation_title': aggregation_title})
@@ -357,7 +374,7 @@ class MostClient(object):
357
374
  if not is_valid_id(audio_id):
358
375
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
359
376
 
360
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/info",
377
+ resp = self.post(f"/{self.client_id}/audio/{audio_id}/info",
361
378
  json={
362
379
  "data": data,
363
380
  })
@@ -367,7 +384,7 @@ class MostClient(object):
367
384
  if not is_valid_id(audio_id):
368
385
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
369
386
 
370
- resp = self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/info")
387
+ resp = self.get(f"/{self.client_id}/audio/{audio_id}/info")
371
388
  return self.retort.load(resp.json(), StoredAudioData)
372
389
 
373
390
  def __call__(self, audio_path: Path,
@@ -395,7 +412,7 @@ class MostClient(object):
395
412
  return audio
396
413
 
397
414
  def index_audio(self, audio_id: str) -> None:
398
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/indexing")
415
+ resp = self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/indexing")
399
416
  if resp.status_code >= 400:
400
417
  raise RuntimeError("Audio can't be indexed")
401
418
  return None
@@ -404,7 +421,7 @@ class MostClient(object):
404
421
  query: str,
405
422
  filter: SearchParams,
406
423
  limit: int = 10) -> List[Audio]:
407
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/search",
424
+ resp = self.post(f"/{self.client_id}/model/{self.model_id}/search",
408
425
  json={
409
426
  "query": query,
410
427
  "filter": filter.to_dict(),
@@ -2,13 +2,12 @@ import io
2
2
  import os
3
3
  import uuid
4
4
  from pathlib import Path
5
- from typing import Dict, List, Optional
6
-
5
+ from typing import Dict, List, Optional, Union
7
6
  import httpx
8
7
  import json5
9
8
  from adaptix import Retort
10
9
  from pydub import AudioSegment
11
-
10
+ from most._constrants import DEFAULT_MAX_RETRIES
12
11
  from most.score_calculation import ScoreCalculation
13
12
  from most.types import (
14
13
  Audio,
@@ -28,7 +27,13 @@ class AsyncMostClient(object):
28
27
  def __init__(self,
29
28
  client_id=None,
30
29
  client_secret=None,
31
- model_id=None):
30
+ model_id=None,
31
+
32
+ base_url: str | httpx.URL | None = None,
33
+ timeout: Union[float, httpx.Timeout] = 1e10,
34
+ max_retries: int = DEFAULT_MAX_RETRIES,
35
+ # retry_delay: float = 0,
36
+ http_client: httpx.AsyncClient | None = None):
32
37
  super(AsyncMostClient, self).__init__()
33
38
  self.client_id = client_id
34
39
  self.client_secret = client_secret
@@ -46,7 +51,19 @@ class AsyncMostClient(object):
46
51
  else:
47
52
  self.save_credentials()
48
53
 
49
- self.session = httpx.AsyncClient()
54
+ if base_url is None:
55
+ base_url = os.environ.get("MOST_BASE_URL")
56
+ if base_url is None:
57
+ base_url = f"https://api.the-most.ai/api/external"
58
+
59
+ if http_client is None:
60
+ http_client = httpx.AsyncClient(base_url=base_url,
61
+ timeout=timeout,
62
+ follow_redirects=True,
63
+ transport=httpx.AsyncHTTPTransport(retries=max_retries))
64
+ # self.max_retries = max_retries
65
+ # self.retry_delay = retry_delay
66
+ self.session = http_client
50
67
  self.access_token = None
51
68
  self.model_id = model_id
52
69
  self.score_modifier: Optional[ScoreCalculation] = None
@@ -97,7 +114,7 @@ class AsyncMostClient(object):
97
114
  return client
98
115
 
99
116
  async def refresh_access_token(self):
100
- resp = await self.session.post("https://api.the-most.ai/api/external/access_token",
117
+ resp = await self.session.post("/access_token",
101
118
  json={"client_id": self.client_id,
102
119
  "client_secret": self.client_secret})
103
120
  access_token = resp.json()
@@ -117,9 +134,10 @@ class AsyncMostClient(object):
117
134
  return await self.get(url,
118
135
  headers=headers,
119
136
  **kwargs)
120
- if resp.status_code >= 400:
121
- raise RuntimeError(resp.json()['message'] if resp.headers.get(
122
- "Content-Type") == "application/json" else "Something went wrong.")
137
+
138
+ if resp.headers.get("Content-Type") == "application/json":
139
+ raise RuntimeError(resp.json()['message'])
140
+ resp.raise_for_status()
123
141
  return resp
124
142
 
125
143
  async def put(self, url, **kwargs):
@@ -168,7 +186,7 @@ class AsyncMostClient(object):
168
186
 
169
187
  async def upload_audio(self, audio_path) -> Audio:
170
188
  with open(audio_path, mode='rb') as f:
171
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
189
+ resp = await self.post(f"/{self.client_id}/upload",
172
190
  files={"audio_file": f})
173
191
  return self.retort.load(resp.json(), Audio)
174
192
 
@@ -179,36 +197,36 @@ class AsyncMostClient(object):
179
197
  f.seek(0)
180
198
  if audio_name is None:
181
199
  audio_name = uuid.uuid4().hex + ".mp3"
182
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
200
+ resp = await self.post(f"/{self.client_id}/upload",
183
201
  files={"audio_file": (audio_name, f, 'audio/mp3')})
184
202
  return self.retort.load(resp.json(), Audio)
185
203
 
186
204
  async def upload_text(self, text: str) -> Text:
187
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_text",
205
+ resp = await self.post(f"/{self.client_id}/upload_text",
188
206
  json={"text": text})
189
207
  return self.retort.load(resp.json(), Text)
190
208
 
191
209
  async def upload_dialog(self, dialog: Dialog) -> DialogResult:
192
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_dialog",
210
+ resp = await self.post(f"/{self.client_id}/upload_dialog",
193
211
  json={"dialog": dialog})
194
212
  return self.retort.load(resp.json(), DialogResult)
195
213
 
196
214
  async def upload_audio_url(self, audio_url) -> Audio:
197
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_url",
215
+ resp = await self.post(f"/{self.client_id}/upload_url",
198
216
  json={"audio_url": audio_url})
199
217
  return self.retort.load(resp.json(), Audio)
200
218
 
201
219
  async def list_audios(self,
202
220
  offset: int = 0,
203
221
  limit: int = 10) -> List[Audio]:
204
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/list?offset={offset}&limit={limit}")
222
+ resp = await self.get(f"/{self.client_id}/list?offset={offset}&limit={limit}")
205
223
  audio_list = resp.json()
206
224
  return self.retort.load(audio_list, List[Audio])
207
225
 
208
226
  async def list_texts(self,
209
227
  offset: int = 0,
210
228
  limit: int = 10) -> List[Text]:
211
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/list_texts?offset={offset}&limit={limit}")
229
+ resp = await self.get(f"/{self.client_id}/list_texts?offset={offset}&limit={limit}")
212
230
  texts_list = resp.json()
213
231
  return self.retort.load(texts_list, List[Text])
214
232
 
@@ -216,7 +234,7 @@ class AsyncMostClient(object):
216
234
  if not is_valid_id(self.model_id):
217
235
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
218
236
 
219
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/script")
237
+ resp = await self.get(f"/{self.client_id}/model/{self.model_id}/script")
220
238
  return self.retort.load(resp.json(), Script)
221
239
 
222
240
  async def get_score_modifier(self):
@@ -224,13 +242,13 @@ class AsyncMostClient(object):
224
242
  if not is_valid_id(self.model_id):
225
243
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
226
244
 
227
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/score_mapping")
245
+ resp = await self.get(f"/{self.client_id}/model/{self.model_id}/score_mapping")
228
246
  score_mapping = self.retort.load(resp.json(), List[ScriptScoreMapping])
229
247
  self.score_modifier = ScoreCalculation(score_mapping)
230
248
  return self.score_modifier
231
249
 
232
250
  async def list_models(self):
233
- resp = await self.get("https://api.the-most.ai/api/external/list_models")
251
+ resp = await self.get("/list_models")
234
252
  return [self.with_model(model['model'])
235
253
  for model in resp.json()]
236
254
 
@@ -242,7 +260,7 @@ class AsyncMostClient(object):
242
260
  if not is_valid_id(audio_id):
243
261
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
244
262
 
245
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply")
263
+ resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply")
246
264
  result = self.retort.load(resp.json(), Result)
247
265
  if modify_scores:
248
266
  result = self.score_modifier.modify(result)
@@ -256,7 +274,7 @@ class AsyncMostClient(object):
256
274
  if not is_valid_id(text_id):
257
275
  raise RuntimeError("Please use valid text_id. [try text.id from list_texts()]")
258
276
 
259
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/text/{text_id}/model/{self.model_id}/apply")
277
+ resp = await self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply")
260
278
  result = self.retort.load(resp.json(), Result)
261
279
  if modify_scores:
262
280
  result = self.score_modifier.modify(result)
@@ -270,7 +288,7 @@ class AsyncMostClient(object):
270
288
  if not is_valid_id(audio_id):
271
289
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
272
290
 
273
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async")
291
+ resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_async")
274
292
  result = self.retort.load(resp.json(), Result)
275
293
  if modify_scores:
276
294
  result = self.score_modifier.modify(result)
@@ -284,7 +302,7 @@ class AsyncMostClient(object):
284
302
  if not is_valid_id(text_id):
285
303
  raise RuntimeError("Please use valid text_id. [try audio.id from list_texts()]")
286
304
 
287
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async")
305
+ resp = await self.post(f"/{self.client_id}/text/{text_id}/model/{self.model_id}/apply_async")
288
306
  result = self.retort.load(resp.json(), Result)
289
307
  if modify_scores:
290
308
  result = self.score_modifier.modify(result)
@@ -297,7 +315,7 @@ class AsyncMostClient(object):
297
315
  if not is_valid_id(audio_id):
298
316
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
299
317
 
300
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_status")
318
+ resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/apply_status")
301
319
  return self.retort.load(resp.json(), JobStatus)
302
320
 
303
321
  async def fetch_results(self, audio_id,
@@ -308,7 +326,7 @@ class AsyncMostClient(object):
308
326
  if not is_valid_id(audio_id):
309
327
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
310
328
 
311
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/results")
329
+ resp = await self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/results")
312
330
  result = self.retort.load(resp.json(), Result)
313
331
  if modify_scores:
314
332
  result = self.score_modifier.modify(result)
@@ -321,7 +339,7 @@ class AsyncMostClient(object):
321
339
  if not is_valid_id(audio_id):
322
340
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
323
341
 
324
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/text")
342
+ resp = await self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/text")
325
343
  return self.retort.load(resp.json(), Result)
326
344
 
327
345
  async def fetch_dialog(self, audio_id) -> DialogResult:
@@ -331,7 +349,7 @@ class AsyncMostClient(object):
331
349
  if not is_valid_id(audio_id):
332
350
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
333
351
 
334
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog")
352
+ resp = await self.get(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog")
335
353
  return self.retort.load(resp.json(), DialogResult)
336
354
 
337
355
  async def update_dialog(self, audio_id, dialog: Dialog) -> DialogResult:
@@ -341,7 +359,7 @@ class AsyncMostClient(object):
341
359
  if not is_valid_id(audio_id):
342
360
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
343
361
 
344
- resp = await self.put(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog",
362
+ resp = await self.put(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog",
345
363
  json={"dialog": dialog.to_dict()})
346
364
  return self.retort.load(resp.json(), DialogResult)
347
365
 
@@ -354,7 +372,7 @@ class AsyncMostClient(object):
354
372
  if not is_valid_id(self.model_id):
355
373
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
356
374
 
357
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/export",
375
+ resp = await self.get(f"/{self.client_id}/model/{self.model_id}/export",
358
376
  params={'audio_ids': ','.join(audio_ids),
359
377
  "aggregated_by": aggregated_by,
360
378
  "aggregation_title": aggregation_title})
@@ -363,7 +381,7 @@ class AsyncMostClient(object):
363
381
  async def store_info(self,
364
382
  audio_id: str,
365
383
  data: Dict[str, str]):
366
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/info",
384
+ resp = await self.post(f"/{self.client_id}/audio/{audio_id}/info",
367
385
  json={
368
386
  "data": data,
369
387
  })
@@ -372,7 +390,7 @@ class AsyncMostClient(object):
372
390
  async def fetch_info(self, audio_id: str) -> Dict[str, str]:
373
391
  if not is_valid_id(audio_id):
374
392
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
375
- resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/info")
393
+ resp = await self.get(f"/{self.client_id}/audio/{audio_id}/info")
376
394
  return self.retort.load(resp.json(), StoredAudioData)
377
395
 
378
396
  async def __call__(self, audio_path: Path,
@@ -400,7 +418,7 @@ class AsyncMostClient(object):
400
418
  return audio
401
419
 
402
420
  async def index_audio(self, audio_id: str) -> None:
403
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/audio/{audio_id}/model/{self.model_id}/indexing")
421
+ resp = await self.post(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/indexing")
404
422
  if resp.status_code >= 400:
405
423
  raise RuntimeError("Audio can't be indexed")
406
424
  return None
@@ -409,7 +427,7 @@ class AsyncMostClient(object):
409
427
  query: str,
410
428
  filter: SearchParams,
411
429
  limit: int = 10) -> List[Audio]:
412
- resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/model/{self.model_id}/search",
430
+ resp = await self.post(f"/{self.client_id}/model/{self.model_id}/search",
413
431
  json={
414
432
  "query": query,
415
433
  "filter": filter.to_dict(),
@@ -1,5 +1,6 @@
1
1
  import re
2
2
  from dataclasses import dataclass
3
+ from datetime import datetime
3
4
  from typing import Dict, List, Literal, Optional
4
5
 
5
6
  from dataclasses_json import DataClassJsonMixin, dataclass_json
@@ -75,6 +76,8 @@ class Result(DataClassJsonMixin):
75
76
  text: Optional[str]
76
77
  url: Optional[str]
77
78
  results: Optional[List[ColumnResult]]
79
+ created_at: Optional[datetime]
80
+ applied_at: Optional[datetime]
78
81
 
79
82
  def get_script(self) -> Optional[Script]:
80
83
  if self.results is None:
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: most-client
3
- Version: 1.0.24
3
+ Version: 1.0.26
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
@@ -3,6 +3,7 @@ README.md
3
3
  requirements.txt
4
4
  setup.py
5
5
  most/__init__.py
6
+ most/_constrants.py
6
7
  most/api.py
7
8
  most/async_api.py
8
9
  most/score_calculation.py
@@ -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.24',
11
+ version='1.0.26',
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',
File without changes
File without changes
File without changes