first commit
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
"""
|
||||
FastAPI Web Server for CADDesigner.
|
||||
Web server implementation compatible with the OpenAI API specification.
|
||||
"""
|
||||
|
||||
from contextlib import asynccontextmanager
|
||||
import uvicorn
|
||||
|
||||
from bootstrap_env import load_project_env
|
||||
|
||||
load_project_env()
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from .state import server_state
|
||||
from .routers import (
|
||||
health_router,
|
||||
agent_router,
|
||||
conversation_router,
|
||||
chat_router,
|
||||
)
|
||||
from .error_handlers import not_found_handler, internal_error_handler
|
||||
from SimpleLLMFunc.logger import push_error, app_log
|
||||
from SimpleLLMFunc.observability.langfuse_client import flush_all_observations
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
"""Application lifecycle management."""
|
||||
app_log("🚀 Initializing CADDesigner Web Server...")
|
||||
try:
|
||||
server_state.initialize()
|
||||
app_log("✅ CADDesigner initialized successfully!")
|
||||
except Exception as e:
|
||||
push_error(f"❌ Failed to initialize CADDesigner: {e}")
|
||||
raise
|
||||
|
||||
yield
|
||||
|
||||
app_log("🔄 Shutting down CADDesigner Web Server...")
|
||||
try:
|
||||
flush_all_observations()
|
||||
app_log("✅ Flushed Langfuse observations")
|
||||
except Exception as e:
|
||||
push_error(f"⚠️ Failed to flush Langfuse observations: {e}")
|
||||
|
||||
|
||||
# Create the FastAPI application.
|
||||
app = FastAPI(
|
||||
title="CADDesigner API",
|
||||
description="OpenAI-compatible API for CADDesigner",
|
||||
version="1.0.0",
|
||||
docs_url="/docs",
|
||||
redoc_url="/redoc",
|
||||
lifespan=lifespan,
|
||||
)
|
||||
|
||||
# Add CORS middleware.
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"], # TODO: Restrict specific domains in production.
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# Register routers.
|
||||
app.include_router(health_router)
|
||||
app.include_router(agent_router)
|
||||
app.include_router(conversation_router)
|
||||
app.include_router(chat_router)
|
||||
|
||||
# Register error handlers.
|
||||
app.add_exception_handler(404, not_found_handler)
|
||||
app.add_exception_handler(500, internal_error_handler)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run("web_interface.server:app", host="0.0.0.0", port=8000, reload=True)
|
||||
Reference in New Issue
Block a user