import { cloneDeep, set, groupBy } from 'lodash'
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import NodeCascader from '@/workflow/common/NodeCascader.vue'
import type { FormInstance } from 'element-plus'
import { ref, computed, onMounted, inject, reactive } from 'vue'
@@ -693,7 +700,7 @@ const collapseData = reactive({
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
system: '',
prompt: defaultPrompt,
diff --git a/ui/src/workflow/nodes/base-node/index.vue b/ui/src/workflow/nodes/base-node/index.vue
index 6f35dfba0b3..4d95f40acfa 100644
--- a/ui/src/workflow/nodes/base-node/index.vue
+++ b/ui/src/workflow/nodes/base-node/index.vue
@@ -77,7 +77,21 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
import { groupBy, set } from 'lodash'
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import type { FormInstance } from 'element-plus'
import { computed, inject, nextTick, onMounted, provide, ref } from 'vue'
import { MsgSuccess } from '@/utils/message'
@@ -311,20 +343,34 @@ const baseNodeFormRef = ref()
const validate = () => {
if (
form_data.value.tts_model_enable &&
- !form_data.value.tts_model_id &&
- form_data.value.tts_type === 'TTS'
+ form_data.value.tts_type === 'CUSTOM' &&
+ !form_data.value.tts_model_id
) {
return Promise.reject({
node: props.nodeModel,
errMessage: t('views.application.form.voicePlay.requiredMessage'),
})
}
- if (form_data.value.stt_model_enable && !form_data.value.stt_model_id) {
+ if (
+ form_data.value.stt_model_enable &&
+ form_data.value.stt_model_id_type === 'custom' &&
+ !form_data.value.stt_model_id
+ ) {
return Promise.reject({
node: props.nodeModel,
errMessage: t('views.application.form.voiceInput.requiredMessage'),
})
}
+ if (
+ form_data.value.long_term_enable &&
+ form_data.value.long_term_model_id_type === 'custom' &&
+ !form_data.value.long_term_model_id
+ ) {
+ return Promise.reject({
+ node: props.nodeModel,
+ errMessage: t('views.application.longTermMemory.modelRequiredMessage'),
+ })
+ }
const fieldList = props.nodeModel.properties?.user_input_field_list || []
for (const field of fieldList) {
@@ -408,6 +454,9 @@ function ttsModelChange() {
}
function ttsModelEnableChange() {
+ if (form_data.value.tts_model_enable && !form_data.value.tts_type) {
+ form_data.value.tts_type = 'BROWSER'
+ }
if (!form_data.value.tts_model_enable) {
form_data.value.tts_model_id = ''
form_data.value.tts_type = 'BROWSER'
@@ -415,6 +464,9 @@ function ttsModelEnableChange() {
}
function sttModelEnableChange() {
+ if (form_data.value.stt_model_enable && form_data.value.stt_model_id_type === undefined) {
+ form_data.value.stt_model_id_type = 'default'
+ }
if (!form_data.value.stt_model_enable) {
form_data.value.stt_model_id = ''
}
@@ -473,6 +525,9 @@ const long_term_model_change = (model_id?: string) => {
}
function switchLongTerm() {
+ if (form_data.value.long_term_enable && form_data.value.long_term_model_id_type === undefined) {
+ form_data.value.long_term_model_id_type = 'default'
+ }
props.nodeModel.graphModel.eventCenter.emit('refreshLongTermConfig')
}
@@ -531,8 +586,17 @@ function getSelectModel() {
onMounted(() => {
set(props.nodeModel, 'validate', validate)
- if (!props.nodeModel.properties.node_data.tts_type) {
- set(props.nodeModel.properties.node_data, 'tts_type', 'BROWSER')
+ const nd = props.nodeModel.properties.node_data
+ if (!nd.tts_type) {
+ set(nd, 'tts_type', 'BROWSER')
+ } else if (nd.tts_type === 'TTS') {
+ set(nd, 'tts_type', 'CUSTOM')
+ }
+ if (nd.stt_model_id_type === undefined) {
+ set(nd, 'stt_model_id_type', nd.stt_model_id ? 'custom' : 'default')
+ }
+ if (nd.long_term_model_id_type === undefined) {
+ set(nd, 'long_term_model_id_type', nd.long_term_model_id ? 'custom' : 'default')
}
getTTSModel()
getSTTModel()
diff --git a/ui/src/workflow/nodes/image-generate/index.vue b/ui/src/workflow/nodes/image-generate/index.vue
index 2634e5350f7..e8634d437dd 100644
--- a/ui/src/workflow/nodes/image-generate/index.vue
+++ b/ui/src/workflow/nodes/image-generate/index.vue
@@ -15,7 +15,7 @@
:label="$t('workflow.nodes.imageGenerateNode.model.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import { computed, nextTick, onMounted, ref, inject } from 'vue'
import { groupBy, set } from 'lodash'
import type { FormInstance } from 'element-plus'
@@ -232,7 +239,7 @@ const defaultPrompt = `{{${t('workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
system: '',
prompt: defaultPrompt,
diff --git a/ui/src/workflow/nodes/image-to-video/index.vue b/ui/src/workflow/nodes/image-to-video/index.vue
index 111dd8677b6..8eaf46d7075 100644
--- a/ui/src/workflow/nodes/image-to-video/index.vue
+++ b/ui/src/workflow/nodes/image-to-video/index.vue
@@ -15,7 +15,7 @@
:label="$t('workflow.nodes.imageToVideoGenerate.model.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import { computed, nextTick, onMounted, ref, inject } from 'vue'
import { groupBy, set } from 'lodash'
import type { FormInstance } from 'element-plus'
@@ -296,7 +303,7 @@ const defaultPrompt = `{{${t('workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
system: '',
prompt: defaultPrompt,
diff --git a/ui/src/workflow/nodes/image-understand/index.vue b/ui/src/workflow/nodes/image-understand/index.vue
index 9843646fa85..5d44063d97d 100644
--- a/ui/src/workflow/nodes/image-understand/index.vue
+++ b/ui/src/workflow/nodes/image-understand/index.vue
@@ -15,7 +15,7 @@
:label="$t('workflow.nodes.imageUnderstandNode.model.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import { computed, onMounted, ref, inject } from 'vue'
import { cloneDeep, groupBy, set } from 'lodash'
import NodeCascader from '@/workflow/common/NodeCascader.vue'
@@ -334,7 +341,7 @@ const defaultPrompt = `{{${t('workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
system: '',
prompt: defaultPrompt,
diff --git a/ui/src/workflow/nodes/intent-classify-node/index.vue b/ui/src/workflow/nodes/intent-classify-node/index.vue
index d3120b08e96..9cf6433b9d5 100644
--- a/ui/src/workflow/nodes/intent-classify-node/index.vue
+++ b/ui/src/workflow/nodes/intent-classify-node/index.vue
@@ -15,7 +15,7 @@
:label="$t('views.application.form.aiModel.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
{
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
branch: [
{
diff --git a/ui/src/workflow/nodes/parameter-extraction-node/index.vue b/ui/src/workflow/nodes/parameter-extraction-node/index.vue
index d714a30bc70..8e9fe8b551b 100644
--- a/ui/src/workflow/nodes/parameter-extraction-node/index.vue
+++ b/ui/src/workflow/nodes/parameter-extraction-node/index.vue
@@ -15,7 +15,7 @@
:label="$t('views.application.form.aiModel.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
import { computed, onMounted, ref, inject } from 'vue'
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import NodeCascader from '@/workflow/common/NodeCascader.vue'
import AIModeParamSettingDialog from '@/views/application/component/AIModeParamSettingDialog.vue'
import ParametersFieldTable from '@/workflow/nodes/parameter-extraction-node/component/ParametersFieldTable.vue'
@@ -185,7 +192,7 @@ const form = {
input_variable: [],
model_params_setting: {},
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
variable_list: [],
}
diff --git a/ui/src/workflow/nodes/question-node/index.vue b/ui/src/workflow/nodes/question-node/index.vue
index e2f8fb18492..65ae738d83b 100644
--- a/ui/src/workflow/nodes/question-node/index.vue
+++ b/ui/src/workflow/nodes/question-node/index.vue
@@ -15,7 +15,7 @@
:label="$t('views.application.form.aiModel.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
+
-
+
+
import { set, cloneDeep, groupBy } from 'lodash'
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import NodeCascader from '@/workflow/common/NodeCascader.vue'
import ParamSettingDialog from './ParamSettingDialog.vue'
import { ref, computed, onMounted, inject } from 'vue'
@@ -222,7 +229,7 @@ const ParamSettingDialogRef = ref>()
const form = {
reranker_reference_list: [[]],
reranker_model_id: '',
- reranker_model_id_type: 'custom',
+ reranker_model_id_type: 'default',
reranker_model_id_reference: [],
question_reference_address: [],
reranker_setting: {
diff --git a/ui/src/workflow/nodes/speech-to-text-node/index.vue b/ui/src/workflow/nodes/speech-to-text-node/index.vue
index eb0a9bbf7fd..596e26c2323 100644
--- a/ui/src/workflow/nodes/speech-to-text-node/index.vue
+++ b/ui/src/workflow/nodes/speech-to-text-node/index.vue
@@ -17,7 +17,7 @@
form_data.stt_model_id_type === 'reference' ? 'stt_model_id_reference' : 'stt_model_id'
"
:rules="{
- required: true,
+ required: form_data.stt_model_id_type !== 'default',
message:
form_data.stt_model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -40,12 +40,13 @@
style="width: 85px"
@change="form_data.stt_model_id_reference = []"
>
+
-
+
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import { computed, onMounted, ref, inject } from 'vue'
import { groupBy, set } from 'lodash'
import NodeCascader from '@/workflow/common/NodeCascader.vue'
@@ -203,7 +210,7 @@ const wheel = (e: any) => {
const form = {
stt_model_id: '',
- stt_model_id_type: 'custom',
+ stt_model_id_type: 'default',
stt_model_id_reference: [],
is_result: true,
audio_list: [],
diff --git a/ui/src/workflow/nodes/text-to-speech-node/index.vue b/ui/src/workflow/nodes/text-to-speech-node/index.vue
index 3bbeeb0cc55..b64f83ecd9e 100644
--- a/ui/src/workflow/nodes/text-to-speech-node/index.vue
+++ b/ui/src/workflow/nodes/text-to-speech-node/index.vue
@@ -17,7 +17,7 @@
form_data.tts_model_id_type === 'reference' ? 'tts_model_id_reference' : 'tts_model_id'
"
:rules="{
- required: true,
+ required: form_data.tts_model_id_type !== 'default',
message:
form_data.tts_model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -40,12 +40,13 @@
style="width: 85px"
@change="form_data.tts_model_id_reference = []"
>
+
-
+
{
const form = {
tts_model_id: '',
- tts_model_id_type: 'custom',
+ tts_model_id_type: 'default',
tts_model_id_reference: [],
is_result: true,
content_list: [],
diff --git a/ui/src/workflow/nodes/text-to-video/index.vue b/ui/src/workflow/nodes/text-to-video/index.vue
index ccf8d9dbe54..0ab3983517a 100644
--- a/ui/src/workflow/nodes/text-to-video/index.vue
+++ b/ui/src/workflow/nodes/text-to-video/index.vue
@@ -15,7 +15,7 @@
:label="$t('workflow.nodes.textToVideoGenerate.model.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import { computed, nextTick, onMounted, ref, inject } from 'vue'
import { groupBy, set } from 'lodash'
import type { FormInstance } from 'element-plus'
@@ -232,7 +239,7 @@ const defaultPrompt = `{{${t('workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
system: '',
prompt: defaultPrompt,
diff --git a/ui/src/workflow/nodes/video-understand/index.vue b/ui/src/workflow/nodes/video-understand/index.vue
index 4d69f61ff3e..c49a5a88f87 100644
--- a/ui/src/workflow/nodes/video-understand/index.vue
+++ b/ui/src/workflow/nodes/video-understand/index.vue
@@ -15,7 +15,7 @@
:label="$t('workflow.nodes.videoUnderstandNode.model.label')"
:prop="form_data.model_id_type === 'reference' ? 'model_id_reference' : 'model_id'"
:rules="{
- required: true,
+ required: form_data.model_id_type !== 'default',
message:
form_data.model_id_type === 'reference'
? $t('workflow.variable.placeholder')
@@ -38,12 +38,13 @@
style="width: 85px"
@change="form_data.model_id_reference = []"
>
+
-
+
import NodeContainer from '@/workflow/common/NodeContainer.vue'
+import DefaultModelDisplay from '@/workflow/common/DefaultModelDisplay.vue'
import { computed, onMounted, ref, inject } from 'vue'
import { cloneDeep, groupBy, set } from 'lodash'
import NodeCascader from '@/workflow/common/NodeCascader.vue'
@@ -335,7 +342,7 @@ const defaultPrompt = `{{${t('workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',
- model_id_type: 'custom',
+ model_id_type: 'default',
model_id_reference: [],
system: '',
prompt: defaultPrompt,