Add offline Swagger UI support with custom static file serving
- Disable default docs URL - Add custom /docs endpoint - Mount static Swagger UI files - Include OAuth2 redirect handler - Support offline documentation access
This commit is contained in:
parent
b32b2e8b9e
commit
88d12beae2
4 changed files with 38 additions and 1 deletions
|
|
@ -5,6 +5,10 @@ LightRAG FastAPI Server
|
||||||
from fastapi import FastAPI, Depends, HTTPException, Request
|
from fastapi import FastAPI, Depends, HTTPException, Request
|
||||||
from fastapi.exceptions import RequestValidationError
|
from fastapi.exceptions import RequestValidationError
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
|
from fastapi.openapi.docs import (
|
||||||
|
get_swagger_ui_html,
|
||||||
|
get_swagger_ui_oauth2_redirect_html,
|
||||||
|
)
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import logging.config
|
import logging.config
|
||||||
|
|
@ -358,7 +362,7 @@ def create_app(args):
|
||||||
"description": swagger_description,
|
"description": swagger_description,
|
||||||
"version": __api_version__,
|
"version": __api_version__,
|
||||||
"openapi_url": "/openapi.json", # Explicitly set OpenAPI schema URL
|
"openapi_url": "/openapi.json", # Explicitly set OpenAPI schema URL
|
||||||
"docs_url": "/docs", # Explicitly set docs URL
|
"docs_url": None, # Disable default docs, we'll create custom endpoint
|
||||||
"redoc_url": "/redoc", # Explicitly set redoc URL
|
"redoc_url": "/redoc", # Explicitly set redoc URL
|
||||||
"lifespan": lifespan,
|
"lifespan": lifespan,
|
||||||
}
|
}
|
||||||
|
|
@ -769,6 +773,25 @@ def create_app(args):
|
||||||
ollama_api = OllamaAPI(rag, top_k=args.top_k, api_key=api_key)
|
ollama_api = OllamaAPI(rag, top_k=args.top_k, api_key=api_key)
|
||||||
app.include_router(ollama_api.router, prefix="/api")
|
app.include_router(ollama_api.router, prefix="/api")
|
||||||
|
|
||||||
|
# Custom Swagger UI endpoint for offline support
|
||||||
|
@app.get("/docs", include_in_schema=False)
|
||||||
|
async def custom_swagger_ui_html():
|
||||||
|
"""Custom Swagger UI HTML with local static files"""
|
||||||
|
return get_swagger_ui_html(
|
||||||
|
openapi_url=app.openapi_url,
|
||||||
|
title=app.title + " - Swagger UI",
|
||||||
|
oauth2_redirect_url="/docs/oauth2-redirect",
|
||||||
|
swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js",
|
||||||
|
swagger_css_url="/static/swagger-ui/swagger-ui.css",
|
||||||
|
swagger_favicon_url="/static/swagger-ui/favicon-32x32.png",
|
||||||
|
swagger_ui_parameters=app.swagger_ui_parameters,
|
||||||
|
)
|
||||||
|
|
||||||
|
@app.get("/docs/oauth2-redirect", include_in_schema=False)
|
||||||
|
async def swagger_ui_redirect():
|
||||||
|
"""OAuth2 redirect for Swagger UI"""
|
||||||
|
return get_swagger_ui_oauth2_redirect_html()
|
||||||
|
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
async def redirect_to_webui():
|
async def redirect_to_webui():
|
||||||
"""Redirect root path to /webui"""
|
"""Redirect root path to /webui"""
|
||||||
|
|
@ -935,6 +958,15 @@ def create_app(args):
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
# Mount Swagger UI static files for offline support
|
||||||
|
swagger_static_dir = Path(__file__).parent / "static" / "swagger-ui"
|
||||||
|
if swagger_static_dir.exists():
|
||||||
|
app.mount(
|
||||||
|
"/static/swagger-ui",
|
||||||
|
StaticFiles(directory=swagger_static_dir),
|
||||||
|
name="swagger-ui-static",
|
||||||
|
)
|
||||||
|
|
||||||
# Webui mount webui/index.html
|
# Webui mount webui/index.html
|
||||||
static_dir = Path(__file__).parent / "webui"
|
static_dir = Path(__file__).parent / "webui"
|
||||||
static_dir.mkdir(exist_ok=True)
|
static_dir.mkdir(exist_ok=True)
|
||||||
|
|
|
||||||
BIN
lightrag/api/static/swagger-ui/favicon-32x32.png
Normal file
BIN
lightrag/api/static/swagger-ui/favicon-32x32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 628 B |
2
lightrag/api/static/swagger-ui/swagger-ui-bundle.js
Normal file
2
lightrag/api/static/swagger-ui/swagger-ui-bundle.js
Normal file
File diff suppressed because one or more lines are too long
3
lightrag/api/static/swagger-ui/swagger-ui.css
Normal file
3
lightrag/api/static/swagger-ui/swagger-ui.css
Normal file
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue