Spaces:
Configuration error
Configuration error
Fedir Zadniprovskyi
commited on
Commit
·
93d8861
1
Parent(s):
49f71ac
chore: minor changes to scripts/client.py
Browse files- pyproject.toml +1 -0
- scripts/client.py +26 -22
pyproject.toml
CHANGED
|
@@ -70,6 +70,7 @@ ignore = [
|
|
| 70 |
"W505",
|
| 71 |
"ISC001", # recommended to disable for formatting
|
| 72 |
"INP001",
|
|
|
|
| 73 |
]
|
| 74 |
|
| 75 |
[tool.ruff.lint.isort]
|
|
|
|
| 70 |
"W505",
|
| 71 |
"ISC001", # recommended to disable for formatting
|
| 72 |
"INP001",
|
| 73 |
+
"PT018",
|
| 74 |
]
|
| 75 |
|
| 76 |
[tool.ruff.lint.isort]
|
scripts/client.py
CHANGED
|
@@ -2,6 +2,7 @@ import os
|
|
| 2 |
from pathlib import Path
|
| 3 |
import subprocess
|
| 4 |
import threading
|
|
|
|
| 5 |
|
| 6 |
import httpx
|
| 7 |
import keyboard
|
|
@@ -14,11 +15,12 @@ import keyboard
|
|
| 14 |
# The audio file will be sent to the server for transcription.
|
| 15 |
# The transcription will be copied to the clipboard.
|
| 16 |
# When having a short audio of a couple of sentences and running inference on a GPU the response time is very fast (less than 2 seconds). # noqa: E501
|
|
|
|
| 17 |
|
| 18 |
CHUNK = 2**12
|
| 19 |
AUDIO_RECORD_CMD = [
|
| 20 |
"ffmpeg",
|
| 21 |
-
|
| 22 |
# "-loglevel",
|
| 23 |
# "quiet",
|
| 24 |
"-f",
|
|
@@ -27,15 +29,6 @@ AUDIO_RECORD_CMD = [
|
|
| 27 |
"default",
|
| 28 |
"-f",
|
| 29 |
"wav",
|
| 30 |
-
# "-ac",
|
| 31 |
-
# "1",
|
| 32 |
-
# "-ar",
|
| 33 |
-
# "16000",
|
| 34 |
-
# "-f",
|
| 35 |
-
# "s16le",
|
| 36 |
-
# "-acodec",
|
| 37 |
-
# "pcm_s16le",
|
| 38 |
-
# "-",
|
| 39 |
]
|
| 40 |
COPY_TO_CLIPBOARD_CMD = "wl-copy"
|
| 41 |
OPENAI_BASE_URL = "ws://localhost:8000/v1"
|
|
@@ -48,12 +41,13 @@ RESPONSE_FORMAT = "text"
|
|
| 48 |
|
| 49 |
client = httpx.Client(base_url=OPENAI_BASE_URL, timeout=TIMEOUT)
|
| 50 |
is_running = threading.Event()
|
| 51 |
-
|
|
|
|
| 52 |
|
| 53 |
|
| 54 |
while True:
|
| 55 |
keyboard.wait(KEYBIND)
|
| 56 |
-
print("
|
| 57 |
process = subprocess.Popen(
|
| 58 |
[*AUDIO_RECORD_CMD, "-y", str(file.name)],
|
| 59 |
stdout=subprocess.PIPE,
|
|
@@ -63,17 +57,27 @@ while True:
|
|
| 63 |
)
|
| 64 |
keyboard.wait(KEYBIND)
|
| 65 |
process.kill()
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
"
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
transcription = res.text
|
| 78 |
print(transcription)
|
| 79 |
subprocess.run([COPY_TO_CLIPBOARD_CMD], input=transcription.encode(), check=True)
|
|
|
|
|
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
import subprocess
|
| 4 |
import threading
|
| 5 |
+
import time
|
| 6 |
|
| 7 |
import httpx
|
| 8 |
import keyboard
|
|
|
|
| 15 |
# The audio file will be sent to the server for transcription.
|
| 16 |
# The transcription will be copied to the clipboard.
|
| 17 |
# When having a short audio of a couple of sentences and running inference on a GPU the response time is very fast (less than 2 seconds). # noqa: E501
|
| 18 |
+
# Run this with `sudo -E python scripts/client.py`
|
| 19 |
|
| 20 |
CHUNK = 2**12
|
| 21 |
AUDIO_RECORD_CMD = [
|
| 22 |
"ffmpeg",
|
| 23 |
+
"-hide_banner",
|
| 24 |
# "-loglevel",
|
| 25 |
# "quiet",
|
| 26 |
"-f",
|
|
|
|
| 29 |
"default",
|
| 30 |
"-f",
|
| 31 |
"wav",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
]
|
| 33 |
COPY_TO_CLIPBOARD_CMD = "wl-copy"
|
| 34 |
OPENAI_BASE_URL = "ws://localhost:8000/v1"
|
|
|
|
| 41 |
|
| 42 |
client = httpx.Client(base_url=OPENAI_BASE_URL, timeout=TIMEOUT)
|
| 43 |
is_running = threading.Event()
|
| 44 |
+
|
| 45 |
+
file = Path("test.wav") # HACK: I had a hard time trying to use a temporary file due to permissions issues
|
| 46 |
|
| 47 |
|
| 48 |
while True:
|
| 49 |
keyboard.wait(KEYBIND)
|
| 50 |
+
print("Recording started")
|
| 51 |
process = subprocess.Popen(
|
| 52 |
[*AUDIO_RECORD_CMD, "-y", str(file.name)],
|
| 53 |
stdout=subprocess.PIPE,
|
|
|
|
| 57 |
)
|
| 58 |
keyboard.wait(KEYBIND)
|
| 59 |
process.kill()
|
| 60 |
+
stdout, stderr = process.communicate()
|
| 61 |
+
if stdout or stderr:
|
| 62 |
+
print(f"stdout: {stdout}")
|
| 63 |
+
print(f"stderr: {stderr}")
|
| 64 |
+
print(f"Recording finished. File size: {file.stat().st_size} bytes")
|
| 65 |
|
| 66 |
+
try:
|
| 67 |
+
with open(file, "rb") as fd:
|
| 68 |
+
start = time.perf_counter()
|
| 69 |
+
res = client.post(
|
| 70 |
+
OPENAI_BASE_URL + TRANSCRIBE_PATH,
|
| 71 |
+
files={"file": fd},
|
| 72 |
+
data={
|
| 73 |
+
"response_format": RESPONSE_FORMAT,
|
| 74 |
+
"language": LANGUAGE,
|
| 75 |
+
},
|
| 76 |
+
)
|
| 77 |
+
end = time.perf_counter()
|
| 78 |
+
print(f"Transcription took {end - start} seconds")
|
| 79 |
transcription = res.text
|
| 80 |
print(transcription)
|
| 81 |
subprocess.run([COPY_TO_CLIPBOARD_CMD], input=transcription.encode(), check=True)
|
| 82 |
+
except httpx.ConnectError as e:
|
| 83 |
+
print(f"Couldn't connect to server: {e}")
|