aidial_adapter_openai/app.py (37 lines of code) (raw):
from contextlib import asynccontextmanager
from aidial_sdk.exceptions import HTTPException as DialException
from aidial_sdk.telemetry.init import init_telemetry as sdk_init_telemetry
from aidial_sdk.telemetry.types import TelemetryConfig
from fastapi import FastAPI
from openai import OpenAIError
import aidial_adapter_openai.endpoints as endpoints
from aidial_adapter_openai.app_config import ApplicationConfig
from aidial_adapter_openai.exception_handlers import adapter_exception_handler
from aidial_adapter_openai.utils.http_client import get_http_client
from aidial_adapter_openai.utils.log_config import configure_loggers, logger
from aidial_adapter_openai.utils.request import set_app_config
@asynccontextmanager
async def lifespan(app: FastAPI):
yield
logger.info("Application shutdown")
await get_http_client().aclose()
def create_app(
app_config: ApplicationConfig | None = None,
init_telemetry: bool = True,
) -> FastAPI:
app = FastAPI(lifespan=lifespan)
set_app_config(app, app_config or ApplicationConfig.from_env())
if init_telemetry:
sdk_init_telemetry(app, TelemetryConfig())
configure_loggers()
app.get("/health")(endpoints.health)
app.post("/openai/deployments/{deployment_id:path}/embeddings")(
endpoints.embedding
)
app.post("/openai/deployments/{deployment_id:path}/chat/completions")(
endpoints.chat_completion
)
for exc_class in [OpenAIError, DialException]:
app.add_exception_handler(exc_class, adapter_exception_handler)
return app
app = create_app()