book / backend /api /book.py
Ammar Ahmed Khan
Add Physical AI Humanoid Book Platform
e2eff86
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
import logging
import sys
import os
# Add the backend directory to the path to allow absolute imports
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from database import get_db
from models.book_content import BookContentResponse
from api.schemas import ChatbotQueryResponse
from middleware.auth import get_current_user
from models.user import User
from ai.embeddings import qwen_embeddings
from database.vector_db import vector_db
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/book", tags=["book"])
@router.get("/search", response_model=List[dict])
async def search_book_content(
q: str,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""
Search book content by query
"""
try:
# Generate embedding for the search query
query_embedding = qwen_embeddings.get_embedding(q)
# Search for similar content in the vector database
similar_contents = vector_db.search_similar(query_embedding, limit=5)
# Format results
results = []
for content in similar_contents:
metadata = content['metadata']
results.append({
"id": content['content_id'],
"title": metadata['title'],
"content_preview": metadata['content'][:200] + "..." if len(metadata['content']) > 200 else metadata['content'],
"source_path": metadata['source_path']
})
logger.info(f"Book content search performed by user {current_user.email}")
return results
except Exception as e:
logger.error(f"Error searching book content: {str(e)}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Error searching book content"
)