most-client 1.0.23__py3-none-any.whl → 1.0.25__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/_constrants.py ADDED
@@ -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)
most/api.py CHANGED
@@ -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)
@@ -114,6 +131,24 @@ class MostClient(object):
114
131
  raise RuntimeError(resp.json()['message'] if resp.headers.get("Content-Type") == "application/json" else "Something went wrong.")
115
132
  return resp
116
133
 
134
+ def put(self, url, **kwargs):
135
+ if self.access_token is None:
136
+ self.refresh_access_token()
137
+ headers = kwargs.pop("headers", {})
138
+ headers.update({"Authorization": "Bearer %s" % self.access_token})
139
+ resp = self.session.put(url,
140
+ headers=headers,
141
+ timeout=None,
142
+ **kwargs)
143
+ if resp.status_code == 401:
144
+ self.refresh_access_token()
145
+ return self.put(url,
146
+ headers=headers,
147
+ **kwargs)
148
+ if resp.status_code >= 400:
149
+ raise RuntimeError(resp.json()['message'] if resp.headers.get("Content-Type") == "application/json" else "Something went wrong.")
150
+ return resp
151
+
117
152
  def post(self, url,
118
153
  data=None,
119
154
  json=None,
@@ -140,18 +175,18 @@ class MostClient(object):
140
175
  return resp
141
176
 
142
177
  def upload_text(self, text: str) -> Text:
143
- 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",
144
179
  files={"text": text})
145
180
  return self.retort.load(resp.json(), Text)
146
181
 
147
182
  def upload_dialog(self, dialog: Dialog) -> DialogResult:
148
- 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",
149
184
  json={"dialog": dialog})
150
185
  return self.retort.load(resp.json(), DialogResult)
151
186
 
152
187
  def upload_audio(self, audio_path) -> Audio:
153
188
  with open(audio_path, 'rb') as f:
154
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
189
+ resp = self.post(f"/{self.client_id}/upload",
155
190
  files={"audio_file": f})
156
191
  return self.retort.load(resp.json(), Audio)
157
192
 
@@ -162,26 +197,26 @@ class MostClient(object):
162
197
  f.seek(0)
163
198
  if audio_name is None:
164
199
  audio_name = uuid.uuid4().hex + ".mp3"
165
- resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
200
+ resp = self.post(f"/{self.client_id}/upload",
166
201
  files={"audio_file": (audio_name, f, 'audio/mp3')})
167
202
  return self.retort.load(resp.json(), Audio)
168
203
 
169
204
  def upload_audio_url(self, audio_url) -> Audio:
170
- 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",
171
206
  json={"audio_url": audio_url})
172
207
  return self.retort.load(resp.json(), Audio)
173
208
 
174
209
  def list_audios(self,
175
210
  offset: int = 0,
176
211
  limit: int = 10) -> List[Audio]:
177
- 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}")
178
213
  audio_list = resp.json()
179
214
  return self.retort.load(audio_list, List[Audio])
180
215
 
181
216
  def list_texts(self,
182
217
  offset: int = 0,
183
218
  limit: int = 10) -> List[Text]:
184
- 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}")
185
220
  texts_list = resp.json()
186
221
  return self.retort.load(texts_list, List[Text])
187
222
 
@@ -189,7 +224,7 @@ class MostClient(object):
189
224
  if not is_valid_id(self.model_id):
190
225
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
191
226
 
192
- 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")
193
228
  return self.retort.load(resp.json(), Script)
194
229
 
195
230
  def get_score_modifier(self):
@@ -197,13 +232,13 @@ class MostClient(object):
197
232
  if not is_valid_id(self.model_id):
198
233
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
199
234
 
200
- 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")
201
236
  score_mapping = self.retort.load(resp.json(), List[ScriptScoreMapping])
202
237
  self.score_modifier = ScoreCalculation(score_mapping)
203
238
  return self.score_modifier
204
239
 
205
240
  def list_models(self):
206
- resp = self.get("https://api.the-most.ai/api/external/list_models")
241
+ resp = self.get("/list_models")
207
242
  return [self.with_model(model['model'])
208
243
  for model in resp.json()]
209
244
 
@@ -215,7 +250,7 @@ class MostClient(object):
215
250
  if not is_valid_id(audio_id):
216
251
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
217
252
 
218
- 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")
219
254
  result = self.retort.load(resp.json(), Result)
220
255
  if modify_scores:
221
256
  result = self.score_modifier.modify(result)
@@ -229,7 +264,7 @@ class MostClient(object):
229
264
  if not is_valid_id(text_id):
230
265
  raise RuntimeError("Please use valid text_id. [try text.id from list_texts()]")
231
266
 
232
- 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")
233
268
  result = self.retort.load(resp.json(), Result)
234
269
  if modify_scores:
235
270
  result = self.score_modifier.modify(result)
@@ -243,7 +278,7 @@ class MostClient(object):
243
278
  if not is_valid_id(audio_id):
244
279
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
245
280
 
246
- 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")
247
282
  result = self.retort.load(resp.json(), Result)
248
283
  if modify_scores:
249
284
  result = self.score_modifier.modify(result)
@@ -257,7 +292,7 @@ class MostClient(object):
257
292
  if not is_valid_id(text_id):
258
293
  raise RuntimeError("Please use valid text_id. [try audio.id from list_texts()]")
259
294
 
260
- 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")
261
296
  result = self.retort.load(resp.json(), Result)
262
297
  if modify_scores:
263
298
  result = self.score_modifier.modify(result)
@@ -270,7 +305,7 @@ class MostClient(object):
270
305
  if not is_valid_id(audio_id):
271
306
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
272
307
 
273
- 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")
274
309
  return self.retort.load(resp.json(), JobStatus)
275
310
 
276
311
  def fetch_results(self, audio_id,
@@ -281,7 +316,7 @@ class MostClient(object):
281
316
  if not is_valid_id(audio_id):
282
317
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
283
318
 
284
- 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")
285
320
  result = self.retort.load(resp.json(), Result)
286
321
  if modify_scores:
287
322
  result = self.score_modifier.modify(result)
@@ -294,7 +329,7 @@ class MostClient(object):
294
329
  if not is_valid_id(audio_id):
295
330
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
296
331
 
297
- 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")
298
333
  return self.retort.load(resp.json(), Result)
299
334
 
300
335
  def fetch_dialog(self, audio_id) -> DialogResult:
@@ -304,7 +339,18 @@ class MostClient(object):
304
339
  if not is_valid_id(audio_id):
305
340
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
306
341
 
307
- 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")
343
+ return self.retort.load(resp.json(), DialogResult)
344
+
345
+ def update_dialog(self, audio_id, dialog: Dialog) -> DialogResult:
346
+ if not is_valid_id(self.model_id):
347
+ raise RuntimeError("Please choose valid model to apply. [try list_models()]")
348
+
349
+ if not is_valid_id(audio_id):
350
+ raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
351
+
352
+ resp = self.put(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog",
353
+ json={"dialog": dialog.to_dict()})
308
354
  return self.retort.load(resp.json(), DialogResult)
309
355
 
310
356
  def export(self, audio_ids: List[str],
@@ -316,7 +362,7 @@ class MostClient(object):
316
362
  if not is_valid_id(self.model_id):
317
363
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
318
364
 
319
- 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",
320
366
  params={'audio_ids': ','.join(audio_ids),
321
367
  'aggregated_by': aggregated_by,
322
368
  'aggregation_title': aggregation_title})
@@ -328,7 +374,7 @@ class MostClient(object):
328
374
  if not is_valid_id(audio_id):
329
375
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
330
376
 
331
- 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",
332
378
  json={
333
379
  "data": data,
334
380
  })
@@ -338,7 +384,7 @@ class MostClient(object):
338
384
  if not is_valid_id(audio_id):
339
385
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
340
386
 
341
- 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")
342
388
  return self.retort.load(resp.json(), StoredAudioData)
343
389
 
344
390
  def __call__(self, audio_path: Path,
@@ -366,7 +412,7 @@ class MostClient(object):
366
412
  return audio
367
413
 
368
414
  def index_audio(self, audio_id: str) -> None:
369
- 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")
370
416
  if resp.status_code >= 400:
371
417
  raise RuntimeError("Audio can't be indexed")
372
418
  return None
@@ -375,7 +421,7 @@ class MostClient(object):
375
421
  query: str,
376
422
  filter: SearchParams,
377
423
  limit: int = 10) -> List[Audio]:
378
- 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",
379
425
  json={
380
426
  "query": query,
381
427
  "filter": filter.to_dict(),
most/async_api.py CHANGED
@@ -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,28 @@ class AsyncMostClient(object):
117
134
  return await self.get(url,
118
135
  headers=headers,
119
136
  **kwargs)
137
+
138
+ if resp.headers.get("Content-Type") == "application/json":
139
+ raise RuntimeError(resp.json()['message'])
140
+ resp.raise_for_status()
141
+ return resp
142
+
143
+ async def put(self, url, **kwargs):
144
+ if self.access_token is None:
145
+ await self.refresh_access_token()
146
+ headers = kwargs.pop("headers", {})
147
+ headers.update({"Authorization": "Bearer %s" % self.access_token})
148
+ resp = await self.session.put(url,
149
+ headers=headers,
150
+ timeout=None,
151
+ **kwargs)
152
+ if resp.status_code == 401:
153
+ await self.refresh_access_token()
154
+ return await self.put(url,
155
+ headers=headers,
156
+ **kwargs)
120
157
  if resp.status_code >= 400:
121
- raise RuntimeError(resp.json()['message'] if resp.headers.get(
122
- "Content-Type") == "application/json" else "Something went wrong.")
158
+ raise RuntimeError(resp.json()['message'] if resp.headers.get("Content-Type") == "application/json" else "Something went wrong.")
123
159
  return resp
124
160
 
125
161
  async def post(self, url,
@@ -150,7 +186,7 @@ class AsyncMostClient(object):
150
186
 
151
187
  async def upload_audio(self, audio_path) -> Audio:
152
188
  with open(audio_path, mode='rb') as f:
153
- 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",
154
190
  files={"audio_file": f})
155
191
  return self.retort.load(resp.json(), Audio)
156
192
 
@@ -161,36 +197,36 @@ class AsyncMostClient(object):
161
197
  f.seek(0)
162
198
  if audio_name is None:
163
199
  audio_name = uuid.uuid4().hex + ".mp3"
164
- 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",
165
201
  files={"audio_file": (audio_name, f, 'audio/mp3')})
166
202
  return self.retort.load(resp.json(), Audio)
167
203
 
168
204
  async def upload_text(self, text: str) -> Text:
169
- 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",
170
206
  json={"text": text})
171
207
  return self.retort.load(resp.json(), Text)
172
208
 
173
209
  async def upload_dialog(self, dialog: Dialog) -> DialogResult:
174
- 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",
175
211
  json={"dialog": dialog})
176
212
  return self.retort.load(resp.json(), DialogResult)
177
213
 
178
214
  async def upload_audio_url(self, audio_url) -> Audio:
179
- 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",
180
216
  json={"audio_url": audio_url})
181
217
  return self.retort.load(resp.json(), Audio)
182
218
 
183
219
  async def list_audios(self,
184
220
  offset: int = 0,
185
221
  limit: int = 10) -> List[Audio]:
186
- 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}")
187
223
  audio_list = resp.json()
188
224
  return self.retort.load(audio_list, List[Audio])
189
225
 
190
226
  async def list_texts(self,
191
227
  offset: int = 0,
192
228
  limit: int = 10) -> List[Text]:
193
- 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}")
194
230
  texts_list = resp.json()
195
231
  return self.retort.load(texts_list, List[Text])
196
232
 
@@ -198,7 +234,7 @@ class AsyncMostClient(object):
198
234
  if not is_valid_id(self.model_id):
199
235
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
200
236
 
201
- 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")
202
238
  return self.retort.load(resp.json(), Script)
203
239
 
204
240
  async def get_score_modifier(self):
@@ -206,13 +242,13 @@ class AsyncMostClient(object):
206
242
  if not is_valid_id(self.model_id):
207
243
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
208
244
 
209
- 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")
210
246
  score_mapping = self.retort.load(resp.json(), List[ScriptScoreMapping])
211
247
  self.score_modifier = ScoreCalculation(score_mapping)
212
248
  return self.score_modifier
213
249
 
214
250
  async def list_models(self):
215
- resp = await self.get("https://api.the-most.ai/api/external/list_models")
251
+ resp = await self.get("/list_models")
216
252
  return [self.with_model(model['model'])
217
253
  for model in resp.json()]
218
254
 
@@ -224,7 +260,7 @@ class AsyncMostClient(object):
224
260
  if not is_valid_id(audio_id):
225
261
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
226
262
 
227
- 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")
228
264
  result = self.retort.load(resp.json(), Result)
229
265
  if modify_scores:
230
266
  result = self.score_modifier.modify(result)
@@ -238,7 +274,7 @@ class AsyncMostClient(object):
238
274
  if not is_valid_id(text_id):
239
275
  raise RuntimeError("Please use valid text_id. [try text.id from list_texts()]")
240
276
 
241
- 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")
242
278
  result = self.retort.load(resp.json(), Result)
243
279
  if modify_scores:
244
280
  result = self.score_modifier.modify(result)
@@ -252,7 +288,7 @@ class AsyncMostClient(object):
252
288
  if not is_valid_id(audio_id):
253
289
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
254
290
 
255
- 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")
256
292
  result = self.retort.load(resp.json(), Result)
257
293
  if modify_scores:
258
294
  result = self.score_modifier.modify(result)
@@ -266,7 +302,7 @@ class AsyncMostClient(object):
266
302
  if not is_valid_id(text_id):
267
303
  raise RuntimeError("Please use valid text_id. [try audio.id from list_texts()]")
268
304
 
269
- 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")
270
306
  result = self.retort.load(resp.json(), Result)
271
307
  if modify_scores:
272
308
  result = self.score_modifier.modify(result)
@@ -279,7 +315,7 @@ class AsyncMostClient(object):
279
315
  if not is_valid_id(audio_id):
280
316
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
281
317
 
282
- 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")
283
319
  return self.retort.load(resp.json(), JobStatus)
284
320
 
285
321
  async def fetch_results(self, audio_id,
@@ -290,7 +326,7 @@ class AsyncMostClient(object):
290
326
  if not is_valid_id(audio_id):
291
327
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
292
328
 
293
- 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")
294
330
  result = self.retort.load(resp.json(), Result)
295
331
  if modify_scores:
296
332
  result = self.score_modifier.modify(result)
@@ -303,7 +339,7 @@ class AsyncMostClient(object):
303
339
  if not is_valid_id(audio_id):
304
340
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
305
341
 
306
- 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")
307
343
  return self.retort.load(resp.json(), Result)
308
344
 
309
345
  async def fetch_dialog(self, audio_id) -> DialogResult:
@@ -313,7 +349,18 @@ class AsyncMostClient(object):
313
349
  if not is_valid_id(audio_id):
314
350
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
315
351
 
316
- 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")
353
+ return self.retort.load(resp.json(), DialogResult)
354
+
355
+ async def update_dialog(self, audio_id, dialog: Dialog) -> DialogResult:
356
+ if not is_valid_id(self.model_id):
357
+ raise RuntimeError("Please choose valid model to apply. [try list_models()]")
358
+
359
+ if not is_valid_id(audio_id):
360
+ raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
361
+
362
+ resp = await self.put(f"/{self.client_id}/audio/{audio_id}/model/{self.model_id}/dialog",
363
+ json={"dialog": dialog.to_dict()})
317
364
  return self.retort.load(resp.json(), DialogResult)
318
365
 
319
366
  async def export(self, audio_ids: List[str],
@@ -325,7 +372,7 @@ class AsyncMostClient(object):
325
372
  if not is_valid_id(self.model_id):
326
373
  raise RuntimeError("Please choose valid model to apply. [try list_models()]")
327
374
 
328
- 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",
329
376
  params={'audio_ids': ','.join(audio_ids),
330
377
  "aggregated_by": aggregated_by,
331
378
  "aggregation_title": aggregation_title})
@@ -334,7 +381,7 @@ class AsyncMostClient(object):
334
381
  async def store_info(self,
335
382
  audio_id: str,
336
383
  data: Dict[str, str]):
337
- 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",
338
385
  json={
339
386
  "data": data,
340
387
  })
@@ -343,7 +390,7 @@ class AsyncMostClient(object):
343
390
  async def fetch_info(self, audio_id: str) -> Dict[str, str]:
344
391
  if not is_valid_id(audio_id):
345
392
  raise RuntimeError("Please use valid audio_id. [try audio.id from list_audios()]")
346
- 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")
347
394
  return self.retort.load(resp.json(), StoredAudioData)
348
395
 
349
396
  async def __call__(self, audio_path: Path,
@@ -371,7 +418,7 @@ class AsyncMostClient(object):
371
418
  return audio
372
419
 
373
420
  async def index_audio(self, audio_id: str) -> None:
374
- 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")
375
422
  if resp.status_code >= 400:
376
423
  raise RuntimeError("Audio can't be indexed")
377
424
  return None
@@ -380,7 +427,7 @@ class AsyncMostClient(object):
380
427
  query: str,
381
428
  filter: SearchParams,
382
429
  limit: int = 10) -> List[Audio]:
383
- 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",
384
431
  json={
385
432
  "query": query,
386
433
  "filter": filter.to_dict(),
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: most-client
3
- Version: 1.0.23
3
+ Version: 1.0.25
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,11 @@
1
+ most/__init__.py,sha256=62uFFeM_1VVR83K3bTYWK3PEoqnmFCy9aWYerQ6U4Ds,67
2
+ most/_constrants.py,sha256=SlHKcBoXwe_sPzk8tdbb7lqhQz-Bfo__FhSoeFWodZE,217
3
+ most/api.py,sha256=t4RqDp-dJUfMayv_0FtBD8yKaGVZpnixCc7D7-UFSKY,17658
4
+ most/async_api.py,sha256=dBZIrzyPfstFMysxVNfrQdd4WDabBIsWMu2ogLsnPb4,18676
5
+ most/score_calculation.py,sha256=1XU1LfIH5LSCwAbAaKkr-EjH5qOTXrJKOUvhCCawka4,1054
6
+ most/types.py,sha256=Qgyv261J8b1cfbmeITz1C9QgkoCMGQQd_L4t4M3dd6M,3603
7
+ most_client-1.0.25.dist-info/METADATA,sha256=RmwkJHqjnOd8hyYX4Za8puXebVgR0Ehq1wo0ODUI2m8,1027
8
+ most_client-1.0.25.dist-info/WHEEL,sha256=DK49LOLCYiurdXXOXwGJm6U4DkHkg4lcxjhqwRa0CP4,91
9
+ most_client-1.0.25.dist-info/top_level.txt,sha256=2g5fk02LKkM1hV3pVVti_LQ60TToLBcR2zQ3JEKGVk8,5
10
+ most_client-1.0.25.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
11
+ most_client-1.0.25.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (78.0.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,10 +0,0 @@
1
- most/__init__.py,sha256=62uFFeM_1VVR83K3bTYWK3PEoqnmFCy9aWYerQ6U4Ds,67
2
- most/api.py,sha256=Fp9MeADwnjwf8_BYbleIKB0gFfsK3GNsNZDHRnqgOms,16256
3
- most/async_api.py,sha256=7kFpsU6yCAeEjOroXL-t_m1RIOwLqmMyPq9tPhoUIjw,17243
4
- most/score_calculation.py,sha256=1XU1LfIH5LSCwAbAaKkr-EjH5qOTXrJKOUvhCCawka4,1054
5
- most/types.py,sha256=Qgyv261J8b1cfbmeITz1C9QgkoCMGQQd_L4t4M3dd6M,3603
6
- most_client-1.0.23.dist-info/METADATA,sha256=pBQkXH2Ogl8Ot9SWv8gLnmB8r7j1t74eY3X6oCoC63M,1027
7
- most_client-1.0.23.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
8
- most_client-1.0.23.dist-info/top_level.txt,sha256=2g5fk02LKkM1hV3pVVti_LQ60TToLBcR2zQ3JEKGVk8,5
9
- most_client-1.0.23.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
10
- most_client-1.0.23.dist-info/RECORD,,