53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
# modules/nlp/api.py
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
|
|
from core.database import get_db
|
|
from core.exceptions import bad_request_exception
|
|
|
|
from modules.auth.dependencies import get_current_user
|
|
from modules.auth.models import User
|
|
from modules.nlp.service import process_request, ask_ai
|
|
from modules.calendar.service import create_calendar_event, get_calendar_events, update_calendar_event, delete_calendar_event
|
|
from modules.calendar.schemas import CalendarEventCreate
|
|
|
|
|
|
router = APIRouter(prefix="/nlp", tags=["nlp"])
|
|
|
|
@router.post("/process-command")
|
|
def process_command(user_input: str, current_user: User = Depends(get_current_user), db: Session = Depends(get_db)):
|
|
"""
|
|
Process the user command and return the appropriate action.
|
|
"""
|
|
command = process_request(user_input)
|
|
|
|
if "error" in command:
|
|
raise bad_request_exception(command["error"])
|
|
|
|
match command["intent"]:
|
|
case "ask_ai":
|
|
result = ask_ai(**command["params"])
|
|
return {"action": "ai_response", "details": result}
|
|
|
|
case "get_calendar_events":
|
|
result = get_calendar_events(db, current_user.id, **command["params"])
|
|
return {"action": "calendar_events_retrieved", "details": result}
|
|
|
|
case "add_calendar_event":
|
|
event = CalendarEventCreate(**command["params"])
|
|
result = create_calendar_event(db, current_user.id, event)
|
|
return {"action": "calendar_event_created", "details": result}
|
|
|
|
case "update_calendar_event":
|
|
event = CalendarEventCreate(**command["params"])
|
|
result = update_calendar_event(db, current_user.id, 0, event_data=event) ## PLACEHOLDER
|
|
return {"action": "calendar_event_updated", "details": result}
|
|
|
|
case "delete_calendar_event":
|
|
result = update_calendar_event(db, current_user.id, 0) ## PLACEHOLDER
|
|
return {"action": "calendar_event_deleted", "details": result}
|
|
|
|
case "unknown":
|
|
return {"action": "unknown_command", "details": command["params"]}
|
|
case _:
|
|
raise bad_request_exception(400, detail="Unrecognized command") |