Download app/api/knowledge.py from nvikou/ReplyFlow: direct link, hf CLI and curl.
- Browser
- Download file 1.59 kB
-
https://huggingface.co/spaces/nvikou/ReplyFlow/resolve/main/app/api/knowledge.py
- Command line
-
hf download hf://spaces/nvikou/ReplyFlow/app/api/knowledge.py
-
curl -L -o knowledge.py https://huggingface.co/spaces/nvikou/ReplyFlow/resolve/main/app/api/knowledge.py
1.59 kB
| """Knowledge base ingestion API.""" | |
| from pathlib import Path | |
| from fastapi import APIRouter, Depends, File, UploadFile | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from app.config import get_settings | |
| from app.db import get_db | |
| from app.models import KnowledgeDoc | |
| from app.schemas import KnowledgeIngestResponse | |
| from app.services.rag import get_knowledge_store, ingest_path | |
| router = APIRouter(prefix="/api/knowledge", tags=["knowledge"]) | |
| async def knowledge_status() -> dict: | |
| """Return current knowledge chunk count.""" | |
| store = get_knowledge_store() | |
| return {"chunk_count": store.chunk_count} | |
| async def ingest_upload( | |
| file: UploadFile = File(...), | |
| db: AsyncSession = Depends(get_db), | |
| ) -> KnowledgeIngestResponse: | |
| """Upload and ingest a knowledge document.""" | |
| settings = get_settings() | |
| target_dir = Path(settings.knowledge_path) | |
| target_dir.mkdir(parents=True, exist_ok=True) | |
| filename = Path(file.filename or "upload.txt").name | |
| dest = target_dir / filename | |
| content = await file.read() | |
| dest.write_bytes(content) | |
| source = dest.suffix.lower().lstrip(".") or "text" | |
| count = await ingest_path(dest, source) | |
| db.add( | |
| KnowledgeDoc( | |
| filename=filename, | |
| source_type=source, | |
| chunk_count=count, | |
| ) | |
| ) | |
| await db.commit() | |
| return KnowledgeIngestResponse( | |
| filename=filename, | |
| chunk_count=count, | |
| message=f"Ingested {count} chunks from {filename}", | |
| ) | |