update webui for new folder struct

This commit is contained in:
51616 2025-02-18 08:11:31 +00:00
parent 5a185ff1dd
commit 7ce5316041
2 changed files with 90 additions and 16 deletions

View file

@ -10,7 +10,7 @@ from transformers import pipeline
app = Flask(__name__)
TRAIN_OUTPUTS_DIR = "train_outputs"
TRAIN_OUTPUTS_DIR = "train_outputs/runs"
chat_generator = None
chat_model_name = None
chat_history = None
@ -142,13 +142,41 @@ def visualize(run):
if not os.path.isdir(logdir):
abort(404, description=f"Run '{run}' not found.")
data = get_run_data(logdir)
if data is None:
abort(404, description=f"'all_results.json' not found in '{run}'.")
eval_folders = [
d
for d in os.listdir(logdir)
if os.path.isdir(os.path.join(logdir, d)) and d.startswith("eval-results-")
]
eval_folders.sort(
key=lambda d: os.path.getctime(os.path.join(logdir, d)),
reverse=True,
)
generated_data = get_generated_text_data(logdir)
selected_eval_folder = request.args.get("eval_folder")
# Load config.yaml from the run directory
if eval_folders and selected_eval_folder:
# New structure with eval folders and a folder is selected
eval_path = os.path.join(logdir, selected_eval_folder)
data = get_run_data(eval_path)
if data is None:
abort(
404,
description=f"'all_results.json' not found in '{selected_eval_folder}'.",
)
generated_data = get_generated_text_data(eval_path)
elif not eval_folders:
# Old structure: eval results in the root folder
data = get_run_data(logdir)
if data is None:
abort(404, description=f"'all_results.json' not found in '{run}'.")
generated_data = get_generated_text_data(logdir)
selected_eval_folder = "root" # Indicate root folder for template
else:
# New structure, but no eval folder selected yet
data = None
generated_data = None
# Load config.yaml from the run directory (root level)
config_path = os.path.join(logdir, "config.yaml")
try:
with open(config_path) as f:
@ -160,6 +188,8 @@ def visualize(run):
return render_template(
"visualize.html",
run=run,
eval_folders=eval_folders,
selected_eval_folder=selected_eval_folder,
data=data,
generated_data=generated_data,
model_name=model_name,

View file

@ -213,6 +213,23 @@
}
/* Removed system-msg-container button styles */
#eval-folder-selection {
margin-bottom: 20px;
}
#eval-folder-selection label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
#eval-folder-selection select {
width: 300px;
padding: 8px;
border: 1px solid #ddd;
border-radius: 5px;
}
</style>
{% endblock %}
@ -227,8 +244,23 @@
<div class="container">
<div class="column">
{% if eval_folders %} <!-- Conditionally show folder selection if eval_folders exist -->
<div id="eval-folder-selection">
<label for="eval_folder">Select Evaluation Folder:</label>
<select id="eval_folder" onchange="loadEvalFolder()">
<option value="">-- Select Folder --</option>
{% for folder in eval_folders %}
<option value="{{ folder }}" {% if selected_eval_folder==folder %}selected{% endif %}>{{ folder }}
</option>
{% endfor %}
</select>
</div>
{% endif %}
{% if data %}
{% for group, results in data.items() %}
<h2>{{ group }}</h2>
<h2>{{ group }} ({% if selected_eval_folder and selected_eval_folder != "root" %}{{ selected_eval_folder }}{%
else %}root{% endif %})</h2>
<table class="performance-table">
<thead>
<tr>
@ -267,6 +299,7 @@
</tbody>
</table>
{% endfor %}
{% endif %}
</div>
<div class="column">
@ -274,7 +307,8 @@
{% for split, data in generated_data.items() %}
{% if data %}
<div class="generated-text-container">
<h2>Generated Text ({{ split }})</h2>
<h2>Generated Text ({{ split }} - {% if selected_eval_folder and selected_eval_folder != "root" %}{{
selected_eval_folder }}{% else %}root{% endif %})</h2>
<div id="{{ split }}-text" class="generated-text-display">
<p id="{{ split }}-context-container" style="display: none;">
<strong>Context:</strong> <span id="{{ split }}-context"></span>
@ -294,8 +328,9 @@
</div>
{% endif %}
{% endfor %}
{% else %}
<p>No generated text data found.</p>
{% elif selected_eval_folder %}
<p>No generated text data found in {% if selected_eval_folder and selected_eval_folder != "root" %}{{
selected_eval_folder }}{% else %}root{% endif %}.</p>
{% endif %}
<div id="load-chat-container">
@ -358,15 +393,18 @@
updateText(split);
}
// Initialize text for each split using JavaScript
// Initialize text for each split using JavaScript if generatedData is available
window.addEventListener('DOMContentLoaded', (event) => {
for (const split in generatedData) {
if (generatedData[split].length > 0) {
updateText(split);
if (generatedData && Object.keys(generatedData).length > 0) {
for (const split in generatedData) {
if (generatedData[split].length > 0) {
updateText(split);
}
}
}
});
function goBack() {
window.history.back();
}
@ -488,9 +526,15 @@
chatOutput.scrollTop = chatOutput.scrollHeight;
}
// Removed the separate updateSystemMsg function
function loadEvalFolder() {
const selectedFolder = document.getElementById('eval_folder').value;
const runName = '{{ run }}';
if (selectedFolder) {
window.location.href = `/visualize/${runName}?eval_folder=${selectedFolder}`;
}
}
// Updated sendMessage function handles system msg update and chat message
// Bind the sendMessage function to the Enter key
document.getElementById('chat-input').addEventListener('keypress', function (e) {
if (e.key === 'Enter') {