Fedir Zadniprovskyi 01-10
feat: add API tags
@64c033f2b51dfe8ec9a875659e71ee6c24a0ea97
src/faster_whisper_server/main.py
--- src/faster_whisper_server/main.py
+++ src/faster_whisper_server/main.py
@@ -12,11 +12,11 @@
 
 from faster_whisper_server.dependencies import ApiKeyDependency, get_config, get_model_manager
 from faster_whisper_server.logger import setup_logger
-from faster_whisper_server.routers.list_models import (
-    router as list_models_router,
-)
 from faster_whisper_server.routers.misc import (
     router as misc_router,
+)
+from faster_whisper_server.routers.models import (
+    router as models_router,
 )
 from faster_whisper_server.routers.stt import (
     router as stt_router,
@@ -24,6 +24,19 @@
 
 if TYPE_CHECKING:
     from collections.abc import AsyncGenerator
+
+# https://swagger.io/docs/specification/v3_0/grouping-operations-with-tags/
+# https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-tags
+TAGS_METADATA = [
+    {"name": "automatic-speech-recognition"},
+    {"name": "speech-to-text"},
+    {"name": "models"},
+    {"name": "diagnostic"},
+    {
+        "name": "experimental",
+        "description": "Not meant for public use yet. May change or be removed at any time.",
+    },
+]
 
 
 def create_app() -> FastAPI:
@@ -53,10 +66,10 @@
     if config.api_key is not None:
         dependencies.append(ApiKeyDependency)
 
-    app = FastAPI(lifespan=lifespan, dependencies=dependencies)
+    app = FastAPI(lifespan=lifespan, dependencies=dependencies, openapi_tags=TAGS_METADATA)
 
     app.include_router(stt_router)
-    app.include_router(list_models_router)
+    app.include_router(models_router)
     app.include_router(misc_router)
     if speech_router is not None:
         app.include_router(speech_router)
src/faster_whisper_server/routers/misc.py
--- src/faster_whisper_server/routers/misc.py
+++ src/faster_whisper_server/routers/misc.py
@@ -13,7 +13,7 @@
 router = APIRouter()
 
 
-@router.get("/health")
+@router.get("/health", tags=["diagnostic"])
 def health() -> Response:
     return Response(status_code=200, content="OK")
 
src/faster_whisper_server/routers/models.py (Renamed from src/faster_whisper_server/routers/list_models.py)
--- src/faster_whisper_server/routers/list_models.py
+++ src/faster_whisper_server/routers/models.py
@@ -18,7 +18,7 @@
 if TYPE_CHECKING:
     from huggingface_hub.hf_api import ModelInfo
 
-router = APIRouter()
+router = APIRouter(tags=["models"])
 
 
 @router.get("/v1/models")
src/faster_whisper_server/routers/speech.py
--- src/faster_whisper_server/routers/speech.py
+++ src/faster_whisper_server/routers/speech.py
@@ -43,7 +43,7 @@
 
 logger = logging.getLogger(__name__)
 
-router = APIRouter()
+router = APIRouter(tags=["speech-to-text"])
 
 
 # aip 'Write a function `resample_audio` which would take in RAW PCM 16-bit signed, little-endian audio data represented as bytes (`audio_bytes`) and resample it (either downsample or upsample) from `sample_rate` to `target_sample_rate` using numpy'  # noqa: E501
src/faster_whisper_server/routers/stt.py
--- src/faster_whisper_server/routers/stt.py
+++ src/faster_whisper_server/routers/stt.py
@@ -55,7 +55,7 @@
 
 logger = logging.getLogger(__name__)
 
-router = APIRouter()
+router = APIRouter(tags=["automatic-speech-recognition"])
 
 
 # TODO: test async vs sync performance
Add a comment
List