Med_AI_backend / routes /knowledge.py
github-actions[bot]
Auto-sync backend from GitHub
866e276
Raw
History Blame Contribute Delete
1.37 kB
from __future__ import annotations
import os
from typing import Any
from fastapi import APIRouter, Header, HTTPException, Query
from pydantic import BaseModel, Field
from knowledge_base.loader import append_entry
from knowledge_base.retriever import rebuild, retrieve
router = APIRouter(prefix="/api/knowledge", tags=["knowledge"])
class KnowledgeCreateRequest(BaseModel):
title: str = Field(..., min_length=1, max_length=200)
topic: str = Field(..., min_length=1, max_length=100)
content: str = Field(..., min_length=1, max_length=6000)
source: str = Field(..., min_length=1, max_length=200)
tags: list[str] = Field(default_factory=list)
def _require_admin_key(x_admin_key: str | None) -> None:
admin_key = os.getenv("ADMIN_KEY")
if not admin_key or x_admin_key != admin_key:
raise HTTPException(status_code=401, detail="Unauthorized")
@router.post("/add")
async def add_knowledge_item(payload: KnowledgeCreateRequest, x_admin_key: str | None = Header(default=None, alias="X-Admin-Key")):
_require_admin_key(x_admin_key)
entry = append_entry(payload.model_dump())
rebuild()
return {"status": "ok", "entry": entry}
@router.get("/search")
async def search_knowledge(q: str = Query(..., min_length=1, max_length=500), top_k: int = Query(default=5, ge=1, le=10)):
results = retrieve(q, top_k=top_k)
return {"query": q, "results": results}