Files
nexus-claude-api/src/nexus_claude_api/server.py
2026-06-26 17:02:21 +08:00

53 lines
1.7 KiB
Python

from __future__ import annotations
import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.requests import Request
from fastapi.responses import JSONResponse
from nexus_claude_api.config import Settings
from nexus_claude_api.errors import NexusClaudeError, anthropic_error_response
from nexus_claude_api.nexus_client import NexusClient
from nexus_claude_api.routes.health import router as health_router
from nexus_claude_api.routes.messages import router as messages_router
from nexus_claude_api.routes.models import router as models_router
def create_app(
settings: Settings | None = None,
nexus_client: NexusClient | None = None,
) -> FastAPI:
resolved_settings = settings or Settings.from_values(require_api_key=False)
app = FastAPI(title="nexus-claude-api", version="0.1.0")
app.state.settings = resolved_settings
app.state.nexus_client = nexus_client or NexusClient(resolved_settings)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(health_router)
app.include_router(models_router)
app.include_router(messages_router)
@app.exception_handler(NexusClaudeError)
async def handle_nexus_error(_: Request, exc: NexusClaudeError) -> JSONResponse:
return anthropic_error_response(
exc.message,
status_code=exc.status_code,
error_type=exc.error_type,
)
logging.basicConfig(
level=logging.DEBUG if resolved_settings.verbose else logging.INFO,
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
)
return app