Source code for maeser.controllers.chat_api

"""Module for handling chat API requests.

This module contains the controller function for managing chat sessions and processing incoming messages.

© 2024 Carson Bush, Blaine Freestone

This file is part of Maeser.

Maeser is free software: you can redistribute it and/or modify it under the terms of
the GNU Lesser General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

Maeser is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with
Maeser. If not, see <https://www.gnu.org/licenses/>.
"""

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): """Handle incoming messages for a chat session. 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}