mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-06 16:16:42 +08:00
feat: add collapsible section for AI agent settings to reduce visual clutter
This commit is contained in:
@@ -191,6 +191,9 @@ const advancedDialog = ref(false)
|
|||||||
const savingBasic = ref(false)
|
const savingBasic = ref(false)
|
||||||
const testingLlm = ref(false)
|
const testingLlm = ref(false)
|
||||||
|
|
||||||
|
// 智能助手配置项较多,默认收起以降低基础设置页的视觉占用。
|
||||||
|
const aiAgentSettingsCollapsed = ref(true)
|
||||||
|
|
||||||
type LlmSettingsSnapshot = {
|
type LlmSettingsSnapshot = {
|
||||||
AI_AGENT_ENABLE: boolean
|
AI_AGENT_ENABLE: boolean
|
||||||
LLM_PROVIDER: string
|
LLM_PROVIDER: string
|
||||||
@@ -997,7 +1000,7 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
|
|||||||
variant="outlined"
|
variant="outlined"
|
||||||
:class="['mt-6', isTransparentTheme ? 'ai-agent-settings-card-transparent' : 'ai-agent-settings-card']"
|
:class="['mt-6', isTransparentTheme ? 'ai-agent-settings-card-transparent' : 'ai-agent-settings-card']"
|
||||||
>
|
>
|
||||||
<VCardItem class="pb-2">
|
<VCardItem class="pb-3">
|
||||||
<template #prepend>
|
<template #prepend>
|
||||||
<VAvatar color="primary" variant="tonal" size="40">
|
<VAvatar color="primary" variant="tonal" size="40">
|
||||||
<VIcon icon="mdi-robot-outline" />
|
<VIcon icon="mdi-robot-outline" />
|
||||||
@@ -1009,437 +1012,457 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
|
|||||||
<VCardSubtitle>
|
<VCardSubtitle>
|
||||||
{{ t('setting.system.aiAgentSectionDesc') }}
|
{{ t('setting.system.aiAgentSectionDesc') }}
|
||||||
</VCardSubtitle>
|
</VCardSubtitle>
|
||||||
|
<template #append>
|
||||||
|
<VTooltip location="top">
|
||||||
|
<template #activator="{ props }">
|
||||||
|
<VBtn
|
||||||
|
v-bind="props"
|
||||||
|
:icon="aiAgentSettingsCollapsed ? 'mdi-chevron-down' : 'mdi-chevron-up'"
|
||||||
|
variant="text"
|
||||||
|
color="primary"
|
||||||
|
size="small"
|
||||||
|
:aria-label="aiAgentSettingsCollapsed ? t('setting.about.expand') : t('setting.about.collapse')"
|
||||||
|
@click="aiAgentSettingsCollapsed = !aiAgentSettingsCollapsed"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<span>{{
|
||||||
|
aiAgentSettingsCollapsed ? t('setting.about.expand') : t('setting.about.collapse')
|
||||||
|
}}</span>
|
||||||
|
</VTooltip>
|
||||||
|
</template>
|
||||||
</VCardItem>
|
</VCardItem>
|
||||||
<VCardText class="pt-2">
|
<VExpandTransition>
|
||||||
<VRow>
|
<VCardText v-show="!aiAgentSettingsCollapsed" class="pt-2">
|
||||||
<VCol cols="12" md="4">
|
<VRow>
|
||||||
<VSwitch
|
<VCol cols="12" md="4">
|
||||||
v-model="SystemSettings.Basic.AI_AGENT_ENABLE"
|
<VSwitch
|
||||||
:label="t('setting.system.aiAgentEnable')"
|
v-model="SystemSettings.Basic.AI_AGENT_ENABLE"
|
||||||
:hint="t('setting.system.aiAgentEnableHint')"
|
:label="t('setting.system.aiAgentEnable')"
|
||||||
persistent-hint
|
:hint="t('setting.system.aiAgentEnableHint')"
|
||||||
/>
|
persistent-hint
|
||||||
</VCol>
|
/>
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
|
</VCol>
|
||||||
<VSwitch
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
|
||||||
v-model="SystemSettings.Basic.AI_AGENT_GLOBAL"
|
<VSwitch
|
||||||
:label="t('setting.system.aiAgentGlobal')"
|
v-model="SystemSettings.Basic.AI_AGENT_GLOBAL"
|
||||||
:hint="t('setting.system.aiAgentGlobalHint')"
|
:label="t('setting.system.aiAgentGlobal')"
|
||||||
persistent-hint
|
:hint="t('setting.system.aiAgentGlobalHint')"
|
||||||
/>
|
persistent-hint
|
||||||
</VCol>
|
/>
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
|
</VCol>
|
||||||
<VSwitch
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
|
||||||
v-model="SystemSettings.Basic.AI_AGENT_VERBOSE"
|
<VSwitch
|
||||||
:label="t('setting.system.aiAgentVerbose')"
|
v-model="SystemSettings.Basic.AI_AGENT_VERBOSE"
|
||||||
:hint="t('setting.system.aiAgentVerboseHint')"
|
:label="t('setting.system.aiAgentVerbose')"
|
||||||
persistent-hint
|
:hint="t('setting.system.aiAgentVerboseHint')"
|
||||||
/>
|
persistent-hint
|
||||||
</VCol>
|
/>
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
</VCol>
|
||||||
<VAutocomplete
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
v-model="SystemSettings.Basic.LLM_PROVIDER"
|
<VAutocomplete
|
||||||
:label="t('setting.system.llmProvider')"
|
v-model="SystemSettings.Basic.LLM_PROVIDER"
|
||||||
:hint="t('setting.system.llmProviderHint')"
|
:label="t('setting.system.llmProvider')"
|
||||||
persistent-hint
|
:hint="t('setting.system.llmProviderHint')"
|
||||||
:items="llmProviderItems"
|
persistent-hint
|
||||||
:loading="loadingLlmProviders"
|
:items="llmProviderItems"
|
||||||
prepend-inner-icon="mdi-robot"
|
:loading="loadingLlmProviders"
|
||||||
@update:model-value="handleLlmProviderChanged"
|
prepend-inner-icon="mdi-robot"
|
||||||
/>
|
@update:model-value="handleLlmProviderChanged"
|
||||||
</VCol>
|
/>
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showBaseUrlField" cols="12" md="6">
|
</VCol>
|
||||||
<VCombobox
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showBaseUrlField" cols="12" md="6">
|
||||||
:model-value="SystemSettings.Basic.LLM_BASE_URL"
|
|
||||||
@update:model-value="
|
|
||||||
(value: any) => {
|
|
||||||
if (typeof value === 'object' && value !== null) {
|
|
||||||
setBaseUrlPreset(value.id, value.value)
|
|
||||||
} else {
|
|
||||||
setBaseUrlPreset('', value || '')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"
|
|
||||||
:label="t('setting.system.llmBaseUrl')"
|
|
||||||
:hint="t('setting.system.llmBaseUrlHint')"
|
|
||||||
:placeholder="selectedLlmProvider?.default_base_url || 'https://api.deepseek.com'"
|
|
||||||
:items="llmBaseUrlPresetItems"
|
|
||||||
item-title="title"
|
|
||||||
item-value="value"
|
|
||||||
persistent-hint
|
|
||||||
prepend-inner-icon="mdi-link"
|
|
||||||
>
|
|
||||||
<template #item="{ props, item }">
|
|
||||||
<VListItem v-bind="props" :subtitle="item.raw.subtitle" />
|
|
||||||
</template>
|
|
||||||
</VCombobox>
|
|
||||||
</VCol>
|
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showApiKeyField" cols="12" md="6">
|
|
||||||
<VTextField
|
|
||||||
v-model="SystemSettings.Basic.LLM_API_KEY"
|
|
||||||
:label="selectedLlmProvider?.api_key_label || t('setting.system.llmApiKey')"
|
|
||||||
:hint="selectedLlmProvider?.api_key_hint || t('setting.system.llmApiKeyHint')"
|
|
||||||
:placeholder="t('setting.system.llmApiKeyPlaceholder')"
|
|
||||||
persistent-hint
|
|
||||||
type="password"
|
|
||||||
prepend-inner-icon="mdi-key-variant"
|
|
||||||
/>
|
|
||||||
</VCol>
|
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && llmProviderAuthMethods.length > 0" cols="12">
|
|
||||||
<VAlert type="info" variant="tonal">
|
|
||||||
<div class="d-flex flex-column flex-md-row justify-space-between ga-3">
|
|
||||||
<div>
|
|
||||||
<div class="text-subtitle-2">{{ t('setting.system.llmProviderAuth') }}</div>
|
|
||||||
<div class="text-body-2">
|
|
||||||
{{ selectedLlmProvider?.description || t('setting.system.llmProviderAuthHint') }}
|
|
||||||
</div>
|
|
||||||
<div v-if="providerConnected" class="text-body-2 mt-2">
|
|
||||||
{{
|
|
||||||
t('setting.system.llmProviderConnectedAs', {
|
|
||||||
label: llmProviderAuthLabel || selectedLlmProvider?.name,
|
|
||||||
})
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="d-flex flex-wrap ga-2">
|
|
||||||
<VBtn
|
|
||||||
v-for="method in llmProviderAuthMethods"
|
|
||||||
:key="method.id"
|
|
||||||
color="primary"
|
|
||||||
variant="tonal"
|
|
||||||
prepend-icon="mdi-account-arrow-right-outline"
|
|
||||||
@click="startProviderAuth(method.id)"
|
|
||||||
>
|
|
||||||
{{ method.label }}
|
|
||||||
</VBtn>
|
|
||||||
|
|
||||||
<VBtn
|
|
||||||
v-if="providerConnected"
|
|
||||||
color="error"
|
|
||||||
variant="text"
|
|
||||||
prepend-icon="mdi-link-off"
|
|
||||||
@click="disconnectProviderAuth"
|
|
||||||
>
|
|
||||||
{{ t('setting.system.llmProviderDisconnect') }}
|
|
||||||
</VBtn>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</VAlert>
|
|
||||||
</VCol>
|
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
|
||||||
<div>
|
|
||||||
<VCombobox
|
<VCombobox
|
||||||
:model-value="SystemSettings.Basic.LLM_MODEL"
|
:model-value="SystemSettings.Basic.LLM_BASE_URL"
|
||||||
@update:model-value="
|
@update:model-value="
|
||||||
(val: any) => {
|
(value: any) => {
|
||||||
SystemSettings.Basic.LLM_MODEL = typeof val === 'object' && val !== null ? val.id : val
|
if (typeof value === 'object' && value !== null) {
|
||||||
handleLlmModelChanged()
|
setBaseUrlPreset(value.id, value.value)
|
||||||
|
} else {
|
||||||
|
setBaseUrlPreset('', value || '')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
:label="t('setting.system.llmModel')"
|
:label="t('setting.system.llmBaseUrl')"
|
||||||
:hint="t('setting.system.llmModelHint')"
|
:hint="t('setting.system.llmBaseUrlHint')"
|
||||||
:placeholder="t('setting.system.llmModelHint')"
|
:placeholder="selectedLlmProvider?.default_base_url || 'https://api.deepseek.com'"
|
||||||
|
:items="llmBaseUrlPresetItems"
|
||||||
|
item-title="title"
|
||||||
|
item-value="value"
|
||||||
persistent-hint
|
persistent-hint
|
||||||
:items="llmModels"
|
prepend-inner-icon="mdi-link"
|
||||||
item-title="name"
|
|
||||||
item-value="id"
|
|
||||||
:loading="loadingModels"
|
|
||||||
prepend-inner-icon="mdi-brain"
|
|
||||||
>
|
>
|
||||||
<template #append-inner>
|
<template #item="{ props, item }">
|
||||||
<VBtn
|
<VListItem v-bind="props" :subtitle="item.raw.subtitle" />
|
||||||
variant="text"
|
|
||||||
icon="mdi-refresh"
|
|
||||||
size="small"
|
|
||||||
@click="refreshLlmModels(true)"
|
|
||||||
:disabled="!canRefreshModels"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</VCombobox>
|
</VCombobox>
|
||||||
|
</VCol>
|
||||||
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showApiKeyField" cols="12" md="6">
|
||||||
|
<VTextField
|
||||||
|
v-model="SystemSettings.Basic.LLM_API_KEY"
|
||||||
|
:label="selectedLlmProvider?.api_key_label || t('setting.system.llmApiKey')"
|
||||||
|
:hint="selectedLlmProvider?.api_key_hint || t('setting.system.llmApiKeyHint')"
|
||||||
|
:placeholder="t('setting.system.llmApiKeyPlaceholder')"
|
||||||
|
persistent-hint
|
||||||
|
type="password"
|
||||||
|
prepend-inner-icon="mdi-key-variant"
|
||||||
|
/>
|
||||||
|
</VCol>
|
||||||
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && llmProviderAuthMethods.length > 0" cols="12">
|
||||||
|
<VAlert type="info" variant="tonal">
|
||||||
|
<div class="d-flex flex-column flex-md-row justify-space-between ga-3">
|
||||||
|
<div>
|
||||||
|
<div class="text-subtitle-2">{{ t('setting.system.llmProviderAuth') }}</div>
|
||||||
|
<div class="text-body-2">
|
||||||
|
{{ selectedLlmProvider?.description || t('setting.system.llmProviderAuthHint') }}
|
||||||
|
</div>
|
||||||
|
<div v-if="providerConnected" class="text-body-2 mt-2">
|
||||||
|
{{
|
||||||
|
t('setting.system.llmProviderConnectedAs', {
|
||||||
|
label: llmProviderAuthLabel || selectedLlmProvider?.name,
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<VAlert v-if="selectedLlmModelInfo" type="info" variant="tonal" density="compact" class="mt-2">
|
<div class="d-flex flex-wrap ga-2">
|
||||||
{{ selectedLlmModelInfo }}
|
<VBtn
|
||||||
|
v-for="method in llmProviderAuthMethods"
|
||||||
|
:key="method.id"
|
||||||
|
color="primary"
|
||||||
|
variant="tonal"
|
||||||
|
prepend-icon="mdi-account-arrow-right-outline"
|
||||||
|
@click="startProviderAuth(method.id)"
|
||||||
|
>
|
||||||
|
{{ method.label }}
|
||||||
|
</VBtn>
|
||||||
|
|
||||||
|
<VBtn
|
||||||
|
v-if="providerConnected"
|
||||||
|
color="error"
|
||||||
|
variant="text"
|
||||||
|
prepend-icon="mdi-link-off"
|
||||||
|
@click="disconnectProviderAuth"
|
||||||
|
>
|
||||||
|
{{ t('setting.system.llmProviderDisconnect') }}
|
||||||
|
</VBtn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</VAlert>
|
</VAlert>
|
||||||
|
</VCol>
|
||||||
<div class="d-flex justify-end mt-2">
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
<VBtn
|
<div>
|
||||||
color="info"
|
<VCombobox
|
||||||
variant="tonal"
|
:model-value="SystemSettings.Basic.LLM_MODEL"
|
||||||
density="comfortable"
|
@update:model-value="
|
||||||
prepend-icon="mdi-connection"
|
(val: any) => {
|
||||||
:disabled="!canTestLlm"
|
SystemSettings.Basic.LLM_MODEL = typeof val === 'object' && val !== null ? val.id : val
|
||||||
:loading="testingLlm"
|
handleLlmModelChanged()
|
||||||
class="llm-test-trigger"
|
}
|
||||||
@click="testLlmConnection"
|
"
|
||||||
|
:label="t('setting.system.llmModel')"
|
||||||
|
:hint="t('setting.system.llmModelHint')"
|
||||||
|
:placeholder="t('setting.system.llmModelHint')"
|
||||||
|
persistent-hint
|
||||||
|
:items="llmModels"
|
||||||
|
item-title="name"
|
||||||
|
item-value="id"
|
||||||
|
:loading="loadingModels"
|
||||||
|
prepend-inner-icon="mdi-brain"
|
||||||
>
|
>
|
||||||
{{ t('setting.system.llmTestAction') }}
|
<template #append-inner>
|
||||||
</VBtn>
|
<VBtn
|
||||||
|
variant="text"
|
||||||
|
icon="mdi-refresh"
|
||||||
|
size="small"
|
||||||
|
@click="refreshLlmModels(true)"
|
||||||
|
:disabled="!canRefreshModels"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VCombobox>
|
||||||
|
|
||||||
|
<VAlert v-if="selectedLlmModelInfo" type="info" variant="tonal" density="compact" class="mt-2">
|
||||||
|
{{ selectedLlmModelInfo }}
|
||||||
|
</VAlert>
|
||||||
|
|
||||||
|
<div class="d-flex justify-end mt-2">
|
||||||
|
<VBtn
|
||||||
|
color="info"
|
||||||
|
variant="tonal"
|
||||||
|
density="comfortable"
|
||||||
|
prepend-icon="mdi-connection"
|
||||||
|
:disabled="!canTestLlm"
|
||||||
|
:loading="testingLlm"
|
||||||
|
class="llm-test-trigger"
|
||||||
|
@click="testLlmConnection"
|
||||||
|
>
|
||||||
|
{{ t('setting.system.llmTestAction') }}
|
||||||
|
</VBtn>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</VCol>
|
||||||
</VCol>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
<VTextField
|
||||||
<VTextField
|
v-model.number="SystemSettings.Basic.LLM_MAX_CONTEXT_TOKENS"
|
||||||
v-model.number="SystemSettings.Basic.LLM_MAX_CONTEXT_TOKENS"
|
:label="t('setting.system.llmMaxContextTokens')"
|
||||||
:label="t('setting.system.llmMaxContextTokens')"
|
:hint="t('setting.system.llmMaxContextTokensHint')"
|
||||||
:hint="t('setting.system.llmMaxContextTokensHint')"
|
persistent-hint
|
||||||
persistent-hint
|
type="number"
|
||||||
type="number"
|
prepend-inner-icon="mdi-counter"
|
||||||
prepend-inner-icon="mdi-counter"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
<VSelect
|
||||||
<VSelect
|
v-model="SystemSettings.Basic.LLM_THINKING_LEVEL"
|
||||||
v-model="SystemSettings.Basic.LLM_THINKING_LEVEL"
|
:label="t('setting.system.llmThinking')"
|
||||||
:label="t('setting.system.llmThinking')"
|
:hint="t('setting.system.llmThinkingHint')"
|
||||||
:hint="t('setting.system.llmThinkingHint')"
|
:items="thinkingLevelItems"
|
||||||
:items="thinkingLevelItems"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
<VSelect
|
||||||
<VSelect
|
v-model="SystemSettings.Basic.AI_AGENT_JOB_INTERVAL"
|
||||||
v-model="SystemSettings.Basic.AI_AGENT_JOB_INTERVAL"
|
:label="t('setting.system.aiAgentJobInterval')"
|
||||||
:label="t('setting.system.aiAgentJobInterval')"
|
:hint="t('setting.system.aiAgentJobIntervalHint')"
|
||||||
:hint="t('setting.system.aiAgentJobIntervalHint')"
|
persistent-hint
|
||||||
persistent-hint
|
:items="[
|
||||||
:items="[
|
{ title: t('setting.system.aiAgentJobIntervalDisabled'), value: 0 },
|
||||||
{ title: t('setting.system.aiAgentJobIntervalDisabled'), value: 0 },
|
{ title: t('setting.system.aiAgentJobInterval1h'), value: 1 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval1h'), value: 1 },
|
{ title: t('setting.system.aiAgentJobInterval3h'), value: 3 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval3h'), value: 3 },
|
{ title: t('setting.system.aiAgentJobInterval6h'), value: 6 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval6h'), value: 6 },
|
{ title: t('setting.system.aiAgentJobInterval12h'), value: 12 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval12h'), value: 12 },
|
{ title: t('setting.system.aiAgentJobInterval24h'), value: 24 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval24h'), value: 24 },
|
{ title: t('setting.system.aiAgentJobInterval1w'), value: 168 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval1w'), value: 168 },
|
{ title: t('setting.system.aiAgentJobInterval1M'), value: 720 },
|
||||||
{ title: t('setting.system.aiAgentJobInterval1M'), value: 720 },
|
]"
|
||||||
]"
|
prepend-inner-icon="mdi-timer-outline"
|
||||||
prepend-inner-icon="mdi-timer-outline"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
</VRow>
|
||||||
</VRow>
|
<VRow>
|
||||||
<VRow>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
|
<VSwitch
|
||||||
<VSwitch
|
v-model="SystemSettings.Basic.LLM_SUPPORT_IMAGE_INPUT"
|
||||||
v-model="SystemSettings.Basic.LLM_SUPPORT_IMAGE_INPUT"
|
:label="t('setting.system.llmSupportImageInput')"
|
||||||
:label="t('setting.system.llmSupportImageInput')"
|
:hint="t('setting.system.llmSupportImageInputHint')"
|
||||||
:hint="t('setting.system.llmSupportImageInputHint')"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
</VRow>
|
||||||
</VRow>
|
<VRow>
|
||||||
<VRow>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
<VSwitch
|
||||||
<VSwitch
|
v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
||||||
v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
:label="t('setting.system.llmSupportAudioInput')"
|
||||||
:label="t('setting.system.llmSupportAudioInput')"
|
:hint="t('setting.system.llmSupportAudioInputHint')"
|
||||||
:hint="t('setting.system.llmSupportAudioInputHint')"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
|
<VSwitch
|
||||||
<VSwitch
|
v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
:label="t('setting.system.llmSupportAudioOutput')"
|
||||||
:label="t('setting.system.llmSupportAudioOutput')"
|
:hint="t('setting.system.llmSupportAudioOutputHint')"
|
||||||
:hint="t('setting.system.llmSupportAudioOutputHint')"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VSelect
|
||||||
<VSelect
|
v-model="SystemSettings.Basic.AUDIO_INPUT_PROVIDER"
|
||||||
v-model="SystemSettings.Basic.AUDIO_INPUT_PROVIDER"
|
:label="t('setting.system.audioInputProvider')"
|
||||||
:label="t('setting.system.audioInputProvider')"
|
:hint="t('setting.system.audioInputProviderHint')"
|
||||||
:hint="t('setting.system.audioInputProviderHint')"
|
:items="audioProviderItems"
|
||||||
:items="audioProviderItems"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-microphone-message"
|
||||||
prepend-inner-icon="mdi-microphone-message"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_INPUT_MODEL"
|
||||||
v-model="SystemSettings.Basic.AUDIO_INPUT_MODEL"
|
:label="t('setting.system.audioInputModel')"
|
||||||
:label="t('setting.system.audioInputModel')"
|
:hint="t('setting.system.audioInputModelHint')"
|
||||||
:hint="t('setting.system.audioInputModelHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-waveform"
|
||||||
prepend-inner-icon="mdi-waveform"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_INPUT_API_KEY"
|
||||||
v-model="SystemSettings.Basic.AUDIO_INPUT_API_KEY"
|
:label="t('setting.system.audioInputApiKey')"
|
||||||
:label="t('setting.system.audioInputApiKey')"
|
:hint="t('setting.system.audioInputApiKeyHint')"
|
||||||
:hint="t('setting.system.audioInputApiKeyHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-key-variant"
|
||||||
prepend-inner-icon="mdi-key-variant"
|
type="password"
|
||||||
type="password"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_INPUT_BASE_URL"
|
||||||
v-model="SystemSettings.Basic.AUDIO_INPUT_BASE_URL"
|
:label="t('setting.system.audioInputBaseUrl')"
|
||||||
:label="t('setting.system.audioInputBaseUrl')"
|
:hint="t('setting.system.audioInputBaseUrlHint')"
|
||||||
:hint="t('setting.system.audioInputBaseUrlHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-link-variant"
|
||||||
prepend-inner-icon="mdi-link-variant"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_INPUT_LANGUAGE"
|
||||||
v-model="SystemSettings.Basic.AUDIO_INPUT_LANGUAGE"
|
:label="t('setting.system.audioInputLanguage')"
|
||||||
:label="t('setting.system.audioInputLanguage')"
|
:hint="t('setting.system.audioInputLanguageHint')"
|
||||||
:hint="t('setting.system.audioInputLanguageHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-translate"
|
||||||
prepend-inner-icon="mdi-translate"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VSelect
|
||||||
<VSelect
|
v-model="SystemSettings.Basic.AUDIO_OUTPUT_PROVIDER"
|
||||||
v-model="SystemSettings.Basic.AUDIO_OUTPUT_PROVIDER"
|
:label="t('setting.system.audioOutputProvider')"
|
||||||
:label="t('setting.system.audioOutputProvider')"
|
:hint="t('setting.system.audioOutputProviderHint')"
|
||||||
:hint="t('setting.system.audioOutputProviderHint')"
|
:items="audioProviderItems"
|
||||||
:items="audioProviderItems"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-account-voice"
|
||||||
prepend-inner-icon="mdi-account-voice"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_OUTPUT_MODEL"
|
||||||
v-model="SystemSettings.Basic.AUDIO_OUTPUT_MODEL"
|
:label="t('setting.system.audioOutputModel')"
|
||||||
:label="t('setting.system.audioOutputModel')"
|
:hint="t('setting.system.audioOutputModelHint')"
|
||||||
:hint="t('setting.system.audioOutputModelHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-waveform"
|
||||||
prepend-inner-icon="mdi-waveform"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_OUTPUT_API_KEY"
|
||||||
v-model="SystemSettings.Basic.AUDIO_OUTPUT_API_KEY"
|
:label="t('setting.system.audioOutputApiKey')"
|
||||||
:label="t('setting.system.audioOutputApiKey')"
|
:hint="t('setting.system.audioOutputApiKeyHint')"
|
||||||
:hint="t('setting.system.audioOutputApiKeyHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-key-variant"
|
||||||
prepend-inner-icon="mdi-key-variant"
|
type="password"
|
||||||
type="password"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_OUTPUT_BASE_URL"
|
||||||
v-model="SystemSettings.Basic.AUDIO_OUTPUT_BASE_URL"
|
:label="t('setting.system.audioOutputBaseUrl')"
|
||||||
:label="t('setting.system.audioOutputBaseUrl')"
|
:hint="t('setting.system.audioOutputBaseUrlHint')"
|
||||||
:hint="t('setting.system.audioOutputBaseUrlHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-link-variant"
|
||||||
prepend-inner-icon="mdi-link-variant"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model="SystemSettings.Basic.AUDIO_OUTPUT_VOICE"
|
||||||
v-model="SystemSettings.Basic.AUDIO_OUTPUT_VOICE"
|
:label="t('setting.system.audioOutputVoice')"
|
||||||
:label="t('setting.system.audioOutputVoice')"
|
:hint="t('setting.system.audioOutputVoiceHint')"
|
||||||
:hint="t('setting.system.audioOutputVoiceHint')"
|
persistent-hint
|
||||||
persistent-hint
|
prepend-inner-icon="mdi-account-voice"
|
||||||
prepend-inner-icon="mdi-account-voice"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
|
cols="12"
|
||||||
cols="12"
|
>
|
||||||
>
|
<VSwitch
|
||||||
<VSwitch
|
v-model="SystemSettings.Basic.AUDIO_OUTPUT_INCLUDE_TEXT"
|
||||||
v-model="SystemSettings.Basic.AUDIO_OUTPUT_INCLUDE_TEXT"
|
:label="t('setting.system.audioOutputIncludeText')"
|
||||||
:label="t('setting.system.audioOutputIncludeText')"
|
:hint="t('setting.system.audioOutputIncludeTextHint')"
|
||||||
:hint="t('setting.system.audioOutputIncludeTextHint')"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
</VRow>
|
||||||
</VRow>
|
<VRow>
|
||||||
<VRow>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12">
|
<VSwitch
|
||||||
<VSwitch
|
v-model="SystemSettings.Basic.AI_AGENT_RETRY_TRANSFER"
|
||||||
v-model="SystemSettings.Basic.AI_AGENT_RETRY_TRANSFER"
|
:label="t('setting.system.aiAgentRetryTransfer')"
|
||||||
:label="t('setting.system.aiAgentRetryTransfer')"
|
:hint="t('setting.system.aiAgentRetryTransferHint')"
|
||||||
:hint="t('setting.system.aiAgentRetryTransferHint')"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
</VRow>
|
||||||
</VRow>
|
<VRow>
|
||||||
<VRow>
|
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12">
|
||||||
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12">
|
<VSwitch
|
||||||
<VSwitch
|
v-model="SystemSettings.Basic.AI_RECOMMEND_ENABLED"
|
||||||
v-model="SystemSettings.Basic.AI_RECOMMEND_ENABLED"
|
:label="t('setting.system.aiRecommendEnabled')"
|
||||||
:label="t('setting.system.aiRecommendEnabled')"
|
:hint="t('setting.system.aiRecommendEnabledHint')"
|
||||||
:hint="t('setting.system.aiRecommendEnabledHint')"
|
persistent-hint
|
||||||
persistent-hint
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextarea
|
||||||
<VTextarea
|
v-model="SystemSettings.Basic.AI_RECOMMEND_USER_PREFERENCE"
|
||||||
v-model="SystemSettings.Basic.AI_RECOMMEND_USER_PREFERENCE"
|
:label="t('setting.system.aiRecommendUserPreference')"
|
||||||
:label="t('setting.system.aiRecommendUserPreference')"
|
:hint="t('setting.system.aiRecommendUserPreferenceHint')"
|
||||||
:hint="t('setting.system.aiRecommendUserPreferenceHint')"
|
persistent-hint
|
||||||
persistent-hint
|
rows="1"
|
||||||
rows="1"
|
auto-grow
|
||||||
auto-grow
|
prepend-inner-icon="mdi-account-heart"
|
||||||
prepend-inner-icon="mdi-account-heart"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
<VCol
|
||||||
<VCol
|
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED"
|
||||||
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED"
|
cols="12"
|
||||||
cols="12"
|
md="6"
|
||||||
md="6"
|
>
|
||||||
>
|
<VTextField
|
||||||
<VTextField
|
v-model.number="SystemSettings.Basic.AI_RECOMMEND_MAX_ITEMS"
|
||||||
v-model.number="SystemSettings.Basic.AI_RECOMMEND_MAX_ITEMS"
|
:label="t('setting.system.aiRecommendMaxItems')"
|
||||||
:label="t('setting.system.aiRecommendMaxItems')"
|
:hint="t('setting.system.aiRecommendMaxItemsHint')"
|
||||||
:hint="t('setting.system.aiRecommendMaxItemsHint')"
|
persistent-hint
|
||||||
persistent-hint
|
type="number"
|
||||||
type="number"
|
prepend-inner-icon="mdi-format-list-numbered"
|
||||||
prepend-inner-icon="mdi-format-list-numbered"
|
/>
|
||||||
/>
|
</VCol>
|
||||||
</VCol>
|
</VRow>
|
||||||
</VRow>
|
</VCardText>
|
||||||
</VCardText>
|
</VExpandTransition>
|
||||||
</VCard>
|
</VCard>
|
||||||
</VForm>
|
</VForm>
|
||||||
</VCardText>
|
</VCardText>
|
||||||
|
|||||||
Reference in New Issue
Block a user