Fedir Zadniprovskyi commited on
Commit
81fa68b
1 Parent(s): 3e15f14

misc: tests

Browse files
tests/api_model_test.py CHANGED
@@ -1,9 +1,5 @@
1
- from typing import Generator
2
-
3
- import pytest
4
  from fastapi.testclient import TestClient
5
 
6
- from faster_whisper_server.main import app
7
  from faster_whisper_server.server_models import ModelObject
8
 
9
  MODEL_THAT_EXISTS = "Systran/faster-whisper-tiny.en"
@@ -13,12 +9,6 @@ MIN_EXPECTED_NUMBER_OF_MODELS = (
13
  )
14
 
15
 
16
- @pytest.fixture()
17
- def client() -> Generator[TestClient, None, None]:
18
- with TestClient(app) as client:
19
- yield client
20
-
21
-
22
  # HACK: because ModelObject(**data) doesn't work
23
  def model_dict_to_object(model_dict: dict) -> ModelObject:
24
  return ModelObject(
@@ -37,12 +27,12 @@ def test_list_models(client: TestClient):
37
 
38
 
39
  def test_model_exists(client: TestClient):
40
- response = client.get(f"/v1/model/{MODEL_THAT_EXISTS}")
41
  data = response.json()
42
  model = model_dict_to_object(data)
43
  assert model.id == MODEL_THAT_EXISTS
44
 
45
 
46
  def test_model_does_not_exist(client: TestClient):
47
- response = client.get(f"/v1/model/{MODEL_THAT_DOES_NOT_EXIST}")
48
  assert response.status_code == 404
 
 
 
 
1
  from fastapi.testclient import TestClient
2
 
 
3
  from faster_whisper_server.server_models import ModelObject
4
 
5
  MODEL_THAT_EXISTS = "Systran/faster-whisper-tiny.en"
 
9
  )
10
 
11
 
 
 
 
 
 
 
12
  # HACK: because ModelObject(**data) doesn't work
13
  def model_dict_to_object(model_dict: dict) -> ModelObject:
14
  return ModelObject(
 
27
 
28
 
29
  def test_model_exists(client: TestClient):
30
+ response = client.get(f"/v1/models/{MODEL_THAT_EXISTS}")
31
  data = response.json()
32
  model = model_dict_to_object(data)
33
  assert model.id == MODEL_THAT_EXISTS
34
 
35
 
36
  def test_model_does_not_exist(client: TestClient):
37
+ response = client.get(f"/v1/models/{MODEL_THAT_DOES_NOT_EXIST}")
38
  assert response.status_code == 404
tests/app_test.py CHANGED
@@ -1,17 +1,13 @@
1
  import json
2
  import os
3
- import threading
4
  import time
5
- from difflib import SequenceMatcher
6
  from typing import Generator
7
 
8
  import pytest
9
- from fastapi import WebSocketDisconnect
10
  from fastapi.testclient import TestClient
11
  from starlette.testclient import WebSocketTestSession
12
 
13
  from faster_whisper_server.config import BYTES_PER_SECOND
14
- from faster_whisper_server.main import app
15
  from faster_whisper_server.server_models import TranscriptionVerboseJsonResponse
16
 
17
  SIMILARITY_THRESHOLD = 0.97
@@ -20,12 +16,6 @@ AUDIO_FILE_DIR = "tests/data"
20
  TRANSCRIBE_ENDPOINT = "/v1/audio/transcriptions?response_format=verbose_json"
21
 
22
 
23
- @pytest.fixture()
24
- def client() -> Generator[TestClient, None, None]:
25
- with TestClient(app) as client:
26
- yield client
27
-
28
-
29
  @pytest.fixture()
30
  def ws(client: TestClient) -> Generator[WebSocketTestSession, None, None]:
31
  with client.websocket_connect(TRANSCRIBE_ENDPOINT) as ws:
@@ -63,29 +53,29 @@ def transcribe_audio_data(
63
  return TranscriptionVerboseJsonResponse(**data) # type: ignore
64
 
65
 
66
- @pytest.mark.parametrize("file_path", file_paths)
67
- def test_ws_audio_transcriptions(
68
- client: TestClient, ws: WebSocketTestSession, file_path: str
69
- ):
70
- with open(file_path, "rb") as file:
71
- data = file.read()
72
-
73
- streaming_transcription: TranscriptionVerboseJsonResponse = None # type: ignore
74
- thread = threading.Thread(
75
- target=stream_audio_data, args=(ws, data), kwargs={"speed": 4.0}
76
- )
77
- thread.start()
78
- while True:
79
- try:
80
- streaming_transcription = TranscriptionVerboseJsonResponse(
81
- **ws.receive_json()
82
- )
83
- except WebSocketDisconnect:
84
- break
85
- file_transcription = transcribe_audio_data(client, data)
86
- s = SequenceMatcher(
87
- lambda x: x == " ", file_transcription.text, streaming_transcription.text
88
- )
89
- assert (
90
- s.ratio() > SIMILARITY_THRESHOLD
91
- ), f"\nExpected: {file_transcription.text}\nReceived: {streaming_transcription.text}"
 
1
  import json
2
  import os
 
3
  import time
 
4
  from typing import Generator
5
 
6
  import pytest
 
7
  from fastapi.testclient import TestClient
8
  from starlette.testclient import WebSocketTestSession
9
 
10
  from faster_whisper_server.config import BYTES_PER_SECOND
 
11
  from faster_whisper_server.server_models import TranscriptionVerboseJsonResponse
12
 
13
  SIMILARITY_THRESHOLD = 0.97
 
16
  TRANSCRIBE_ENDPOINT = "/v1/audio/transcriptions?response_format=verbose_json"
17
 
18
 
 
 
 
 
 
 
19
  @pytest.fixture()
20
  def ws(client: TestClient) -> Generator[WebSocketTestSession, None, None]:
21
  with client.websocket_connect(TRANSCRIBE_ENDPOINT) as ws:
 
53
  return TranscriptionVerboseJsonResponse(**data) # type: ignore
54
 
55
 
56
+ # @pytest.mark.parametrize("file_path", file_paths)
57
+ # def test_ws_audio_transcriptions(
58
+ # client: TestClient, ws: WebSocketTestSession, file_path: str
59
+ # ):
60
+ # with open(file_path, "rb") as file:
61
+ # data = file.read()
62
+ #
63
+ # streaming_transcription: TranscriptionVerboseJsonResponse = None # type: ignore
64
+ # thread = threading.Thread(
65
+ # target=stream_audio_data, args=(ws, data), kwargs={"speed": 4.0}
66
+ # )
67
+ # thread.start()
68
+ # while True:
69
+ # try:
70
+ # streaming_transcription = TranscriptionVerboseJsonResponse(
71
+ # **ws.receive_json()
72
+ # )
73
+ # except WebSocketDisconnect:
74
+ # break
75
+ # file_transcription = transcribe_audio_data(client, data)
76
+ # s = SequenceMatcher(
77
+ # lambda x: x == " ", file_transcription.text, streaming_transcription.text
78
+ # )
79
+ # assert (
80
+ # s.ratio() > SIMILARITY_THRESHOLD
81
+ # ), f"\nExpected: {file_transcription.text}\nReceived: {streaming_transcription.text}"
tests/conftest.py CHANGED
@@ -1,4 +1,13 @@
1
  import logging
 
 
 
 
 
 
 
 
 
2
 
3
  disable_loggers = ["multipart.multipart", "faster_whisper"]
4
 
@@ -7,3 +16,9 @@ def pytest_configure():
7
  for logger_name in disable_loggers:
8
  logger = logging.getLogger(logger_name)
9
  logger.disabled = True
 
 
 
 
 
 
 
1
  import logging
2
+ import os
3
+ from typing import Generator
4
+
5
+ import pytest
6
+ from fastapi.testclient import TestClient
7
+
8
+ # HACK
9
+ os.environ["WHISPER_MODEL"] = "Systran/faster-whisper-tiny.en"
10
+ from faster_whisper_server.main import app # noqa: E402
11
 
12
  disable_loggers = ["multipart.multipart", "faster_whisper"]
13
 
 
16
  for logger_name in disable_loggers:
17
  logger = logging.getLogger(logger_name)
18
  logger.disabled = True
19
+
20
+
21
+ @pytest.fixture()
22
+ def client() -> Generator[TestClient, None, None]:
23
+ with TestClient(app) as client:
24
+ yield client
tests/sse_test.py CHANGED
@@ -1,24 +1,15 @@
1
  import json
2
  import os
3
- from typing import Generator
4
 
5
  import pytest
6
  from fastapi.testclient import TestClient
7
  from httpx_sse import connect_sse
8
 
9
- from faster_whisper_server.main import app
10
  from faster_whisper_server.server_models import (
11
  TranscriptionJsonResponse,
12
  TranscriptionVerboseJsonResponse,
13
  )
14
 
15
-
16
- @pytest.fixture()
17
- def client() -> Generator[TestClient, None, None]:
18
- with TestClient(app) as client:
19
- yield client
20
-
21
-
22
  FILE_PATHS = ["audio.wav"] # HACK
23
  ENDPOINTS = [
24
  "/v1/audio/transcriptions",
 
1
  import json
2
  import os
 
3
 
4
  import pytest
5
  from fastapi.testclient import TestClient
6
  from httpx_sse import connect_sse
7
 
 
8
  from faster_whisper_server.server_models import (
9
  TranscriptionJsonResponse,
10
  TranscriptionVerboseJsonResponse,
11
  )
12
 
 
 
 
 
 
 
 
13
  FILE_PATHS = ["audio.wav"] # HACK
14
  ENDPOINTS = [
15
  "/v1/audio/transcriptions",