

feat: add language field to the model response type
@4468033129925a87f3332f45002b1bacc328a918
--- faster_whisper_server/main.py
+++ faster_whisper_server/main.py
... | ... | @@ -87,18 +87,27 @@ |
87 | 87 |
|
88 | 88 |
@app.get("/v1/models") |
89 | 89 |
def get_models() -> ModelListResponse: |
90 |
- models = huggingface_hub.list_models(library="ctranslate2", tags="automatic-speech-recognition") |
|
91 |
- models = [ |
|
92 |
- ModelObject( |
|
90 |
+ models = huggingface_hub.list_models(library="ctranslate2", tags="automatic-speech-recognition", cardData=True) |
|
91 |
+ transformed_models: list[ModelObject] = [] |
|
92 |
+ for model in models: |
|
93 |
+ assert model.created_at is not None |
|
94 |
+ assert model.card_data is not None |
|
95 |
+ assert model.card_data.language is None or isinstance(model.card_data.language, str | list) |
|
96 |
+ if model.card_data.language is None: |
|
97 |
+ language = [] |
|
98 |
+ elif isinstance(model.card_data.language, str): |
|
99 |
+ language = [model.card_data.language] |
|
100 |
+ else: |
|
101 |
+ language = model.card_data.language |
|
102 |
+ transformed_model = ModelObject( |
|
93 | 103 |
id=model.id, |
94 | 104 |
created=int(model.created_at.timestamp()), |
95 | 105 |
object_="model", |
96 | 106 |
owned_by=model.id.split("/")[0], |
107 |
+ language=language, |
|
97 | 108 |
) |
98 |
- for model in models |
|
99 |
- if model.created_at is not None |
|
100 |
- ] |
|
101 |
- return ModelListResponse(data=models) |
|
109 |
+ transformed_models.append(transformed_model) |
|
110 |
+ return ModelListResponse(data=transformed_models) |
|
102 | 111 |
|
103 | 112 |
|
104 | 113 |
@app.get("/v1/models/{model_name:path}") |
... | ... | @@ -107,7 +116,9 @@ |
107 | 116 |
model_name: Annotated[str, Path(example="Systran/faster-distil-whisper-large-v3")], |
108 | 117 |
) -> ModelObject: |
109 | 118 |
models = list( |
110 |
- huggingface_hub.list_models(model_name=model_name, library="ctranslate2", tags="automatic-speech-recognition") |
|
119 |
+ huggingface_hub.list_models( |
|
120 |
+ model_name=model_name, library="ctranslate2", tags="automatic-speech-recognition", cardData=True |
|
121 |
+ ) |
|
111 | 122 |
) |
112 | 123 |
if len(models) == 0: |
113 | 124 |
raise HTTPException(status_code=404, detail="Model doesn't exists") |
... | ... | @@ -122,11 +133,20 @@ |
122 | 133 |
detail=f"Model doesn't exists. Possible matches: {", ".join([model.id for model in models])}", |
123 | 134 |
) |
124 | 135 |
assert exact_match.created_at is not None |
136 |
+ assert exact_match.card_data is not None |
|
137 |
+ assert exact_match.card_data.language is None or isinstance(exact_match.card_data.language, str | list) |
|
138 |
+ if exact_match.card_data.language is None: |
|
139 |
+ language = [] |
|
140 |
+ elif isinstance(exact_match.card_data.language, str): |
|
141 |
+ language = [exact_match.card_data.language] |
|
142 |
+ else: |
|
143 |
+ language = exact_match.card_data.language |
|
125 | 144 |
return ModelObject( |
126 | 145 |
id=exact_match.id, |
127 | 146 |
created=int(exact_match.created_at.timestamp()), |
128 | 147 |
object_="model", |
129 | 148 |
owned_by=exact_match.id.split("/")[0], |
149 |
+ language=language, |
|
130 | 150 |
) |
131 | 151 |
|
132 | 152 |
|
--- faster_whisper_server/server_models.py
+++ faster_whisper_server/server_models.py
... | ... | @@ -133,6 +133,8 @@ |
133 | 133 |
"""The object type, which is always "model".""" |
134 | 134 |
owned_by: str |
135 | 135 |
"""The organization that owns the model.""" |
136 |
+ language: list[str] = Field(default_factory=list) |
|
137 |
+ """List of ISO 639-3 supported by the model. It's possible that the list will be empty. This field is not a part of the OpenAI API spec and is added for convenience.""" # noqa: E501 |
|
136 | 138 |
|
137 | 139 |
model_config = ConfigDict( |
138 | 140 |
populate_by_name=True, |
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?