myrmidon / python /src /server /api_routes /knowledge_api.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
2.15 kB
from fastapi import APIRouter
# EXPORTS for test compatibility (GAP-012)
from ..services.storage.storage_services import storage_service
from ..utils import get_supabase_client
from .knowledge import active_crawl_tasks
from .knowledge.crawling import router as crawling_router
from .knowledge.items import router as items_router
from .knowledge.search import router as search_router
from .knowledge.upload import router as upload_router
from .knowledge.upload import upload_document
# PHYSICAL ROUTE ALIGNMENT (Phase 4.6.12)
# We use /api as prefix to flatten the paths requested by FE
router: APIRouter = APIRouter(prefix="/api", tags=["knowledge"])
# Backward compatibility aliases for old tests (GAP-012)
router.include_router(items_router, prefix="/knowledge-items")
router.include_router(items_router)
router.include_router(search_router)
router.include_router(crawling_router)
router.include_router(upload_router)
@router.get("/knowledge")
@router.get("/knowledge/")
async def list_knowledge_items_root(page: int = 1, per_page: int = 20):
"""Satisfy front-end base /api/knowledge requests by delegating to items logic."""
from ..services.knowledge.knowledge_item_service import KnowledgeItemService
service = KnowledgeItemService(get_supabase_client())
items = await service.list_items()
total = len(items)
# Basic slicing for compatibility
start = (page - 1) * per_page
end = start + per_page
return {"items": items[start:end], "total": total, "page": page, "per_page": per_page}
@router.get("/knowledge/database/metrics")
async def get_database_metrics():
from fastapi import HTTPException
from ..config.logfire_config import safe_logfire_error
from ..services.knowledge.database_metrics_service import DatabaseMetricsService
try:
service = DatabaseMetricsService(get_supabase_client())
return await service.get_metrics()
except Exception as e:
safe_logfire_error(f"Failed to get database metrics: {e}")
raise HTTPException(status_code=500, detail=str(e)) from e
__all__ = ["router", "active_crawl_tasks", "upload_document", "storage_service"]