daihui.zhang
commited on
Commit
·
ebbd5df
1
Parent(s):
716f8d1
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" },
|