workspace working

This commit is contained in:
2026-01-12 22:31:11 +08:00
parent 2738a822d1
commit 370fe6368a
149 changed files with 4648 additions and 660 deletions

View File

@@ -153,21 +153,41 @@ def create_query_routes(rag_or_manager, api_key: Optional[str] = None, top_k: in
# Accept either a LightRAG instance or a WorkspaceManager
from lightrag.api.workspace_manager import WorkspaceManager
from lightrag import LightRAG
if isinstance(rag_or_manager, WorkspaceManager):
# Get default RAG instance from workspace manager
rag = rag_or_manager.get_rag()
elif isinstance(rag_or_manager, LightRAG):
rag = rag_or_manager
else:
raise TypeError(f"Expected LightRAG or WorkspaceManager, got {type(rag_or_manager)}")
from fastapi import Request, Depends, HTTPException
from lightrag.base import StoragesStatus
from lightrag.utils import logger
combined_auth = get_combined_auth_dependency(api_key)
# Define dependency to get workspace-specific RAG instance
async def get_workspace_rag(request: Request):
if isinstance(rag_or_manager, WorkspaceManager):
workspace = request.headers.get("X-Workspace", "").strip()
rag = rag_or_manager.get_rag(workspace)
# Ensure storages are initialized for this workspace
try:
logger.info(f"Workspace '{workspace}': storages status = {rag._storages_status}")
if rag._storages_status != StoragesStatus.FINALIZED:
logger.info(f"Initializing storages for workspace '{workspace}'")
await rag.initialize_storages()
logger.info(f"Storages initialized, status now = {rag._storages_status}")
except Exception as e:
logger.error(f"Failed to initialize storages for workspace '{workspace}': {e}")
raise HTTPException(status_code=500, detail=f"Storage initialization failed: {e}")
return rag
elif isinstance(rag_or_manager, LightRAG):
# Single RAG instance mode - ignore workspace header
return rag_or_manager
else:
raise TypeError(f"Expected LightRAG or WorkspaceManager, got {type(rag_or_manager)}")
@router.post(
"/query", response_model=QueryResponse, dependencies=[Depends(combined_auth)]
)
async def query_text(request: QueryRequest):
async def query_text(
request: QueryRequest,
rag: LightRAG = Depends(get_workspace_rag)
):
"""
Handle a POST request at the /query endpoint to process user queries using RAG capabilities.
@@ -200,7 +220,10 @@ def create_query_routes(rag_or_manager, api_key: Optional[str] = None, top_k: in
raise HTTPException(status_code=500, detail=str(e))
@router.post("/query/stream", dependencies=[Depends(combined_auth)])
async def query_text_stream(request: QueryRequest):
async def query_text_stream(
request: QueryRequest,
rag: LightRAG = Depends(get_workspace_rag)
):
"""
This endpoint performs a retrieval-augmented generation (RAG) query and streams the response.
@@ -253,7 +276,10 @@ def create_query_routes(rag_or_manager, api_key: Optional[str] = None, top_k: in
response_model=QueryDataResponse,
dependencies=[Depends(combined_auth)],
)
async def query_data(request: QueryRequest):
async def query_data(
request: QueryRequest,
rag: LightRAG = Depends(get_workspace_rag)
):
"""
Retrieve structured data without LLM generation.