

chore: handle "whisper-1" model name
@3dda14e4a25775cdba0188cdc4f656e2248c86d0
--- faster_whisper_server/main.py
+++ faster_whisper_server/main.py
... | ... | @@ -11,6 +11,7 @@ |
11 | 11 |
FastAPI, |
12 | 12 |
Form, |
13 | 13 |
HTTPException, |
14 |
+ Path, |
|
14 | 15 |
Query, |
15 | 16 |
Response, |
16 | 17 |
UploadFile, |
... | ... | @@ -22,6 +23,7 @@ |
22 | 23 |
from faster_whisper import WhisperModel |
23 | 24 |
from faster_whisper.vad import VadOptions, get_speech_timestamps |
24 | 25 |
from huggingface_hub.hf_api import ModelInfo |
26 |
+from pydantic import AfterValidator |
|
25 | 27 |
|
26 | 28 |
from faster_whisper_server import utils |
27 | 29 |
from faster_whisper_server.asr import FasterWhisperASR |
... | ... | @@ -85,7 +87,7 @@ |
85 | 87 |
return Response(status_code=200, content="OK") |
86 | 88 |
|
87 | 89 |
|
88 |
-@app.get("/v1/models", response_model=list[ModelObject]) |
|
90 |
+@app.get("/v1/models") |
|
89 | 91 |
def get_models() -> list[ModelObject]: |
90 | 92 |
models = huggingface_hub.list_models(library="ctranslate2") |
91 | 93 |
models = [ |
... | ... | @@ -101,8 +103,8 @@ |
101 | 103 |
return models |
102 | 104 |
|
103 | 105 |
|
104 |
-@app.get("/v1/models/{model_name:path}", response_model=ModelObject) |
|
105 |
-def get_model(model_name: str) -> ModelObject: |
|
106 |
+@app.get("/v1/models/{model_name:path}") |
|
107 |
+def get_model(model_name: Annotated[str, Path()]) -> ModelObject: |
|
106 | 108 |
models = list( |
107 | 109 |
huggingface_hub.list_models(model_name=model_name, library="ctranslate2") |
108 | 110 |
) |
... | ... | @@ -131,10 +133,25 @@ |
131 | 133 |
return f"data: {data}\n\n" |
132 | 134 |
|
133 | 135 |
|
136 |
+def handle_default_openai_model(model_name: str) -> str: |
|
137 |
+ """This exists because some callers may not be able override the default("whisper-1") model name. |
|
138 |
+ For example, https://github.com/open-webui/open-webui/issues/2248#issuecomment-2162997623. |
|
139 |
+ """ |
|
140 |
+ if model_name == "whisper-1": |
|
141 |
+ logger.info( |
|
142 |
+ f"{model_name} is not a valid model name. Using {config.whisper.model} instead." |
|
143 |
+ ) |
|
144 |
+ return config.whisper.model |
|
145 |
+ return model_name |
|
146 |
+ |
|
147 |
+ |
|
148 |
+ModelName = Annotated[str, AfterValidator(handle_default_openai_model)] |
|
149 |
+ |
|
150 |
+ |
|
134 | 151 |
@app.post("/v1/audio/translations") |
135 | 152 |
def translate_file( |
136 | 153 |
file: Annotated[UploadFile, Form()], |
137 |
- model: Annotated[str, Form()] = config.whisper.model, |
|
154 |
+ model: Annotated[ModelName, Form()] = config.whisper.model, |
|
138 | 155 |
prompt: Annotated[str | None, Form()] = None, |
139 | 156 |
response_format: Annotated[ResponseFormat, Form()] = config.default_response_format, |
140 | 157 |
temperature: Annotated[float, Form()] = 0.0, |
... | ... | @@ -187,7 +204,7 @@ |
187 | 204 |
@app.post("/v1/audio/transcriptions") |
188 | 205 |
def transcribe_file( |
189 | 206 |
file: Annotated[UploadFile, Form()], |
190 |
- model: Annotated[str, Form()] = config.whisper.model, |
|
207 |
+ model: Annotated[ModelName, Form()] = config.whisper.model, |
|
191 | 208 |
language: Annotated[Language | None, Form()] = config.default_language, |
192 | 209 |
prompt: Annotated[str | None, Form()] = None, |
193 | 210 |
response_format: Annotated[ResponseFormat, Form()] = config.default_response_format, |
... | ... | @@ -289,7 +306,7 @@ |
289 | 306 |
@app.websocket("/v1/audio/transcriptions") |
290 | 307 |
async def transcribe_stream( |
291 | 308 |
ws: WebSocket, |
292 |
- model: Annotated[str, Query()] = config.whisper.model, |
|
309 |
+ model: Annotated[ModelName, Query()] = config.whisper.model, |
|
293 | 310 |
language: Annotated[Language | None, Query()] = config.default_language, |
294 | 311 |
response_format: Annotated[ |
295 | 312 |
ResponseFormat, Query() |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?