Source code for maeser.controllers.chat_logs_overview
"""
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.
© 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 flask import render_template, request
[docs]
def controller(chat_sessions_manager: ChatSessionManager, app_name: str | None = None, favicon: str | None = None) -> str:
"""
Render 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.
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', '')
feedback_filter = request.args.get('feedback', None)
chat_logs_overview, total_tokens, total_cost = chat_logs_manager.get_chat_logs_overview(sort_by, order, branch_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,
feedback_filter=feedback_filter,
total_tokens=total_tokens,
total_cost=total_cost,
favicon=favicon,
app_name=app_name if app_name else "Maeser",
)