File size: 1,713 Bytes
313814b
 
3a14175
bf48682
8f3dcc9
313814b
d0feed8
 
 
e0e6882
313814b
bf48682
 
8f3dcc9
 
 
 
 
 
 
 
d0feed8
313814b
dc4f25f
8f3dcc9
dc4f25f
aada575
bf48682
 
 
 
 
 
 
65e955b
bf48682
3a14175
bf48682
 
 
 
 
3a14175
bf48682
3a14175
bf48682
 
 
313814b
bf48682
 
 
 
 
 
 
 
8f3dcc9
bf48682
 
9d4a9a2
bf48682
4e64465
bf48682
4e64465
bf48682
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from __future__ import annotations

from contextlib import asynccontextmanager
import logging
from typing import TYPE_CHECKING

from fastapi import (
    FastAPI,
)
from fastapi.middleware.cors import CORSMiddleware

from faster_whisper_server.dependencies import 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.stt import (
    router as stt_router,
)

if TYPE_CHECKING:
    from collections.abc import AsyncGenerator


def create_app() -> FastAPI:
    setup_logger()

    logger = logging.getLogger(__name__)

    config = get_config()  # HACK
    logger.debug(f"Config: {config}")

    model_manager = get_model_manager()  # HACK

    @asynccontextmanager
    async def lifespan(_app: FastAPI) -> AsyncGenerator[None, None]:
        for model_name in config.preload_models:
            model_manager.load_model(model_name)
        yield

    app = FastAPI(lifespan=lifespan)

    app.include_router(stt_router)
    app.include_router(list_models_router)
    app.include_router(misc_router)

    if config.allow_origins is not None:
        app.add_middleware(
            CORSMiddleware,
            allow_origins=config.allow_origins,
            allow_credentials=True,
            allow_methods=["*"],
            allow_headers=["*"],
        )

    if config.enable_ui:
        import gradio as gr

        from faster_whisper_server.gradio_app import create_gradio_demo

        app = gr.mount_gradio_app(app, create_gradio_demo(config), path="/")

    return app