most-client 1.0.15__py3-none-any.whl → 1.0.17__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 +44 -3
- most/async_api.py +47 -6
- most/types.py +3 -2
- {most_client-1.0.15.dist-info → most_client-1.0.17.dist-info}/METADATA +2 -1
- most_client-1.0.17.dist-info/RECORD +9 -0
- {most_client-1.0.15.dist-info → most_client-1.0.17.dist-info}/WHEEL +1 -1
- most_client-1.0.15.dist-info/RECORD +0 -9
- {most_client-1.0.15.dist-info → most_client-1.0.17.dist-info}/top_level.txt +0 -0
- {most_client-1.0.15.dist-info → most_client-1.0.17.dist-info}/zip-safe +0 -0
most/api.py
CHANGED
@@ -1,9 +1,24 @@
|
|
1
|
-
|
1
|
+
import io
|
2
|
+
import os
|
3
|
+
import uuid
|
4
|
+
from pathlib import Path
|
5
|
+
from typing import Dict, List, Optional
|
6
|
+
|
2
7
|
import json5
|
3
8
|
import requests
|
4
9
|
from adaptix import Retort
|
5
|
-
from
|
6
|
-
|
10
|
+
from pydub import AudioSegment
|
11
|
+
|
12
|
+
from most.types import (
|
13
|
+
Audio,
|
14
|
+
DialogResult,
|
15
|
+
JobStatus,
|
16
|
+
Result,
|
17
|
+
Script,
|
18
|
+
StoredAudioData,
|
19
|
+
Text,
|
20
|
+
is_valid_id,
|
21
|
+
)
|
7
22
|
|
8
23
|
|
9
24
|
class MostClient(object):
|
@@ -131,6 +146,17 @@ class MostClient(object):
|
|
131
146
|
files={"audio_file": f})
|
132
147
|
return self.retort.load(resp.json(), Audio)
|
133
148
|
|
149
|
+
def upload_audio_segment(self, audio: AudioSegment,
|
150
|
+
audio_name: Optional[str] = None) -> Audio:
|
151
|
+
f = io.BytesIO()
|
152
|
+
audio.export(f, format="mp3")
|
153
|
+
f.seek(0)
|
154
|
+
if audio_name is None:
|
155
|
+
audio_name = uuid.uuid4().hex + ".mp3"
|
156
|
+
resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
|
157
|
+
files={"audio_file": (audio_name, f, 'audio/mp3')})
|
158
|
+
return self.retort.load(resp.json(), Audio)
|
159
|
+
|
134
160
|
def upload_audio_url(self, audio_url) -> Audio:
|
135
161
|
resp = self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_url",
|
136
162
|
json={"audio_url": audio_url})
|
@@ -248,3 +274,18 @@ class MostClient(object):
|
|
248
274
|
|
249
275
|
def __repr__(self):
|
250
276
|
return "<MostClient(model_id='%s')>" % (self.model_id, )
|
277
|
+
|
278
|
+
def get_audio_segment_by_url(self, audio_url,
|
279
|
+
format=None):
|
280
|
+
if format is None:
|
281
|
+
format = os.path.splitext(audio_url)[1]
|
282
|
+
format = format.strip().lower()
|
283
|
+
|
284
|
+
resp = self.session.get(audio_url,
|
285
|
+
timeout=None)
|
286
|
+
if resp.status_code >= 400:
|
287
|
+
raise RuntimeError("Audio url is not accessable")
|
288
|
+
|
289
|
+
audio = AudioSegment.from_file(io.BytesIO(resp.content),
|
290
|
+
format=format)
|
291
|
+
return audio
|
most/async_api.py
CHANGED
@@ -1,9 +1,24 @@
|
|
1
|
-
|
2
|
-
import
|
3
|
-
|
4
|
-
from most.types import Audio, Result, Script, JobStatus, Text, StoredAudioData, is_valid_id, DialogResult
|
1
|
+
import io
|
2
|
+
import os
|
3
|
+
import uuid
|
5
4
|
from pathlib import Path
|
5
|
+
from typing import Dict, List, Optional
|
6
|
+
|
6
7
|
import httpx
|
8
|
+
import json5
|
9
|
+
from adaptix import Retort
|
10
|
+
from pydub import AudioSegment
|
11
|
+
|
12
|
+
from most.types import (
|
13
|
+
Audio,
|
14
|
+
DialogResult,
|
15
|
+
JobStatus,
|
16
|
+
Result,
|
17
|
+
Script,
|
18
|
+
StoredAudioData,
|
19
|
+
Text,
|
20
|
+
is_valid_id,
|
21
|
+
)
|
7
22
|
|
8
23
|
|
9
24
|
class AsyncMostClient(object):
|
@@ -135,6 +150,17 @@ class AsyncMostClient(object):
|
|
135
150
|
files={"audio_file": f})
|
136
151
|
return self.retort.load(resp.json(), Audio)
|
137
152
|
|
153
|
+
async def upload_audio_segment(self, audio: AudioSegment,
|
154
|
+
audio_name: Optional[str] = None) -> Audio:
|
155
|
+
f = io.BytesIO()
|
156
|
+
audio.export(f, format="mp3")
|
157
|
+
f.seek(0)
|
158
|
+
if audio_name is None:
|
159
|
+
audio_name = uuid.uuid4().hex + ".mp3"
|
160
|
+
resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload",
|
161
|
+
files={"audio_file": (audio_name, f, 'audio/mp3')})
|
162
|
+
return self.retort.load(resp.json(), Audio)
|
163
|
+
|
138
164
|
async def upload_text(self, text: str) -> Text:
|
139
165
|
resp = await self.post(f"https://api.the-most.ai/api/external/{self.client_id}/upload_text",
|
140
166
|
json={"text": text})
|
@@ -146,8 +172,8 @@ class AsyncMostClient(object):
|
|
146
172
|
return self.retort.load(resp.json(), Audio)
|
147
173
|
|
148
174
|
async def list_audios(self,
|
149
|
-
|
150
|
-
|
175
|
+
offset: int = 0,
|
176
|
+
limit: int = 10) -> List[Audio]:
|
151
177
|
resp = await self.get(f"https://api.the-most.ai/api/external/{self.client_id}/list?offset={offset}&limit={limit}")
|
152
178
|
audio_list = resp.json()
|
153
179
|
return self.retort.load(audio_list, List[Audio])
|
@@ -253,3 +279,18 @@ class AsyncMostClient(object):
|
|
253
279
|
|
254
280
|
def __repr__(self):
|
255
281
|
return "<AsyncMostClient(model_id='%s')>" % (self.model_id, )
|
282
|
+
|
283
|
+
async def get_audio_segment_by_url(self, audio_url,
|
284
|
+
format=None):
|
285
|
+
if format is None:
|
286
|
+
format = os.path.splitext(audio_url)[1]
|
287
|
+
format = format.strip().lower()
|
288
|
+
|
289
|
+
resp = await self.session.get(audio_url,
|
290
|
+
timeout=None)
|
291
|
+
if resp.status_code >= 400:
|
292
|
+
raise RuntimeError("Audio url is not accessable")
|
293
|
+
|
294
|
+
audio = AudioSegment.from_file(io.BytesIO(resp.content),
|
295
|
+
format=format)
|
296
|
+
return audio
|
most/types.py
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
import re
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from
|
4
|
-
|
3
|
+
from typing import Dict, List, Literal, Optional
|
4
|
+
|
5
|
+
from dataclasses_json import DataClassJsonMixin, dataclass_json
|
5
6
|
|
6
7
|
|
7
8
|
@dataclass_json
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: most-client
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.17
|
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
|
@@ -26,6 +26,7 @@ Requires-Dist: pytest
|
|
26
26
|
Requires-Dist: tox
|
27
27
|
Requires-Dist: twine
|
28
28
|
Requires-Dist: httpx
|
29
|
+
Requires-Dist: pydub
|
29
30
|
Dynamic: author
|
30
31
|
Dynamic: author-email
|
31
32
|
Dynamic: classifier
|
@@ -0,0 +1,9 @@
|
|
1
|
+
most/__init__.py,sha256=62uFFeM_1VVR83K3bTYWK3PEoqnmFCy9aWYerQ6U4Ds,67
|
2
|
+
most/api.py,sha256=yRGL7lZ5qBWSdaclz-t7fZAJ_k1zu0YbHptUX9uaVdM,11772
|
3
|
+
most/async_api.py,sha256=xRZPsb64i1d_U0PWIJKC_7fPMjZRPfamvvtSMyFlA5E,12505
|
4
|
+
most/types.py,sha256=apUz6FHFAHWJNVvRh57wVQk5DFw2XKnLLhkAyWgtvfw,2825
|
5
|
+
most_client-1.0.17.dist-info/METADATA,sha256=51ED0zyrdWP5OqTlY31mCcXRpBmk39y1BXNWJYx2BMY,1027
|
6
|
+
most_client-1.0.17.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
7
|
+
most_client-1.0.17.dist-info/top_level.txt,sha256=2g5fk02LKkM1hV3pVVti_LQ60TToLBcR2zQ3JEKGVk8,5
|
8
|
+
most_client-1.0.17.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
9
|
+
most_client-1.0.17.dist-info/RECORD,,
|
@@ -1,9 +0,0 @@
|
|
1
|
-
most/__init__.py,sha256=62uFFeM_1VVR83K3bTYWK3PEoqnmFCy9aWYerQ6U4Ds,67
|
2
|
-
most/api.py,sha256=xFuvjL45gNHDJyPd9_QG3u7uv75CMi3EWX5m47odd7E,10598
|
3
|
-
most/async_api.py,sha256=eB7bF5a_4hDBCn64VXqXIcu0GIlzYdEIkqihh287qEo,11271
|
4
|
-
most/types.py,sha256=tZFuRKx6hxnOvpLw5pPe7p3H1mW_cxFkTc2fJTKxHiI,2824
|
5
|
-
most_client-1.0.15.dist-info/METADATA,sha256=-PTbL9VVxEatBuS1VB_icOQjvEZjIjg1XAWxSo8leFw,1006
|
6
|
-
most_client-1.0.15.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
7
|
-
most_client-1.0.15.dist-info/top_level.txt,sha256=2g5fk02LKkM1hV3pVVti_LQ60TToLBcR2zQ3JEKGVk8,5
|
8
|
-
most_client-1.0.15.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
9
|
-
most_client-1.0.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|