daihui.zhang
commited on
Commit
·
498afcd
1
Parent(s):
81d85e2
update config of language
Browse filesFormer-commit-id: 6c237bee605ec8fe2e28517a2d7e0a385747ab5b
- pyproject.toml +2 -0
- requirements.txt +21 -7
- run_server.py +1 -1
- transcribe/{translate.py → translator.py} +5 -4
- transcribe/whisper_llm_serve.py +38 -18
- uv.lock +56 -0
pyproject.toml
CHANGED
@@ -7,9 +7,11 @@ requires-python = ">=3.11"
|
|
7 |
dependencies = [
|
8 |
"av>=14.2.0",
|
9 |
"librosa>=0.11.0",
|
|
|
10 |
"numpy>=2.1.3",
|
11 |
"onnxruntime>=1.21.0",
|
12 |
"pyaudio>=0.2.14",
|
|
|
13 |
"setuptools>=78.1.0",
|
14 |
"soundfile>=0.13.1",
|
15 |
"torch>=2.6.0",
|
|
|
7 |
dependencies = [
|
8 |
"av>=14.2.0",
|
9 |
"librosa>=0.11.0",
|
10 |
+
"llama-cpp-python>=0.3.8",
|
11 |
"numpy>=2.1.3",
|
12 |
"onnxruntime>=1.21.0",
|
13 |
"pyaudio>=0.2.14",
|
14 |
+
"pywhispercpp>=1.3.0",
|
15 |
"setuptools>=78.1.0",
|
16 |
"soundfile>=0.13.1",
|
17 |
"torch>=2.6.0",
|
requirements.txt
CHANGED
@@ -14,6 +14,8 @@ coloredlogs==15.0.1
|
|
14 |
# via onnxruntime
|
15 |
decorator==5.2.1
|
16 |
# via librosa
|
|
|
|
|
17 |
filelock==3.18.0
|
18 |
# via torch
|
19 |
flatbuffers==25.2.10
|
@@ -25,7 +27,9 @@ humanfriendly==10.0
|
|
25 |
idna==3.10
|
26 |
# via requests
|
27 |
jinja2==3.1.6
|
28 |
-
# via
|
|
|
|
|
29 |
joblib==1.4.2
|
30 |
# via
|
31 |
# librosa
|
@@ -34,6 +38,8 @@ lazy-loader==0.4
|
|
34 |
# via librosa
|
35 |
librosa==0.11.0
|
36 |
# via trans (pyproject.toml)
|
|
|
|
|
37 |
llvmlite==0.44.0
|
38 |
# via numba
|
39 |
markupsafe==3.0.2
|
@@ -50,8 +56,10 @@ numpy==2.1.3
|
|
50 |
# via
|
51 |
# trans (pyproject.toml)
|
52 |
# librosa
|
|
|
53 |
# numba
|
54 |
# onnxruntime
|
|
|
55 |
# scikit-learn
|
56 |
# scipy
|
57 |
# soundfile
|
@@ -64,7 +72,9 @@ packaging==24.2
|
|
64 |
# onnxruntime
|
65 |
# pooch
|
66 |
platformdirs==4.3.7
|
67 |
-
# via
|
|
|
|
|
68 |
pooch==1.8.2
|
69 |
# via librosa
|
70 |
protobuf==6.30.2
|
@@ -73,8 +83,12 @@ pyaudio==0.2.14
|
|
73 |
# via trans (pyproject.toml)
|
74 |
pycparser==2.22
|
75 |
# via cffi
|
|
|
|
|
76 |
requests==2.32.3
|
77 |
-
# via
|
|
|
|
|
78 |
scikit-learn==1.6.1
|
79 |
# via librosa
|
80 |
scipy==1.15.2
|
@@ -98,10 +112,13 @@ threadpoolctl==3.6.0
|
|
98 |
torch==2.6.0
|
99 |
# via trans (pyproject.toml)
|
100 |
tqdm==4.67.1
|
101 |
-
# via
|
|
|
|
|
102 |
typing-extensions==4.13.1
|
103 |
# via
|
104 |
# librosa
|
|
|
105 |
# torch
|
106 |
urllib3==2.3.0
|
107 |
# via requests
|
@@ -109,6 +126,3 @@ websocket-client==1.8.0
|
|
109 |
# via trans (pyproject.toml)
|
110 |
websockets==15.0.1
|
111 |
# via trans (pyproject.toml)
|
112 |
-
|
113 |
-
llama-cpp-python
|
114 |
-
pywhispercpp
|
|
|
14 |
# via onnxruntime
|
15 |
decorator==5.2.1
|
16 |
# via librosa
|
17 |
+
diskcache==5.6.3
|
18 |
+
# via llama-cpp-python
|
19 |
filelock==3.18.0
|
20 |
# via torch
|
21 |
flatbuffers==25.2.10
|
|
|
27 |
idna==3.10
|
28 |
# via requests
|
29 |
jinja2==3.1.6
|
30 |
+
# via
|
31 |
+
# llama-cpp-python
|
32 |
+
# torch
|
33 |
joblib==1.4.2
|
34 |
# via
|
35 |
# librosa
|
|
|
38 |
# via librosa
|
39 |
librosa==0.11.0
|
40 |
# via trans (pyproject.toml)
|
41 |
+
llama-cpp-python==0.3.8
|
42 |
+
# via trans (pyproject.toml)
|
43 |
llvmlite==0.44.0
|
44 |
# via numba
|
45 |
markupsafe==3.0.2
|
|
|
56 |
# via
|
57 |
# trans (pyproject.toml)
|
58 |
# librosa
|
59 |
+
# llama-cpp-python
|
60 |
# numba
|
61 |
# onnxruntime
|
62 |
+
# pywhispercpp
|
63 |
# scikit-learn
|
64 |
# scipy
|
65 |
# soundfile
|
|
|
72 |
# onnxruntime
|
73 |
# pooch
|
74 |
platformdirs==4.3.7
|
75 |
+
# via
|
76 |
+
# pooch
|
77 |
+
# pywhispercpp
|
78 |
pooch==1.8.2
|
79 |
# via librosa
|
80 |
protobuf==6.30.2
|
|
|
83 |
# via trans (pyproject.toml)
|
84 |
pycparser==2.22
|
85 |
# via cffi
|
86 |
+
pywhispercpp==1.3.0
|
87 |
+
# via trans (pyproject.toml)
|
88 |
requests==2.32.3
|
89 |
+
# via
|
90 |
+
# pooch
|
91 |
+
# pywhispercpp
|
92 |
scikit-learn==1.6.1
|
93 |
# via librosa
|
94 |
scipy==1.15.2
|
|
|
112 |
torch==2.6.0
|
113 |
# via trans (pyproject.toml)
|
114 |
tqdm==4.67.1
|
115 |
+
# via
|
116 |
+
# trans (pyproject.toml)
|
117 |
+
# pywhispercpp
|
118 |
typing-extensions==4.13.1
|
119 |
# via
|
120 |
# librosa
|
121 |
+
# llama-cpp-python
|
122 |
# torch
|
123 |
urllib3==2.3.0
|
124 |
# via requests
|
|
|
126 |
# via trans (pyproject.toml)
|
127 |
websockets==15.0.1
|
128 |
# via trans (pyproject.toml)
|
|
|
|
|
|
run_server.py
CHANGED
@@ -22,7 +22,7 @@ if __name__ == "__main__":
|
|
22 |
if "OMP_NUM_THREADS" not in os.environ:
|
23 |
os.environ["OMP_NUM_THREADS"] = str(args.omp_num_threads)
|
24 |
|
25 |
-
from transcribe.
|
26 |
server = TranscriptionServer()
|
27 |
server.run(
|
28 |
"0.0.0.0",
|
|
|
22 |
if "OMP_NUM_THREADS" not in os.environ:
|
23 |
os.environ["OMP_NUM_THREADS"] = str(args.omp_num_threads)
|
24 |
|
25 |
+
from transcribe.transcription import TranscriptionServer
|
26 |
server = TranscriptionServer()
|
27 |
server.run(
|
28 |
"0.0.0.0",
|
transcribe/{translate.py → translator.py}
RENAMED
@@ -11,7 +11,8 @@ class QwenTranslator:
|
|
11 |
# n_gpu_layers=-1, # Uncomment to use GPU acceleration
|
12 |
# seed=1337, # Uncomment to set a specific seed
|
13 |
# n_ctx=2048, # Uncomment to increase the context window
|
14 |
-
chat_format="chatml"
|
|
|
15 |
)
|
16 |
self.sys_prompt = system_prompt
|
17 |
|
@@ -27,10 +28,10 @@ class QwenTranslator:
|
|
27 |
message = self.to_message(prompt, src_lang, dst_lang)
|
28 |
start_time = time.monotonic()
|
29 |
output = self.llm.create_chat_completion(messages=message, temperature=0.9)
|
30 |
-
logger.info(f"LLM translate cose: {time.monotonic() - start_time}s.")
|
31 |
-
return output['choices'][0]['content']
|
32 |
|
33 |
-
def __call__(self, prompt, max_tokens=
|
34 |
return self.llm(
|
35 |
prompt,
|
36 |
*args,
|
|
|
11 |
# n_gpu_layers=-1, # Uncomment to use GPU acceleration
|
12 |
# seed=1337, # Uncomment to set a specific seed
|
13 |
# n_ctx=2048, # Uncomment to increase the context window
|
14 |
+
chat_format="chatml",
|
15 |
+
verbose=False
|
16 |
)
|
17 |
self.sys_prompt = system_prompt
|
18 |
|
|
|
28 |
message = self.to_message(prompt, src_lang, dst_lang)
|
29 |
start_time = time.monotonic()
|
30 |
output = self.llm.create_chat_completion(messages=message, temperature=0.9)
|
31 |
+
logger.info(f"LLM translate cose: {time.monotonic() - start_time:.2f}s.")
|
32 |
+
return output['choices'][0]['message']['content']
|
33 |
|
34 |
+
def __call__(self, prompt, max_tokens=512,*args, **kwargs):
|
35 |
return self.llm(
|
36 |
prompt,
|
37 |
*args,
|
transcribe/whisper_llm_serve.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
|
2 |
-
|
3 |
-
from pywhispercpp.model import Model
|
4 |
import soundfile
|
5 |
from concurrent.futures import ProcessPoolExecutor as Pool
|
6 |
import numpy as np
|
@@ -12,7 +11,11 @@ import time
|
|
12 |
import json
|
13 |
import threading
|
14 |
|
15 |
-
|
|
|
|
|
|
|
|
|
16 |
|
17 |
|
18 |
class TripleTextBuffer:
|
@@ -102,13 +105,13 @@ class SegmentManager:
|
|
102 |
|
103 |
|
104 |
class PywhisperInference:
|
105 |
-
|
106 |
-
|
107 |
|
108 |
@classmethod
|
109 |
def initializer(cls, warmup=True):
|
110 |
models_dir = config.MODEL_DIR.as_posix()
|
111 |
-
cls.
|
112 |
model=config.WHISPER_MODEL,
|
113 |
models_dir=models_dir,
|
114 |
print_realtime=False,
|
@@ -117,12 +120,15 @@ class PywhisperInference:
|
|
117 |
)
|
118 |
if warmup:
|
119 |
cls.warmup()
|
|
|
|
|
|
|
120 |
|
121 |
@classmethod
|
122 |
def warmup(cls, warmup_steps=1):
|
123 |
mel, _, = soundfile.read("assets/jfk.flac")
|
124 |
for _ in range(warmup_steps):
|
125 |
-
cls.
|
126 |
|
127 |
@staticmethod
|
128 |
def config_language(language):
|
@@ -136,7 +142,7 @@ class PywhisperInference:
|
|
136 |
def inference(cls, audio_buffer, language):
|
137 |
max_len, prompt = cls.config_language(language)
|
138 |
audio_buffer = np.frombuffer(audio_buffer, dtype=np.float32)
|
139 |
-
return cls.
|
140 |
audio_buffer,
|
141 |
initial_prompt=prompt,
|
142 |
language=language,
|
@@ -144,13 +150,18 @@ class PywhisperInference:
|
|
144 |
max_len=max_len
|
145 |
)
|
146 |
|
|
|
|
|
|
|
|
|
147 |
|
148 |
class PyWhiperCppServe(ServeClientBase):
|
149 |
|
150 |
|
151 |
-
def __init__(self, websocket, language=None, client_uid=None,):
|
152 |
super().__init__(client_uid, websocket)
|
153 |
self.language = language
|
|
|
154 |
# 设置观察字符串 对比上下次的文字来判断字符串的输出是否固定
|
155 |
self._text_buffer = TripleTextBuffer()
|
156 |
# 存储转录数据
|
@@ -162,8 +173,9 @@ class PyWhiperCppServe(ServeClientBase):
|
|
162 |
self._pool = Pool(
|
163 |
max_workers=1, initializer=PywhisperInference.initializer)
|
164 |
|
165 |
-
logger.info('Create a
|
166 |
self.trans_thread = threading.Thread(target=self.speech_to_text)
|
|
|
167 |
self.trans_thread.start()
|
168 |
|
169 |
self.websocket.send(json.dumps({
|
@@ -191,9 +203,18 @@ class PyWhiperCppServe(ServeClientBase):
|
|
191 |
Args:
|
192 |
audio_buffer (np.array): The audio chunk to transcribe.
|
193 |
"""
|
194 |
-
|
195 |
PywhisperInference.inference, audio_buffer.tobytes(), self.language)
|
196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
|
198 |
|
199 |
|
@@ -264,7 +285,8 @@ class PyWhiperCppServe(ServeClientBase):
|
|
264 |
except Exception as e:
|
265 |
logger.error(f"[ERROR]: {e}")
|
266 |
else:
|
267 |
-
self.handle_transcription_output(segments, audio_buffer)
|
|
|
268 |
|
269 |
|
270 |
|
@@ -283,10 +305,8 @@ class PyWhiperCppServe(ServeClientBase):
|
|
283 |
if is_end_sentence and last_cut_index:
|
284 |
message = self._segment_manager.segment
|
285 |
seg_id = self._segment_manager.get_seg_id() - 1
|
286 |
-
|
287 |
-
|
288 |
-
print(seg_id, message,)
|
289 |
-
print(seg_id + 1, self._segment_manager.string,)
|
290 |
|
291 |
else:
|
292 |
seg_id = self._segment_manager.get_seg_id()
|
@@ -294,7 +314,7 @@ class PyWhiperCppServe(ServeClientBase):
|
|
294 |
# print(self._segment_manager.__dict__)
|
295 |
# elapsed_time = time.time() - start_time
|
296 |
# formatted_time = f"{int(elapsed_time // 60):02}:{int(elapsed_time % 60):02}:{(elapsed_time % 1) * 1000:03.0f}"
|
297 |
-
|
298 |
|
299 |
def send_to_client(self, data_dict):
|
300 |
content = {
|
|
|
1 |
|
2 |
+
|
|
|
3 |
import soundfile
|
4 |
from concurrent.futures import ProcessPoolExecutor as Pool
|
5 |
import numpy as np
|
|
|
11 |
import json
|
12 |
import threading
|
13 |
|
14 |
+
from .server import ServeClientBase
|
15 |
+
from .translator import QwenTranslator
|
16 |
+
from pywhispercpp.model import Model
|
17 |
+
|
18 |
+
logger = getLogger(__name__)
|
19 |
|
20 |
|
21 |
class TripleTextBuffer:
|
|
|
105 |
|
106 |
|
107 |
class PywhisperInference:
|
108 |
+
whisper_model = None
|
109 |
+
llm_model = None
|
110 |
|
111 |
@classmethod
|
112 |
def initializer(cls, warmup=True):
|
113 |
models_dir = config.MODEL_DIR.as_posix()
|
114 |
+
cls.whisper_model = Model(
|
115 |
model=config.WHISPER_MODEL,
|
116 |
models_dir=models_dir,
|
117 |
print_realtime=False,
|
|
|
120 |
)
|
121 |
if warmup:
|
122 |
cls.warmup()
|
123 |
+
|
124 |
+
# init llamacpp
|
125 |
+
cls.llm_model = QwenTranslator(config.LLM_MODEL_PATH, config.LLM_SYS_PROMPT)
|
126 |
|
127 |
@classmethod
|
128 |
def warmup(cls, warmup_steps=1):
|
129 |
mel, _, = soundfile.read("assets/jfk.flac")
|
130 |
for _ in range(warmup_steps):
|
131 |
+
cls.whisper_model.transcribe(mel, print_progress=False)
|
132 |
|
133 |
@staticmethod
|
134 |
def config_language(language):
|
|
|
142 |
def inference(cls, audio_buffer, language):
|
143 |
max_len, prompt = cls.config_language(language)
|
144 |
audio_buffer = np.frombuffer(audio_buffer, dtype=np.float32)
|
145 |
+
return cls.whisper_model.transcribe(
|
146 |
audio_buffer,
|
147 |
initial_prompt=prompt,
|
148 |
language=language,
|
|
|
150 |
max_len=max_len
|
151 |
)
|
152 |
|
153 |
+
@classmethod
|
154 |
+
def translate(cls, context: str, src_lang, dst_lang):
|
155 |
+
return cls.llm_model.translate(context, src_lang, dst_lang)
|
156 |
+
|
157 |
|
158 |
class PyWhiperCppServe(ServeClientBase):
|
159 |
|
160 |
|
161 |
+
def __init__(self, websocket, language=None, dst_lang=None, client_uid=None,):
|
162 |
super().__init__(client_uid, websocket)
|
163 |
self.language = language
|
164 |
+
self.dst_lang = dst_lang # 目标翻译语言
|
165 |
# 设置观察字符串 对比上下次的文字来判断字符串的输出是否固定
|
166 |
self._text_buffer = TripleTextBuffer()
|
167 |
# 存储转录数据
|
|
|
173 |
self._pool = Pool(
|
174 |
max_workers=1, initializer=PywhisperInference.initializer)
|
175 |
|
176 |
+
logger.info('Create a process to process audio.')
|
177 |
self.trans_thread = threading.Thread(target=self.speech_to_text)
|
178 |
+
self.trans_thread.daemon = True
|
179 |
self.trans_thread.start()
|
180 |
|
181 |
self.websocket.send(json.dumps({
|
|
|
203 |
Args:
|
204 |
audio_buffer (np.array): The audio chunk to transcribe.
|
205 |
"""
|
206 |
+
transcribe_fut = self._pool.submit(
|
207 |
PywhisperInference.inference, audio_buffer.tobytes(), self.language)
|
208 |
+
segments = transcribe_fut.result()
|
209 |
+
|
210 |
+
return segments
|
211 |
+
|
212 |
+
def translate_text(self, text):
|
213 |
+
"""
|
214 |
+
translate the text to dst lang"""
|
215 |
+
translate_fut = self._pool.submit(
|
216 |
+
PywhisperInference.translate, text, self.language, self.dst_lang)
|
217 |
+
return translate_fut.result()
|
218 |
|
219 |
|
220 |
|
|
|
285 |
except Exception as e:
|
286 |
logger.error(f"[ERROR]: {e}")
|
287 |
else:
|
288 |
+
for item in self.handle_transcription_output(segments, audio_buffer):
|
289 |
+
print(item)
|
290 |
|
291 |
|
292 |
|
|
|
305 |
if is_end_sentence and last_cut_index:
|
306 |
message = self._segment_manager.segment
|
307 |
seg_id = self._segment_manager.get_seg_id() - 1
|
308 |
+
yield (seg_id, message, self.translate_text(message))
|
309 |
+
yield (seg_id + 1, self._segment_manager.string, self.translate_text(self._segment_manager.string))
|
|
|
|
|
310 |
|
311 |
else:
|
312 |
seg_id = self._segment_manager.get_seg_id()
|
|
|
314 |
# print(self._segment_manager.__dict__)
|
315 |
# elapsed_time = time.time() - start_time
|
316 |
# formatted_time = f"{int(elapsed_time // 60):02}:{int(elapsed_time % 60):02}:{(elapsed_time % 1) * 1000:03.0f}"
|
317 |
+
yield (seg_id, message,self.translate_text(message))
|
318 |
|
319 |
def send_to_client(self, data_dict):
|
320 |
content = {
|
uv.lock
CHANGED
@@ -214,6 +214,15 @@ wheels = [
|
|
214 |
{ url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 },
|
215 |
]
|
216 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
[[package]]
|
218 |
name = "filelock"
|
219 |
version = "3.18.0"
|
@@ -321,6 +330,18 @@ wheels = [
|
|
321 |
{ url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749 },
|
322 |
]
|
323 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
[[package]]
|
325 |
name = "llvmlite"
|
326 |
version = "0.44.0"
|
@@ -751,6 +772,37 @@ wheels = [
|
|
751 |
{ url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178 },
|
752 |
]
|
753 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
754 |
[[package]]
|
755 |
name = "requests"
|
756 |
version = "2.32.3"
|
@@ -1011,9 +1063,11 @@ source = { virtual = "." }
|
|
1011 |
dependencies = [
|
1012 |
{ name = "av" },
|
1013 |
{ name = "librosa" },
|
|
|
1014 |
{ name = "numpy" },
|
1015 |
{ name = "onnxruntime" },
|
1016 |
{ name = "pyaudio" },
|
|
|
1017 |
{ name = "setuptools" },
|
1018 |
{ name = "soundfile" },
|
1019 |
{ name = "torch" },
|
@@ -1026,9 +1080,11 @@ dependencies = [
|
|
1026 |
requires-dist = [
|
1027 |
{ name = "av", specifier = ">=14.2.0" },
|
1028 |
{ name = "librosa", specifier = ">=0.11.0" },
|
|
|
1029 |
{ name = "numpy", specifier = ">=2.1.3" },
|
1030 |
{ name = "onnxruntime", specifier = ">=1.21.0" },
|
1031 |
{ name = "pyaudio", specifier = ">=0.2.14" },
|
|
|
1032 |
{ name = "setuptools", specifier = ">=78.1.0" },
|
1033 |
{ name = "soundfile", specifier = ">=0.13.1" },
|
1034 |
{ name = "torch", specifier = ">=2.6.0" },
|
|
|
214 |
{ url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 },
|
215 |
]
|
216 |
|
217 |
+
[[package]]
|
218 |
+
name = "diskcache"
|
219 |
+
version = "5.6.3"
|
220 |
+
source = { registry = "https://pypi.org/simple" }
|
221 |
+
sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916 }
|
222 |
+
wheels = [
|
223 |
+
{ url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550 },
|
224 |
+
]
|
225 |
+
|
226 |
[[package]]
|
227 |
name = "filelock"
|
228 |
version = "3.18.0"
|
|
|
330 |
{ url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749 },
|
331 |
]
|
332 |
|
333 |
+
[[package]]
|
334 |
+
name = "llama-cpp-python"
|
335 |
+
version = "0.3.8"
|
336 |
+
source = { registry = "https://pypi.org/simple" }
|
337 |
+
dependencies = [
|
338 |
+
{ name = "diskcache" },
|
339 |
+
{ name = "jinja2" },
|
340 |
+
{ name = "numpy" },
|
341 |
+
{ name = "typing-extensions" },
|
342 |
+
]
|
343 |
+
sdist = { url = "https://files.pythonhosted.org/packages/95/4e/da912ff2bf9bf855c86e8b1ae9fe1eaedf47d75a66728896b533901c4610/llama_cpp_python-0.3.8.tar.gz", hash = "sha256:31c91323b555c025a76a30923cead9f5695da103dd68c15cdbb4509b17f0ed77", size = 67301056 }
|
344 |
+
|
345 |
[[package]]
|
346 |
name = "llvmlite"
|
347 |
version = "0.44.0"
|
|
|
772 |
{ url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178 },
|
773 |
]
|
774 |
|
775 |
+
[[package]]
|
776 |
+
name = "pywhispercpp"
|
777 |
+
version = "1.3.0"
|
778 |
+
source = { registry = "https://pypi.org/simple" }
|
779 |
+
dependencies = [
|
780 |
+
{ name = "numpy" },
|
781 |
+
{ name = "platformdirs" },
|
782 |
+
{ name = "requests" },
|
783 |
+
{ name = "tqdm" },
|
784 |
+
]
|
785 |
+
sdist = { url = "https://files.pythonhosted.org/packages/85/bf/213ab706513a2ad6f0266b44c841f5123ae3592e769488be1e62268f0451/pywhispercpp-1.3.0.tar.gz", hash = "sha256:d5d4ddfdbe7472736343413355f47a74783bc40891c5826b607eac4f62b08279", size = 1580900 }
|
786 |
+
wheels = [
|
787 |
+
{ url = "https://files.pythonhosted.org/packages/79/4d/4765b2477e028d27f0f497f9e7e27ecfd207cf1d133c12626a7901ceca8a/pywhispercpp-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f66cc5ff624744cf0b7da1c53d67d2e3416f92a02c7ae945697d47d13eed5845", size = 1562728 },
|
788 |
+
{ url = "https://files.pythonhosted.org/packages/e5/0d/a17a403feeea0e0d064fb230d56119718ca813d6b382804848c387387022/pywhispercpp-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2fb92868fb7219478f6bdff50d5045583466985e3e9017af040735eb650772d", size = 1893935 },
|
789 |
+
{ url = "https://files.pythonhosted.org/packages/3f/09/db14ce3c4555a642ba62e4da226e578ea86d1c32ca70b93e32dae3309cf2/pywhispercpp-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66270fb0dbb00745419001eef7c46c49e2104b80ebd21d8e65d58f0bdef7c2a7", size = 1788858 },
|
790 |
+
{ url = "https://files.pythonhosted.org/packages/a0/28/fd4de678cfc50ad8dedba1ab5f9a3e3563759ca3dce273eb2b09b95e4729/pywhispercpp-1.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f61f2e36f06bb98cd139aee073d6af5223fe551bab80ce3cbdc643eb7edb5e1b", size = 3026209 },
|
791 |
+
{ url = "https://files.pythonhosted.org/packages/94/a3/81c3616eb033344e4af356896aded58c1f36fdca253294dd501db7630a09/pywhispercpp-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bf0478a443ea7a56f35fbeba1c5f1988b13088aafc79d533a67020ee7ce146f3", size = 2792276 },
|
792 |
+
{ url = "https://files.pythonhosted.org/packages/49/83/0bcb864c5dff802afd4c1887149bf029ea6715e20438feb0eb0727e0e70d/pywhispercpp-1.3.0-cp311-cp311-win32.whl", hash = "sha256:0c906e7537d9e81813d86bcc98824085058174b238900bad655c8d7bd426f9a4", size = 731243 },
|
793 |
+
{ url = "https://files.pythonhosted.org/packages/a7/15/5421c0814e611aae9f1541c36d4bfba157ae30580424091519aaeffe3f1d/pywhispercpp-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:3af25987a0d3caa88a6c795b2e0051b74515a81c33bdbd49c6e8ca65b7fdc6db", size = 863874 },
|
794 |
+
{ url = "https://files.pythonhosted.org/packages/4b/e6/c4008fed98e0ab047bd458aaeb675226d2bd630c11939e641c3385657552/pywhispercpp-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd0903d9685447700ed4cad48f298cb73dd073bcd0abb8bcf974646006f4e222", size = 1563954 },
|
795 |
+
{ url = "https://files.pythonhosted.org/packages/d9/31/5de448da80b8e58bda47e2ca503b97484afafe93d93793f5f7b6140f9fba/pywhispercpp-1.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e84926618d819aaeb128170351b7489dc01cabb0e58c44c6b11f8449f0850d7a", size = 1893782 },
|
796 |
+
{ url = "https://files.pythonhosted.org/packages/5c/82/cb38ffa05a0fcbff7547a42735b05f36d92af5352ae7273764e05ca85363/pywhispercpp-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba675b98ffd1901d3696613655700d3d407bd952e110a1bfbbb618997818d8b", size = 1787927 },
|
797 |
+
{ url = "https://files.pythonhosted.org/packages/90/9d/3aa981b0551d44339ffc613c4466df4d8e3c59609da444a490eac032e0a2/pywhispercpp-1.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2b8407a9cae5555bd276fac578155de6273f3bcc0ee8960c1fd0cfb7f4be1be9", size = 3027385 },
|
798 |
+
{ url = "https://files.pythonhosted.org/packages/b0/3f/85924b54772e5ce5222bbf9aa98247800c7be2262daf17d07e2fae6e1ced/pywhispercpp-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fd31fa0992a39e55d4a793dad1f6d2a1a97261998d52726f4568cea0af78ff93", size = 2791659 },
|
799 |
+
{ url = "https://files.pythonhosted.org/packages/71/63/0ed9a4a776d81018536f2e5556fe364599a661aeded42627f93e1d4282aa/pywhispercpp-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e8d1b339409668382f68b810c2ccac010e71d580c6afe6d67e86336daeb939ed", size = 1563943 },
|
800 |
+
{ url = "https://files.pythonhosted.org/packages/e4/3b/f9fda6bd691900e76702945405919174838497096961f56aa8583b6373ed/pywhispercpp-1.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac9fea9e3aeb5219ce614f644c4f1b38b9561eede1e4380ab39de96afba8864", size = 1893777 },
|
801 |
+
{ url = "https://files.pythonhosted.org/packages/42/fc/26b0811b3964f4b14691ff28d84ccfd5fb7b800eab7ca898f538271c9c61/pywhispercpp-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc6801332deb2d6efc67e5dd7c9c9b1ce06f8235270b3ebd5546a79040a67314", size = 1787957 },
|
802 |
+
{ url = "https://files.pythonhosted.org/packages/3a/f2/1673b43721246a9da0a9820abb6aa442c4de0129d2039fd107f0657878f4/pywhispercpp-1.3.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5bc5742787037f421f748ad463d85bce565287e77dfddaa5536d37d59ac44267", size = 3027419 },
|
803 |
+
{ url = "https://files.pythonhosted.org/packages/d2/33/292a727bd3aa826c5981df32ce228f3e89edf4116ae4cc9d76ddedb9fb07/pywhispercpp-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6f7578fb9a8de4c8663323060c0715713168ae174ab022dfe9ad13b21223c3c", size = 2791670 },
|
804 |
+
]
|
805 |
+
|
806 |
[[package]]
|
807 |
name = "requests"
|
808 |
version = "2.32.3"
|
|
|
1063 |
dependencies = [
|
1064 |
{ name = "av" },
|
1065 |
{ name = "librosa" },
|
1066 |
+
{ name = "llama-cpp-python" },
|
1067 |
{ name = "numpy" },
|
1068 |
{ name = "onnxruntime" },
|
1069 |
{ name = "pyaudio" },
|
1070 |
+
{ name = "pywhispercpp" },
|
1071 |
{ name = "setuptools" },
|
1072 |
{ name = "soundfile" },
|
1073 |
{ name = "torch" },
|
|
|
1080 |
requires-dist = [
|
1081 |
{ name = "av", specifier = ">=14.2.0" },
|
1082 |
{ name = "librosa", specifier = ">=0.11.0" },
|
1083 |
+
{ name = "llama-cpp-python", specifier = ">=0.3.8" },
|
1084 |
{ name = "numpy", specifier = ">=2.1.3" },
|
1085 |
{ name = "onnxruntime", specifier = ">=1.21.0" },
|
1086 |
{ name = "pyaudio", specifier = ">=0.2.14" },
|
1087 |
+
{ name = "pywhispercpp", specifier = ">=1.3.0" },
|
1088 |
{ name = "setuptools", specifier = ">=78.1.0" },
|
1089 |
{ name = "soundfile", specifier = ">=0.13.1" },
|
1090 |
{ name = "torch", specifier = ">=2.6.0" },
|