feat(nodes): add Promp (LoraManager) node and autocomplete support

This commit is contained in:
Will Miao
2025-10-13 23:23:32 +08:00
parent 8c037465ba
commit 1e4d1b8f15
10 changed files with 546 additions and 292 deletions

View File

@@ -383,27 +383,31 @@ export function mergeLoras(lorasText, lorasArr) {
* @param {Object} node - The node instance
* @param {Object} inputWidget - The input widget to add autocomplete to
* @param {Function} originalCallback - The original callback function
* @param {string} [modelType='loras'] - The model type used by the autocomplete API
* @param {Object} [autocompleteOptions] - Additional options for the autocomplete instance
* @returns {Function} Enhanced callback function with autocomplete
*/
export function setupInputWidgetWithAutocomplete(node, inputWidget, originalCallback) {
export function setupInputWidgetWithAutocomplete(node, inputWidget, originalCallback, modelType = 'loras', autocompleteOptions = {}) {
let autocomplete = null;
const defaultOptions = {
maxItems: 20,
minChars: 1,
debounceDelay: 200,
};
const mergedOptions = { ...defaultOptions, ...autocompleteOptions };
// Enhanced callback that initializes autocomplete and calls original callback
const enhancedCallback = (value) => {
// Initialize autocomplete on first callback if not already done
if (!autocomplete && inputWidget.inputEl) {
autocomplete = new AutoComplete(inputWidget.inputEl, 'loras', {
maxItems: 20,
minChars: 1,
debounceDelay: 200
});
autocomplete = new AutoComplete(inputWidget.inputEl, modelType, mergedOptions);
// Store reference for cleanup
node.autocomplete = autocomplete;
}
// Call the original callback
if (originalCallback) {
originalCallback(value);
if (typeof originalCallback === "function") {
originalCallback.call(node, value);
}
};
@@ -457,4 +461,4 @@ export function forwardMiddleMouseToCanvas(container) {
app.canvas.processMouseUp(event);
}
});
}
}