Spaces:
Runtime error
Runtime error
| import uuid | |
| from typing import List | |
| from fastapi import APIRouter, Depends, HTTPException, status, Query | |
| from sqlalchemy.orm import Session | |
| from app.db.session import get_db | |
| from app.api.v1 import deps | |
| from app.db.models.user import User | |
| from app.db.models.knowledgebase import KnowledgeBase | |
| from app.schemas import knowledgebase as kb_schema | |
| from app.services import kb_service | |
| router = APIRouter() | |
| def create_knowledge_base( | |
| kb_in: kb_schema.KnowledgeBaseCreate, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| Create a new Knowledge Base. | |
| """ | |
| kb = kb_service.create_kb(db=db, kb_in=kb_in, user=current_user) | |
| return kb_schema.KnowledgeBase.model_validate(kb) | |
| def list_knowledge_bases( | |
| db: Session = Depends(get_db), | |
| skip: int = Query(0, ge=0), | |
| limit: int = Query(10, ge=1, le=100), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| List all Knowledge Bases for the current user. | |
| """ | |
| kbs_with_counts = kb_service.get_all_kbs_for_user(db, user_id=current_user.id, skip=skip, limit=limit) | |
| response = [] | |
| for kb, num_docs, num_processed in kbs_with_counts: | |
| kb_data = kb_schema.KnowledgeBase.model_validate(kb) | |
| kb_data.num_documents = num_docs or 0 | |
| kb_data.num_processed_documents = num_processed or 0 | |
| response.append(kb_data) | |
| return response | |
| def get_knowledge_base( | |
| kb_id: uuid.UUID, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| Get details of a specific Knowledge Base. | |
| """ | |
| db_kb = kb_service.get_kb_by_id(db, kb_id=kb_id, user_id=current_user.id) | |
| if not db_kb: | |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Knowledge Base not found") | |
| kbs_with_counts = kb_service.get_all_kbs_for_user(db, user_id=current_user.id) | |
| kb_with_count = next((item for item in kbs_with_counts if item[0].id == kb_id), None) | |
| if not kb_with_count: | |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Knowledge Base not found") | |
| kb, num_docs, num_processed = kb_with_count | |
| response = kb_schema.KnowledgeBase.model_validate(kb) | |
| response.num_documents = num_docs or 0 | |
| response.num_processed_documents = num_processed or 0 | |
| return response | |
| def update_knowledge_base( | |
| kb_id: uuid.UUID, | |
| kb_in: kb_schema.KnowledgeBaseUpdate, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| Update a Knowledge Base's name or description. | |
| """ | |
| db_kb = kb_service.get_kb_by_id(db, kb_id=kb_id, user_id=current_user.id) | |
| if not db_kb: | |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Knowledge Base not found") | |
| updated_kb = kb_service.update_kb(db=db, db_kb=db_kb, kb_in=kb_in) | |
| return updated_kb | |
| def delete_knowledge_base( | |
| kb_id: uuid.UUID, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| Delete a Knowledge Base and all its associated documents. | |
| """ | |
| db_kb = kb_service.get_kb_by_id(db, kb_id=kb_id, user_id=current_user.id) | |
| if not db_kb: | |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Knowledge Base not found") | |
| kb_service.delete_kb(db=db, db_kb=db_kb) | |
| return None | |
| def get_kb_configuration( | |
| kb_id: uuid.UUID, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| Get the advanced configuration of a Knowledge Base. | |
| """ | |
| db_kb = kb_service.get_kb_by_id(db, kb_id=kb_id, user_id=current_user.id) | |
| if not db_kb: | |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Knowledge Base not found") | |
| kbs_with_counts = kb_service.get_all_kbs_for_user(db, user_id=current_user.id) | |
| kb_with_count = next((item for item in kbs_with_counts if item[0].id == kb_id), (None, 0, 0)) | |
| response = kb_schema.KnowledgeBaseWithConfig.model_validate(db_kb) | |
| response.num_documents = kb_with_count[1] or 0 | |
| response.num_processed_documents = kb_with_count[2] or 0 | |
| return response | |
| def update_kb_configuration( | |
| kb_id: uuid.UUID, | |
| config_in: kb_schema.KnowledgeBaseConfigUpdate, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(deps.get_current_active_user) | |
| ): | |
| """ | |
| Update the advanced configuration of a Knowledge Base. | |
| """ | |
| db_kb = kb_service.get_kb_by_id(db, kb_id=kb_id, user_id=current_user.id) | |
| if not db_kb: | |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Knowledge Base not found") | |
| updated_kb = kb_service.update_kb_config(db=db, db_kb=db_kb, config_in=config_in) | |
| return get_kb_configuration(kb_id=updated_kb.id, db=db, current_user=current_user) |