Skip to content

Commit 4edd95f

Browse files
Merge pull request #61567 from nextcloud/feat/mark-legacy-ai-providers
Feat: mark legacy ai providers
2 parents 2da90a9 + b34f25f commit 4edd95f

9 files changed

Lines changed: 118 additions & 80 deletions

apps/settings/src/components/AdminAI.vue

Lines changed: 106 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<template v-for="type in taskProcessingTaskTypes">
1818
<div :key="type" class="tasktype-item">
1919
<p class="tasktype-name">
20-
{{ type.name }}
20+
{{ getTaskTypeName(type) }}
2121
</p>
2222
<NcCheckboxRadioSwitch
2323
v-model="settings['ai.taskprocessing_type_preferences'][type.id]"
@@ -46,76 +46,97 @@
4646
</NcNoteCard>
4747
</template>
4848
</NcSettingsSection>
49-
<NcSettingsSection
50-
:name="t('settings', 'Machine translation')"
51-
:description="t('settings', 'Machine translation can be implemented by different apps. Here you can define the precedence of the machine translation apps you have installed at the moment.')">
52-
<VueDraggable v-model="settings['ai.translation_provider_preferences']" @change="saveChanges">
53-
<div v-for="(providerClass, i) in settings['ai.translation_provider_preferences']" :key="providerClass" class="draggable__item">
54-
<DragVerticalIcon /> <span class="draggable__number">{{ i + 1 }}</span> {{ translationProviders.find(p => p.class === providerClass)?.name }}
55-
<NcButton aria-label="Move up" variant="tertiary" @click="moveUp(i)">
56-
<template #icon>
57-
<ArrowUpIcon />
58-
</template>
59-
</NcButton>
60-
<NcButton aria-label="Move down" variant="tertiary" @click="moveDown(i)">
61-
<template #icon>
62-
<ArrowDownIcon />
63-
</template>
64-
</NcButton>
65-
</div>
66-
</VueDraggable>
67-
</NcSettingsSection>
68-
<NcSettingsSection
69-
:name="t('settings', 'Image generation')"
70-
:description="t('settings', 'Image generation can be implemented by different apps. Here you can set which app should be used.')">
71-
<template v-for="provider in text2imageProviders">
72-
<NcCheckboxRadioSwitch
73-
:key="provider.id"
74-
v-model="settings['ai.text2image_provider']"
75-
:value="provider.id"
76-
name="text2image_provider"
77-
type="radio"
78-
@update:modelValue="saveChanges">
79-
{{ provider.name }}
80-
</NcCheckboxRadioSwitch>
49+
<NcButton class="legacy-toggle" variant="tertiary" @click="showLegacySections = !showLegacySections">
50+
<template #icon>
51+
<ChevronUpIcon v-if="showLegacySections" />
52+
<ChevronDownIcon v-else />
8153
</template>
82-
<template v-if="!hasText2ImageProviders">
83-
<NcNoteCard type="info">
84-
{{ t('settings', 'None of your currently installed apps provide image generation functionality') }}
54+
{{ showLegacySections ? t('settings', 'Hide legacy provider settings') : t('settings', 'Show legacy provider settings') }}
55+
</NcButton>
56+
<div v-show="showLegacySections">
57+
<NcSettingsSection
58+
:name="t('settings', 'Machine translation (Legacy)')"
59+
:description="t('settings', 'Machine translation can be implemented by different apps. Here you can define the precedence of the machine translation apps you have installed at the moment.')">
60+
<NcNoteCard type="warning">
61+
{{ t('settings', 'This API is deprecated. Install apps that provide Unified task processing to get the best experience.') }}
62+
<a href="https://docs.nextcloud.com/server/latest/admin_manual/ai/overview.html" target="_blank" rel="noopener noreferrer">{{ t('settings', 'Learn more about AI providers') }}</a>
8563
</NcNoteCard>
86-
</template>
87-
</NcSettingsSection>
88-
<NcSettingsSection
89-
:name="t('settings', 'Text processing')"
90-
:description="t('settings', 'Text processing tasks can be implemented by different apps. Here you can set which app should be used for which task.')">
91-
<template v-for="type in tpTaskTypes">
92-
<div :key="type">
93-
<h3>{{ t('settings', 'Task:') }} {{ getTextProcessingTaskType(type).name }}</h3>
94-
<p>{{ getTextProcessingTaskType(type).description }}</p>
95-
<p>&nbsp;</p>
96-
<NcSelect
97-
v-model="settings['ai.textprocessing_provider_preferences'][type]"
98-
class="provider-select"
99-
:clearable="false"
100-
:options="textProcessingProviders.filter(p => p.taskType === type).map(p => p.class)"
101-
@input="saveChanges">
102-
<template #option="{ label }">
103-
{{ textProcessingProviders.find(p => p.class === label)?.name }}
104-
</template>
105-
<template #selected-option="{ label }">
106-
{{ textProcessingProviders.find(p => p.class === label)?.name }}
107-
</template>
108-
</NcSelect>
109-
<p>&nbsp;</p>
110-
</div>
111-
</template>
112-
<template v-if="tpTaskTypes.length === 0">
113-
<NcNoteCard type="info">
114-
<!-- TRANSLATORS Text processing is the name of a Nextcloud-internal API -->
115-
{{ t('settings', 'None of your currently installed apps provide text processing functionality using the Text Processing API.') }}
64+
<VueDraggable v-model="settings['ai.translation_provider_preferences']" @change="saveChanges">
65+
<div v-for="(providerClass, i) in settings['ai.translation_provider_preferences']" :key="providerClass" class="draggable__item">
66+
<DragVerticalIcon /> <span class="draggable__number">{{ i + 1 }}</span> {{ translationProviders.find(p => p.class === providerClass)?.name }}
67+
<NcButton aria-label="Move up" variant="tertiary" @click="moveUp(i)">
68+
<template #icon>
69+
<ArrowUpIcon />
70+
</template>
71+
</NcButton>
72+
<NcButton aria-label="Move down" variant="tertiary" @click="moveDown(i)">
73+
<template #icon>
74+
<ArrowDownIcon />
75+
</template>
76+
</NcButton>
77+
</div>
78+
</VueDraggable>
79+
</NcSettingsSection>
80+
<NcSettingsSection
81+
:name="t('settings', 'Image generation (Legacy)')"
82+
:description="t('settings', 'Image generation can be implemented by different apps. Here you can set which app should be used.')">
83+
<NcNoteCard type="warning">
84+
{{ t('settings', 'This API is deprecated. Install apps that provide Unified task processing to get the best experience.') }}
85+
<a href="https://docs.nextcloud.com/server/latest/admin_manual/ai/overview.html" target="_blank" rel="noopener noreferrer">{{ t('settings', 'Learn more about AI providers') }}</a>
11686
</NcNoteCard>
117-
</template>
118-
</NcSettingsSection>
87+
<template v-for="provider in text2imageProviders">
88+
<NcCheckboxRadioSwitch
89+
:key="provider.id"
90+
v-model="settings['ai.text2image_provider']"
91+
:value="provider.id"
92+
name="text2image_provider"
93+
type="radio"
94+
@update:modelValue="saveChanges">
95+
{{ provider.name }}
96+
</NcCheckboxRadioSwitch>
97+
</template>
98+
<template v-if="!hasText2ImageProviders">
99+
<NcNoteCard type="info">
100+
{{ t('settings', 'None of your currently installed apps provide image generation functionality') }}
101+
</NcNoteCard>
102+
</template>
103+
</NcSettingsSection>
104+
<NcSettingsSection
105+
:name="t('settings', 'Text processing (Legacy)')"
106+
:description="t('settings', 'Text processing tasks can be implemented by different apps. Here you can set which app should be used for which task.')">
107+
<NcNoteCard type="warning">
108+
{{ t('settings', 'This API is deprecated. Install apps that provide Unified task processing to get the best experience.') }}
109+
<a href="https://docs.nextcloud.com/server/latest/admin_manual/ai/overview.html" target="_blank" rel="noopener noreferrer">{{ t('settings', 'Learn more about AI providers') }}</a>
110+
</NcNoteCard>
111+
<template v-for="type in tpTaskTypes">
112+
<div :key="type">
113+
<h3>{{ t('settings', 'Task:') }} {{ getTextProcessingTaskType(type).name }}</h3>
114+
<p>{{ getTextProcessingTaskType(type).description }}</p>
115+
<p>&nbsp;</p>
116+
<NcSelect
117+
v-model="settings['ai.textprocessing_provider_preferences'][type]"
118+
class="provider-select"
119+
:clearable="false"
120+
:options="textProcessingProviders.filter(p => p.taskType === type).map(p => p.class)"
121+
@input="saveChanges">
122+
<template #option="{ label }">
123+
{{ textProcessingProviders.find(p => p.class === label)?.name }}
124+
</template>
125+
<template #selected-option="{ label }">
126+
{{ textProcessingProviders.find(p => p.class === label)?.name }}
127+
</template>
128+
</NcSelect>
129+
<p>&nbsp;</p>
130+
</div>
131+
</template>
132+
<template v-if="tpTaskTypes.length === 0">
133+
<NcNoteCard type="info">
134+
<!-- TRANSLATORS Text processing is the name of a Nextcloud-internal API -->
135+
{{ t('settings', 'None of your currently installed apps provide text processing functionality using the Text Processing API.') }}
136+
</NcNoteCard>
137+
</template>
138+
</NcSettingsSection>
139+
</div>
119140
</div>
120141
</template>
121142

@@ -132,6 +153,8 @@ import NcSelect from '@nextcloud/vue/components/NcSelect'
132153
import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'
133154
import ArrowDownIcon from 'vue-material-design-icons/ArrowDown.vue'
134155
import ArrowUpIcon from 'vue-material-design-icons/ArrowUp.vue'
156+
import ChevronDownIcon from 'vue-material-design-icons/ChevronDown.vue'
157+
import ChevronUpIcon from 'vue-material-design-icons/ChevronUp.vue'
135158
import DragVerticalIcon from 'vue-material-design-icons/DragVertical.vue'
136159
import logger from '../logger.ts'
137160
@@ -142,6 +165,8 @@ export default {
142165
NcSettingsSection,
143166
NcSelect,
144167
VueDraggable,
168+
ChevronDownIcon,
169+
ChevronUpIcon,
145170
DragVerticalIcon,
146171
ArrowDownIcon,
147172
ArrowUpIcon,
@@ -153,6 +178,7 @@ export default {
153178
return {
154179
loading: false,
155180
dirty: false,
181+
showLegacySections: false,
156182
groups: [],
157183
loadingGroups: false,
158184
sttProviders: loadState('settings', 'ai-stt-providers'),
@@ -223,6 +249,13 @@ export default {
223249
this.loading = false
224250
},
225251
252+
getTaskTypeName(type) {
253+
if (type.id === 'core:text2text') {
254+
return t('settings', 'Generate text')
255+
}
256+
return type.name
257+
},
258+
226259
getTextProcessingTaskType(type) {
227260
if (!Array.isArray(this.textProcessingTaskTypes)) {
228261
return null
@@ -265,6 +298,11 @@ export default {
265298
min-width: 350px !important;
266299
}
267300
301+
.legacy-toggle {
302+
margin-top: 12px;
303+
margin-bottom: 12px;
304+
}
305+
268306
.tasktype-item {
269307
display: flex;
270308
align-items: center;

dist/core-common.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/core-common.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/settings-vue-settings-admin-ai.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/settings-vue-settings-admin-ai.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/settings-vue-settings-personal-info.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/settings-vue-settings-personal-info.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/updatenotification-updatenotification.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/updatenotification-updatenotification.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)