
File name
Commit message
Commit date
01-12
01-12
File name
Commit message
Commit date
from __future__ import annotations
import logging
import platform
from fastapi import (
FastAPI,
)
from fastapi.middleware.cors import CORSMiddleware
from speaches.dependencies import ApiKeyDependency, get_config
from speaches.logger import setup_logger
from speaches.routers.misc import (
router as misc_router,
)
from speaches.routers.models import (
router as models_router,
)
from speaches.routers.speech import (
router as speech_router,
)
from speaches.routers.stt import (
router as stt_router,
)
# 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:
config = get_config() # HACK
setup_logger(config.log_level)
logger = logging.getLogger(__name__)
logger.debug(f"Config: {config}")
if platform.machine() == "x86_64":
logger.warning("`POST /v1/audio/speech` with `model=rhasspy/piper-voices` is only supported on x86_64 machines")
dependencies = []
if config.api_key is not None:
dependencies.append(ApiKeyDependency)
app = FastAPI(dependencies=dependencies, openapi_tags=TAGS_METADATA)
app.include_router(stt_router)
app.include_router(models_router)
app.include_router(misc_router)
app.include_router(speech_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 speaches.gradio_app import create_gradio_demo
app = gr.mount_gradio_app(app, create_gradio_demo(config), path="/")
return app