Spaces:
Running
Running
File size: 2,399 Bytes
2129c29 | 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 68 69 70 71 72 73 74 75 76 77 78 79 | """FastAPI application factory for NLProxy.
Author: IntelliDeep Labs Team
License: BSL 1.1
"""
from __future__ import annotations
from contextlib import asynccontextmanager
from fastapi import FastAPI
from prometheus_fastapi_instrumentator import Instrumentator, metrics
from nlproxy.server.config import settings
from nlproxy.server.logger import setup_logging
from nlproxy.server.middleware import configure_middlewares, configure_request_id
from nlproxy.server.dependencies import startup, shutdown
from nlproxy.server.apis.health import router as health_router
from nlproxy.server.apis.models import router as models_router
from nlproxy.server.apis.chat import router as chat_router
from nlproxy.server.apis.errors import register_exception_handlers
def create_app() -> FastAPI:
setup_logging(settings.log_level)
@asynccontextmanager
async def lifespan(app: FastAPI):
await startup()
try:
yield
finally:
await shutdown()
app = FastAPI(
title="nlproxy Enterprise Proxy",
description="Production-grade prompt compression and safety proxy for LLMs",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc",
openapi_url="/openapi.json",
lifespan=lifespan,
)
configure_middlewares(app)
configure_request_id(app)
app.include_router(health_router)
app.include_router(models_router)
app.include_router(chat_router)
register_exception_handlers(app)
if settings.enable_metrics:
Instrumentator(
should_group_status_codes=False,
should_ignore_untemplated=True,
should_respect_env_var=True,
env_var_name="nlproxy_ENABLE_METRICS",
).add(
metrics.requests(metric_namespace="nlproxy", metric_subsystem="api"),
metrics.request_size(metric_namespace="nlproxy", metric_subsystem="api"),
metrics.response_size(metric_namespace="nlproxy", metric_subsystem="api"),
metrics.latency(
buckets=(0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0),
metric_namespace="nlproxy",
metric_subsystem="api",
),
).instrument(app).expose(
app,
endpoint=settings.metrics_path,
include_in_schema=False,
)
return app
app = create_app()
|