Source code for maeser.controllers.chat_logs_overview

# SPDX-License-Identifier: LGPL-3.0-or-later

"""
This module contains the controller function for rendering the chat logs overview page.

It handles fetching log files, applying filters, and calculating aggregate data such as total tokens and cost.
"""

from maeser.chat.chat_session_manager import ChatSessionManager

from flask import render_template, request


[docs] def controller( chat_sessions_manager: ChatSessionManager, app_name: str = "Maeser", main_logo_chat: str | None = None, favicon: str | None = None, ) -> str: """ Renders the home page with log files and aggregate token and cost data. Args: chat_sessions_manager (ChatSessionManager): An instance of ChatSessionManager to manage chat sessions. app_name (str): The name of the app. This will be populated in the page's title element and header. Defaults to 'Maeser'. main_logo_chat (str | None): The dark version of the main logo. Defaults to None, in which case maeser/data/static/maeser-dark-header.png is used. favicon (str | None): The favicon image URL. Defaults to None, in which case maeser/data/static/maeser.png is used. Returns: str: Rendered home template with log file list. """ chat_logs_manager = chat_sessions_manager.chat_logs_manager chat_branches = chat_sessions_manager.branches sort_by: str = request.args.get( "sort_by", "modified" ) # Default sorting by modification time order = request.args.get("order", "desc") # Default sorting order is descending branch_filter = request.args.get("branch", "") user_filter = request.args.get("user", "") feedback_filter = request.args.get("feedback", None) chat_logs_overview, total_tokens, total_cost, users = ( chat_logs_manager.get_chat_logs_overview( sort_by, order, branch_filter, user_filter, feedback_filter ) if chat_logs_manager else [] ) branches = [branch for branch in chat_branches] if chat_branches else [] return render_template( "chat_logs_overview.html", log_files=chat_logs_overview, branches=branches, sort_by=sort_by, order=order, branch_filter=branch_filter, user_filter=user_filter, feedback_filter=feedback_filter, total_tokens=total_tokens, total_cost=total_cost, users=users, main_logo_chat=main_logo_chat, favicon=favicon, app_name=app_name, )