c45236651b
- Auto-create {service-id}-admin groups at startup (group_bootstrap.py)
- get_service_admin() dep: grants access to superusers OR service group members
- /api/settings/ai and /api/settings/documents/limits now allow service admins
- AI service exposes /plugin/manifest (ai-service-admin access group)
- DocServiceSettingsPage: combined upload limits + watch directory on one page
- ServiceAdminRoute in frontend guards new /apps/documents/settings and /apps/ai/settings
- Single Settings button per app card (visible to admins and service group members)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
1.0 KiB
Python
37 lines
1.0 KiB
Python
import logging
|
|
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from app.core.config import settings
|
|
from app.routers import chat, health, plugin
|
|
from app.routers import queue as queue_router
|
|
from app.services.config_reader import load_ai_config
|
|
from app.services.queue import queue_service
|
|
|
|
logger = logging.getLogger("ai-service")
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
config = await load_ai_config()
|
|
provider = config.get("provider", "lmstudio")
|
|
model = config.get(provider, {}).get("model", "unknown")
|
|
logger.info("[ai-service] active provider: %s model: %s", provider, model)
|
|
|
|
queue_service.start()
|
|
logger.info("[ai-service] queue worker started")
|
|
|
|
yield
|
|
|
|
queue_service.stop()
|
|
logger.info("[ai-service] queue worker stopped")
|
|
|
|
|
|
app = FastAPI(title=settings.PROJECT_NAME, lifespan=lifespan)
|
|
|
|
app.include_router(chat.router, tags=["chat"])
|
|
app.include_router(health.router, tags=["health"])
|
|
app.include_router(queue_router.router)
|
|
app.include_router(plugin.router, tags=["plugin"])
|