feat: Refactor model type determination to use state for saving metadata and handling events

This commit is contained in:
Will Miao
2025-07-22 16:44:21 +08:00
parent fcfc868e57
commit c82fabb67f
4 changed files with 8 additions and 31 deletions

View File

@@ -61,12 +61,6 @@ export async function loadModelDescription(modelId, filePath) {
// Determine API endpoint based on file path or context
let apiEndpoint = `/api/lora-model-description?model_id=${modelId}&file_path=${encodeURIComponent(filePath)}`;
// If this is a checkpoint (can be determined from file path or other context)
if (filePath.includes('.safetensors') || filePath.includes('.ckpt')) {
// For now, use the same endpoint - can be updated later if checkpoint-specific endpoint is needed
apiEndpoint = `/api/lora-model-description?model_id=${modelId}&file_path=${encodeURIComponent(filePath)}`;
}
// Try to get model description from API
const response = await fetch(apiEndpoint);

View File

@@ -114,9 +114,7 @@ export function setupModelNameEditing(filePath) {
// Get the file path from the dataset
const filePath = this.dataset.filePath;
// Determine model type based on file extension
const isCheckpoint = filePath.includes('.safetensors') || filePath.includes('.ckpt');
const saveFunction = isCheckpoint ? saveCheckpointMetadata : saveLoraMetadata;
const saveFunction = state.currentPageType === 'checkpoints' ? saveCheckpointMetadata : saveLoraMetadata;
await saveFunction(filePath, { model_name: newModelName });
@@ -297,9 +295,7 @@ async function saveBaseModel(filePath, originalValue) {
}
try {
// Determine model type based on file extension
const isCheckpoint = filePath.includes('.safetensors') || filePath.includes('.ckpt');
const saveFunction = isCheckpoint ? saveCheckpointMetadata : saveLoraMetadata;
const saveFunction = state.currentPageType === 'checkpoints' ? saveCheckpointMetadata : saveLoraMetadata;
await saveFunction(filePath, { base_model: newBaseModel });
@@ -421,19 +417,10 @@ export function setupFileNameEditing(filePath) {
// Get the file path from the dataset
const filePath = this.dataset.filePath;
// Determine model type and use appropriate rename function
const isCheckpoint = filePath.includes('.safetensors') || filePath.includes('.ckpt');
let result;
if (isCheckpoint) {
// Use checkpoint rename function if it exists, otherwise fallback to generic approach
if (typeof renameCheckpointFile === 'function') {
result = await renameCheckpointFile(filePath, newFileName);
} else {
// Fallback: use checkpoint metadata save function
await saveCheckpointMetadata(filePath, { file_name: newFileName });
result = { success: true };
}
if (state.currentPageType === 'checkpoints') {
result = await renameCheckpointFile(filePath, newFileName);
} else {
// Use LoRA rename function
result = await renameLoraFile(filePath, newFileName);

View File

@@ -150,12 +150,9 @@ export function showModelModal(model, modelType) {
</div>
${typeSpecificContent}
<div class="info-item notes">
<label>Additional Notes ${modelType === 'lora' ? '<i class="fas fa-info-circle notes-hint" title="Press Enter to save, Shift+Enter for new line"></i>' : ''}</label>
<label>Additional Notes <i class="fas fa-info-circle notes-hint" title="Press Enter to save, Shift+Enter for new line"></i></label>
<div class="editable-field">
<div class="notes-content" contenteditable="true" spellcheck="false">${model.notes || 'Add your notes here...'}</div>
${modelType === 'checkpoint' ? `<button class="save-btn" onclick="saveModelNotes('${model.file_path}', '${modelType}')">
<i class="fas fa-save"></i>
</button>` : ''}
</div>
</div>
<div class="info-item full-width">
@@ -283,7 +280,7 @@ function setupEventHandlers(filePath) {
}
/**
* Set up editable fields in the model modal
* Set up editable fields (notes and usage tips) in the model modal
* @param {string} filePath - The full file path of the model
* @param {string} modelType - Type of model ('lora' or 'checkpoint')
*/

View File

@@ -5,6 +5,7 @@
import { showToast } from '../../utils/uiHelpers.js';
import { saveModelMetadata as saveLoraMetadata } from '../../api/loraApi.js';
import { saveModelMetadata as saveCheckpointMetadata } from '../../api/checkpointApi.js';
import { state } from '../../state/index.js';
// Preset tag suggestions
const PRESET_TAGS = [
@@ -164,9 +165,7 @@ async function saveTags() {
}
try {
// Determine model type and use appropriate save function
const isCheckpoint = filePath.includes('.safetensors') || filePath.includes('.ckpt');
const saveFunction = isCheckpoint ? saveCheckpointMetadata : saveLoraMetadata;
const saveFunction = state.currentPageType === 'checkpoints' ? saveCheckpointMetadata : saveLoraMetadata;
// Save tags metadata
await saveFunction(filePath, { tags: tags });