Source code for maeser.controllers.chat_interface

"""Module for handling chat interface rendering.

This module contains a function to render the chat interface template with relevant data.

© 2024 Blaine Freestone, Carson Bush

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 flask import render_template

from maeser.chat.chat_logs import BaseChatLogsManager
# from flask_login import current_user

from maeser.chat.chat_session_manager import ChatSessionManager

[docs] def controller( chat_sessions_manager: ChatSessionManager, max_requests: int | None = None, rate_limit_interval: int | None = None, current_user=None, app_name: str | None = None, main_logo_light: str | None = None, main_logo_dark: str | None = None, chat_head: str | None = None, favicon: str | None = None, ): """ Renders the chat interface template with relevant data. Args: chat_sessions_manager (ChatSessionManager): The chat session manager object. max_requests (int, optional): The maximum number of requests a user can make. Defaults to None. rate_limit_interval (int, optional): The interval in seconds for rate limiting requests. Defaults to None. current_user (object, optional): The current user object. Defaults to None. Returns: The rendered 'chat_interface.html' template with the following data: - conversation: None (no active conversation) - buttons: The dictionary of available chat branches - links: A list of dictionaries representing previous chat sessions for the current user - requests_remaining: The number of requests remaining for the current user (10 if current_user is None) - max_requests_remaining: The maximum number of requests allowed - requests_remaining_interval_ms: The interval in milliseconds for rate limiting requests (rate_limit_interval * 1000 / 3) """ # Get chat log path and branches from chat sessions log_manager: BaseChatLogsManager | None = chat_sessions_manager.chat_logs_manager chat_branches: dict = chat_sessions_manager.branches links = log_manager.get_chat_history_overview(current_user) if log_manager else [] # Get rate limiting information if enabled requests_remaining: int | None = None if current_user is None else current_user.requests_remaining if rate_limit_interval: rate_limit_interval = rate_limit_interval * 1000 // 3 rate_limiting = bool(requests_remaining and rate_limit_interval and max_requests) user_management = True if current_user else False is_admin = current_user.admin if current_user else False return render_template( 'chat_interface.html', conversation=None, buttons=chat_branches, # dict links=links, # List[dict] requests_remaining=requests_remaining, # None | int max_requests_remaining=max_requests, # None | int requests_remaining_interval_ms=rate_limit_interval, # None | int rate_limiting=rate_limiting, # str user_management=user_management, # str main_logo_light=main_logo_light, # None | str main_logo_dark=main_logo_dark, # None | str chat_head=chat_head, # None | str favicon=favicon, # None | str app_name=app_name if app_name else "Maeser", # str is_admin=is_admin, # bool str=str, )