Source code for maeser.controllers.chat_api
# SPDX-License-Identifier: LGPL-3.0-or-later
"""Module for handling chat API requests.
This module contains the controller function for managing chat sessions and processing incoming messages.
"""
from maeser.chat.chat_session_manager import ChatSessionManager
from maeser.render import get_response_html
from flask import request, abort
from openai import RateLimitError
[docs]
def controller(chat_sessions_manager: ChatSessionManager, chat_session: str) -> dict:
"""Handles incoming messages for a chat session.
Asks the chatbot a question and retrieves the chatbot's response (in HTML format converted from markdown).
Args:
chat_sessions_manager (ChatSessionManager): The manager for chat sessions.
chat_session (str): Chat session ID.
Returns:
dict: Response containing the HTML representation of the response.
"""
posty = request.get_json()
try:
response = chat_sessions_manager.ask_question(
posty["message"], posty["action"], chat_session
)
except RateLimitError as e:
print(f"{type(e)}, {e}: Rate limit reached")
abort(503, description="Rate limit reached, please try again later")
return {
"response": get_response_html(response["messages"][-1]),
"index": len(response["messages"]) - 1,
}