Spaces:
Configuration error
Configuration error
| from fastapi import APIRouter, Depends, HTTPException | |
| from sqlalchemy.orm import Session | |
| from app.database import get_db | |
| from app.models.user import User | |
| from app.schemas.personalize import PersonalizeRequest, PersonalizeResponse | |
| from app.services.openai_service import OpenAIService | |
| import logging | |
| import json | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter(prefix="/api", tags=["personalization"]) | |
| async def personalize_content( | |
| request: PersonalizeRequest, | |
| db: Session = Depends(get_db) | |
| ): | |
| """ | |
| Personalize content based on user's background. | |
| - Fetches user profile from database | |
| - Uses Gemini to adapt content complexity based on: | |
| * software_level (beginner/intermediate/advanced) | |
| * hardware_level (none/basic/experienced) | |
| * learning_goals (free text) | |
| - Returns personalized content with description of adjustments | |
| """ | |
| # Fetch user profile | |
| user = db.query(User).filter(User.id == request.user_id).first() | |
| if not user: | |
| raise HTTPException(status_code=404, detail="User not found") | |
| # Personalize via OpenAI SDK + Gemini | |
| try: | |
| openai_service = OpenAIService() | |
| result = await openai_service.personalize_content( | |
| content=request.content, | |
| software_level=user.software_level, | |
| hardware_level=user.hardware_level, | |
| learning_goals=user.learning_goals or "" | |
| ) | |
| except json.JSONDecodeError as e: | |
| logger.error(f"Invalid JSON from Gemini: {e}") | |
| raise HTTPException( | |
| status_code=500, | |
| detail="Invalid response from personalization service" | |
| ) | |
| except Exception as e: | |
| logger.error(f"Gemini personalization error: {e}") | |
| raise HTTPException( | |
| status_code=503, | |
| detail="Personalization service temporarily unavailable" | |
| ) | |
| return PersonalizeResponse( | |
| personalized_content=result.get("personalized_content", ""), | |
| adjustments_made=result.get("adjustments_made", "") | |
| ) | |