feat: implement prompt auto-formatter function

- Splits text by lines and cleans up tags separated by commas
- Removes redundant spaces and empty tags
- Ensures each valid line ends with a comma and space
- Preserves empty lines for readability
This commit is contained in:
BlakeNeko
2025-11-13 11:11:02 +08:00
parent 42f5e73515
commit 70f916b825
+51
View File
@@ -654,3 +654,54 @@ export function getScrollbarWidth() {
return _cachedScrollbarWidth;
}
/**
* Format the prompt text: add a comma and space after each tag, and remove extra spaces.
* Preserve special syntax such as weights (tag:1.2), parentheses, and wildcards.
* @param {string} text - The original text.
* @returns {string} - The formatted text.
*/
export function formatPromptText(text) {
if (!text || text.trim().length === 0) return text;
// Split text into individual lines for processing
const lines = text.split('\n');
const formattedLines = [];
for (const line of lines) {
const trimmedLine = line.trim();
// Keep empty lines unchanged
if (trimmedLine.length === 0) {
formattedLines.push('');
continue;
}
// Split the line by commas into raw tag segments
const rawTags = trimmedLine.split(',');
const cleanedTags = [];
for (const tag of rawTags) {
// Trim spaces around each tag
const trimmedTag = tag.trim();
// Keep only non-empty tags
if (trimmedTag.length > 0) {
cleanedTags.push(trimmedTag);
}
}
// Rejoin cleaned tags with ", "
let formattedLine = cleanedTags.join(', ');
// Add a trailing comma and space if the line contains valid tags
if (formattedLine.length > 0) {
formattedLine += ', ';
}
formattedLines.push(formattedLine);
}
// Rejoin all lines with newline characters
return formattedLines.join('\n');
}