From aa6c6035b6028fa120b7b74edf1558d99361e44b Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Fri, 25 Apr 2025 13:17:31 +0800 Subject: [PATCH] refactor: consolidate save model metadata functionality across APIs --- static/js/api/checkpointApi.js | 11 +++++--- static/js/api/loraApi.js | 25 ++++++++++++++++++ .../ContextMenu/CheckpointContextMenu.js | 4 +-- .../components/ContextMenu/LoraContextMenu.js | 19 ++------------ .../checkpointModal/ModelMetadata.js | 26 +------------------ static/js/components/checkpointModal/index.js | 4 +-- .../js/components/loraModal/ModelMetadata.js | 26 +------------------ static/js/components/loraModal/PresetTags.js | 3 +-- .../js/components/loraModal/TriggerWords.js | 2 +- static/js/components/loraModal/index.js | 4 +-- 10 files changed, 45 insertions(+), 79 deletions(-) diff --git a/static/js/api/checkpointApi.js b/static/js/api/checkpointApi.js index cbf6a66a..a1a59c96 100644 --- a/static/js/api/checkpointApi.js +++ b/static/js/api/checkpointApi.js @@ -62,8 +62,13 @@ export async function refreshSingleCheckpointMetadata(filePath) { return refreshSingleModelMetadata(filePath, 'checkpoint'); } -// Save checkpoint metadata (similar to the Lora version) -export async function saveCheckpointMetadata(filePath, data) { +/** + * Save model metadata to the server + * @param {string} filePath - Path to the model file + * @param {Object} data - Metadata to save + * @returns {Promise} - Promise that resolves with the server response + */ +export async function saveModelMetadata(filePath, data) { const response = await fetch('/api/checkpoints/save-metadata', { method: 'POST', headers: { @@ -79,5 +84,5 @@ export async function saveCheckpointMetadata(filePath, data) { throw new Error('Failed to save metadata'); } - return await response.json(); + return response.json(); } \ No newline at end of file diff --git a/static/js/api/loraApi.js b/static/js/api/loraApi.js index 5e433799..8c4cb9a5 100644 --- a/static/js/api/loraApi.js +++ b/static/js/api/loraApi.js @@ -9,6 +9,31 @@ import { refreshSingleModelMetadata } from './baseModelApi.js'; +/** + * Save model metadata to the server + * @param {string} filePath - File path + * @param {Object} data - Data to save + * @returns {Promise} Promise of the save operation + */ +export async function saveModelMetadata(filePath, data) { + const response = await fetch('/api/loras/save-metadata', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + file_path: filePath, + ...data + }) + }); + + if (!response.ok) { + throw new Error('Failed to save metadata'); + } + + return response.json(); +} + export async function loadMoreLoras(resetPage = false, updateFolders = false) { return loadMoreModels({ resetPage, diff --git a/static/js/components/ContextMenu/CheckpointContextMenu.js b/static/js/components/ContextMenu/CheckpointContextMenu.js index 975ac986..c0975bbe 100644 --- a/static/js/components/ContextMenu/CheckpointContextMenu.js +++ b/static/js/components/ContextMenu/CheckpointContextMenu.js @@ -1,5 +1,5 @@ import { BaseContextMenu } from './BaseContextMenu.js'; -import { refreshSingleCheckpointMetadata, saveCheckpointMetadata } from '../../api/checkpointApi.js'; +import { refreshSingleCheckpointMetadata, saveModelMetadata } from '../../api/checkpointApi.js'; import { showToast, getNSFWLevelName } from '../../utils/uiHelpers.js'; import { NSFW_LEVELS } from '../../utils/constants.js'; import { getStorageItem } from '../../utils/storageHelpers.js'; @@ -82,7 +82,7 @@ export class CheckpointContextMenu extends BaseContextMenu { if (!filePath) return; try { - await saveCheckpointMetadata(filePath, { preview_nsfw_level: level }); + await saveModelMetadata(filePath, { preview_nsfw_level: level }); // Update card data const card = document.querySelector(`.lora-card[data-filepath="${filePath}"]`); diff --git a/static/js/components/ContextMenu/LoraContextMenu.js b/static/js/components/ContextMenu/LoraContextMenu.js index 64382d0e..146c3d94 100644 --- a/static/js/components/ContextMenu/LoraContextMenu.js +++ b/static/js/components/ContextMenu/LoraContextMenu.js @@ -1,5 +1,5 @@ import { BaseContextMenu } from './BaseContextMenu.js'; -import { refreshSingleLoraMetadata } from '../../api/loraApi.js'; +import { refreshSingleLoraMetadata, saveModelMetadata } from '../../api/loraApi.js'; import { showToast, getNSFWLevelName } from '../../utils/uiHelpers.js'; import { NSFW_LEVELS } from '../../utils/constants.js'; import { getStorageItem } from '../../utils/storageHelpers.js'; @@ -111,22 +111,7 @@ export class LoraContextMenu extends BaseContextMenu { } async saveModelMetadata(filePath, data) { - const response = await fetch('/api/loras/save-metadata', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - file_path: filePath, - ...data - }) - }); - - if (!response.ok) { - throw new Error('Failed to save metadata'); - } - - return await response.json(); + return saveModelMetadata(filePath, data); } updateCardBlurEffect(card, level) { diff --git a/static/js/components/checkpointModal/ModelMetadata.js b/static/js/components/checkpointModal/ModelMetadata.js index 4bf7b2b3..18167f3b 100644 --- a/static/js/components/checkpointModal/ModelMetadata.js +++ b/static/js/components/checkpointModal/ModelMetadata.js @@ -5,31 +5,7 @@ import { showToast } from '../../utils/uiHelpers.js'; import { BASE_MODELS } from '../../utils/constants.js'; import { updateCheckpointCard } from '../../utils/cardUpdater.js'; - -/** - * Save model metadata to the server - * @param {string} filePath - Path to the model file - * @param {Object} data - Metadata to save - * @returns {Promise} - Promise that resolves with the server response - */ -export async function saveModelMetadata(filePath, data) { - const response = await fetch('/api/checkpoints/save-metadata', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - file_path: filePath, - ...data - }) - }); - - if (!response.ok) { - throw new Error('Failed to save metadata'); - } - - return response.json(); -} +import { saveModelMetadata } from '../../api/checkpointApi.js'; /** * Set up model name editing functionality diff --git a/static/js/components/checkpointModal/index.js b/static/js/components/checkpointModal/index.js index 879f9218..9212d57b 100644 --- a/static/js/components/checkpointModal/index.js +++ b/static/js/components/checkpointModal/index.js @@ -11,9 +11,9 @@ import { setupTabSwitching, loadModelDescription } from './ModelDescription.js'; import { setupModelNameEditing, setupBaseModelEditing, - setupFileNameEditing, - saveModelMetadata + setupFileNameEditing } from './ModelMetadata.js'; +import { saveModelMetadata } from '../../api/checkpointApi.js'; import { renderCompactTags, setupTagTooltip, formatFileSize } from './utils.js'; import { updateCheckpointCard } from '../../utils/cardUpdater.js'; diff --git a/static/js/components/loraModal/ModelMetadata.js b/static/js/components/loraModal/ModelMetadata.js index eb0a3d18..81300150 100644 --- a/static/js/components/loraModal/ModelMetadata.js +++ b/static/js/components/loraModal/ModelMetadata.js @@ -5,31 +5,7 @@ import { showToast } from '../../utils/uiHelpers.js'; import { BASE_MODELS } from '../../utils/constants.js'; import { updateLoraCard } from '../../utils/cardUpdater.js'; - -/** - * 保存模型元数据到服务器 - * @param {string} filePath - 文件路径 - * @param {Object} data - 要保存的数据 - * @returns {Promise} 保存操作的Promise - */ -export async function saveModelMetadata(filePath, data) { - const response = await fetch('/api/loras/save-metadata', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - file_path: filePath, - ...data - }) - }); - - if (!response.ok) { - throw new Error('Failed to save metadata'); - } - - return response.json(); -} +import { saveModelMetadata } from '../../api/loraApi.js'; /** * 设置模型名称编辑功能 diff --git a/static/js/components/loraModal/PresetTags.js b/static/js/components/loraModal/PresetTags.js index a6abab2b..4e331159 100644 --- a/static/js/components/loraModal/PresetTags.js +++ b/static/js/components/loraModal/PresetTags.js @@ -2,8 +2,7 @@ * PresetTags.js * 处理LoRA模型预设参数标签相关的功能模块 */ -import { saveModelMetadata } from './ModelMetadata.js'; -import { showToast } from '../../utils/uiHelpers.js'; +import { saveModelMetadata } from '../../api/loraApi.js'; /** * 解析预设参数 diff --git a/static/js/components/loraModal/TriggerWords.js b/static/js/components/loraModal/TriggerWords.js index e80c9e39..5c9004f3 100644 --- a/static/js/components/loraModal/TriggerWords.js +++ b/static/js/components/loraModal/TriggerWords.js @@ -3,7 +3,7 @@ * 处理LoRA模型触发词相关的功能模块 */ import { showToast, copyToClipboard } from '../../utils/uiHelpers.js'; -import { saveModelMetadata } from './ModelMetadata.js'; +import { saveModelMetadata } from '../../api/loraApi.js'; /** * 渲染触发词 diff --git a/static/js/components/loraModal/index.js b/static/js/components/loraModal/index.js index 69e71675..db9b41e5 100644 --- a/static/js/components/loraModal/index.js +++ b/static/js/components/loraModal/index.js @@ -13,9 +13,9 @@ import { loadRecipesForLora } from './RecipeTab.js'; // Add import for recipe ta import { setupModelNameEditing, setupBaseModelEditing, - setupFileNameEditing, - saveModelMetadata + setupFileNameEditing } from './ModelMetadata.js'; +import { saveModelMetadata } from '../../api/loraApi.js'; import { renderCompactTags, setupTagTooltip, formatFileSize } from './utils.js'; import { updateLoraCard } from '../../utils/cardUpdater.js';