Add LoRA activation words and hide LoRAs that do not match the current engine.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -159,6 +159,7 @@
|
||||
<p class="mt-1 text-sm text-zinc-400">
|
||||
Short names used in auto-generated output titles. Leave blank to use the file stem
|
||||
(<span class="text-zinc-300">XAIgen-cline</span> becomes <span class="text-zinc-300">cline</span>).
|
||||
Activation is the word or phrase the <span class="text-zinc-300">i</span> on a LoRA slider inserts into the prompt.
|
||||
</p>
|
||||
</div>
|
||||
<p v-if="loraRowsLoading" class="text-sm text-zinc-500">Loading LoRAs…</p>
|
||||
@@ -172,13 +173,22 @@
|
||||
<p class="truncate text-sm text-zinc-200">{{ row.file }}</p>
|
||||
<p class="text-[10px] uppercase tracking-wide text-zinc-600">{{ row.kind === 'both' ? 'Image · Video' : row.kind }}</p>
|
||||
</div>
|
||||
<input
|
||||
v-model="row.draft"
|
||||
class="w-full rounded-xl border border-white/10 bg-zinc-950 px-3 py-2 text-sm sm:w-44"
|
||||
:placeholder="row.placeholder"
|
||||
maxlength="24"
|
||||
@change="saveLoraAlias(row)"
|
||||
>
|
||||
<div class="flex w-full flex-col gap-2 sm:w-56">
|
||||
<input
|
||||
v-model="row.draft"
|
||||
class="w-full rounded-xl border border-white/10 bg-zinc-950 px-3 py-2 text-sm"
|
||||
:placeholder="row.placeholder"
|
||||
maxlength="24"
|
||||
@change="saveLoraAlias(row)"
|
||||
>
|
||||
<input
|
||||
v-model="row.trigger"
|
||||
class="w-full rounded-xl border border-white/10 bg-zinc-950 px-3 py-2 text-sm"
|
||||
placeholder="Activation word"
|
||||
maxlength="240"
|
||||
@change="saveLoraTrigger(row)"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -279,7 +289,7 @@ const newPresetName = ref('')
|
||||
const newPresetPrompt = ref('')
|
||||
const promptPresets = ref<Array<{ id: string; name: string; description?: string; builtin?: boolean; systemPrompt?: string }>>([])
|
||||
const loraRowsLoading = ref(true)
|
||||
const loraRows = ref<Array<{ key: string; file: string; kind: 'image' | 'video' | 'both'; draft: string; placeholder: string }>>([])
|
||||
const loraRows = ref<Array<{ key: string; file: string; kind: 'image' | 'video' | 'both'; draft: string; trigger: string; placeholder: string }>>([])
|
||||
const loginUser = ref(props.username || '')
|
||||
const loginCurrent = ref('')
|
||||
const loginNext = ref('')
|
||||
@@ -462,9 +472,10 @@ async function loadLoraKeys() {
|
||||
loraRowsLoading.value = true
|
||||
try {
|
||||
const listed = await $fetch<{ image?: string[]; video?: string[] }>('/api/loras').catch(() => ({ image: [], video: [] }))
|
||||
const library = await $fetch<{ loraAliases?: Record<string, string> }>('/api/library?light=1').catch(() => ({ loraAliases: {} }))
|
||||
const library = await $fetch<{ loraAliases?: Record<string, string>; loraTriggers?: Record<string, string> }>('/api/library?light=1').catch(() => ({ loraAliases: {}, loraTriggers: {} }))
|
||||
const aliases = library.loraAliases || {}
|
||||
const map = new Map<string, { key: string; file: string; kind: 'image' | 'video' | 'both'; draft: string; placeholder: string }>()
|
||||
const triggers = library.loraTriggers || {}
|
||||
const map = new Map<string, { key: string; file: string; kind: 'image' | 'video' | 'both'; draft: string; trigger: string; placeholder: string }>()
|
||||
const add = (name: string, kind: 'image' | 'video') => {
|
||||
if (isFilenameSystemLora(name)) return
|
||||
const key = loraIdentityKey(name)
|
||||
@@ -479,6 +490,7 @@ async function loadLoraKeys() {
|
||||
file: loraDisplayName(name),
|
||||
kind,
|
||||
draft: aliases[key] || '',
|
||||
trigger: triggers[key] || '',
|
||||
placeholder: defaultLoraFilenameKey(name)
|
||||
})
|
||||
}
|
||||
@@ -501,6 +513,17 @@ async function saveLoraAlias(row: { key: string; draft: string }) {
|
||||
}
|
||||
}
|
||||
|
||||
async function saveLoraTrigger(row: { key: string; trigger: string }) {
|
||||
try {
|
||||
emit('updated', await $fetch('/api/library/lora-triggers', {
|
||||
method: 'PUT',
|
||||
body: { key: row.key, trigger: row.trigger }
|
||||
}))
|
||||
} catch (error: any) {
|
||||
emit('error', error?.data?.statusMessage || 'Could not save LoRA activation word')
|
||||
}
|
||||
}
|
||||
|
||||
async function addPreset() {
|
||||
const name = newPresetName.value.trim()
|
||||
const systemPrompt = newPresetPrompt.value.trim()
|
||||
|
||||
Reference in New Issue
Block a user