Skip to content

Commit 0f891bd

Browse files
committed
fix: Rerank node model
1 parent 48f035d commit 0f891bd

File tree

2 files changed

+81
-19
lines changed

2 files changed

+81
-19
lines changed

apps/application/flow/step_node/reranker_node/i_reranker_node.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class RerankerStepNodeSerializer(serializers.Serializer):
3131
reranker_setting = RerankerSettingSerializer(required=True)
3232

3333
question_reference_address = serializers.ListField(required=True)
34-
reranker_model_id = serializers.UUIDField(required=True)
34+
reranker_model_id = serializers.CharField(required=False, allow_blank=True, allow_null=True)
35+
reranker_model_id_type = serializers.CharField(required=False, default='custom')
36+
reranker_model_id_reference = serializers.ListField(required=False, child=serializers.CharField(), allow_empty=True)
3537
reranker_reference_list = serializers.ListField(required=True, child=serializers.ListField(required=True))
3638
show_knowledge = serializers.BooleanField(required=True,
3739
label=_("The results are displayed in the knowledge sources"))
@@ -55,9 +57,27 @@ def _run(self):
5557
reference[0],
5658
reference[1:]) for reference in
5759
self.node_params_serializer.data.get('reranker_reference_list')]
58-
return self.execute(**self.node_params_serializer.data, question=str(question),
5960

60-
reranker_list=reranker_list)
61+
node_params_data = dict(self.node_params_serializer.data)
62+
63+
reranker_model_id_type = node_params_data.pop('reranker_model_id_type', None)
64+
reranker_model_id_reference = node_params_data.pop('reranker_model_id_reference', None)
65+
reranker_model_id = node_params_data.pop('reranker_model_id', None)
66+
67+
# 处理引用类型
68+
if reranker_model_id_type == 'reference' and reranker_model_id_reference:
69+
reference_data = self.workflow_manage.get_reference_field(
70+
reranker_model_id_reference[0],
71+
reranker_model_id_reference[1:],
72+
)
73+
if reference_data and isinstance(reference_data, dict):
74+
reranker_model_id = reference_data.get('reranker_model_id',
75+
reference_data.get('model_id', reranker_model_id))
76+
if reranker_model_id is None or reranker_model_id == '':
77+
raise Exception(_('Model is not allowed to be empty'))
78+
79+
return self.execute(**node_params_data, question=str(question),
80+
reranker_list=reranker_list, reranker_model_id=reranker_model_id)
6181

6282
def execute(self, question, reranker_setting, reranker_list, reranker_model_id, show_knowledge,
6383
**kwargs) -> NodeResult:

ui/src/workflow/nodes/reranker-node/index.vue

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -122,32 +122,62 @@
122122
</el-form-item>
123123
<el-form-item
124124
:label="$t('workflow.nodes.rerankerNode.reranker_model.label')"
125-
prop="reranker_model_id"
125+
:prop="
126+
form_data.reranker_model_id_type === 'reference'
127+
? 'reranker_model_id_reference'
128+
: 'reranker_model_id'
129+
"
126130
:rules="{
127131
required: true,
128-
message: $t('workflow.nodes.rerankerNode.reranker_model.placeholder'),
132+
message:
133+
form_data.reranker_model_id_type === 'reference'
134+
? $t('workflow.variable.placeholder')
135+
: $t('workflow.nodes.rerankerNode.reranker_model.placeholder'),
129136
trigger: 'change',
130137
}"
131138
>
132139
<template #label>
133-
<div class="flex-between">
134-
<span
135-
>{{ $t('workflow.nodes.rerankerNode.reranker_model.label')
136-
}}<span class="color-danger">*</span></span
140+
<div class="flex-between w-full">
141+
<div>
142+
<span
143+
>{{ $t('workflow.nodes.rerankerNode.reranker_model.label')
144+
}}<span class="color-danger">*</span></span
145+
>
146+
</div>
147+
<el-select
148+
v-model="form_data.reranker_model_id_type"
149+
:teleported="false"
150+
size="small"
151+
style="width: 85px"
152+
@change="form_data.reranker_model_id_reference = []"
137153
>
154+
<el-option :label="$t('workflow.variable.Referencing')" value="reference" />
155+
<el-option :label="$t('common.custom')" value="custom" />
156+
</el-select>
138157
</div>
139158
</template>
140-
<ModelSelect
141-
@wheel="wheel"
142-
:teleported="false"
143-
v-model="form_data.reranker_model_id"
144-
:placeholder="$t('workflow.nodes.rerankerNode.reranker_model.placeholder')"
145-
:options="modelOptions"
146-
@submitModel="getSelectModel"
147-
showFooter
148-
:model-type="'RERANKER'"
149-
></ModelSelect>
159+
<div class="flex-between w-full" v-if="form_data.reranker_model_id_type !== 'reference'">
160+
<ModelSelect
161+
@wheel="wheel"
162+
:teleported="false"
163+
v-model="form_data.reranker_model_id"
164+
:placeholder="$t('workflow.nodes.rerankerNode.reranker_model.placeholder')"
165+
:options="modelOptions"
166+
@submitModel="getSelectModel"
167+
showFooter
168+
:model-type="'RERANKER'"
169+
></ModelSelect>
170+
</div>
171+
<NodeCascader
172+
v-else
173+
ref="modelCascaderRef"
174+
:nodeModel="nodeModel"
175+
class="w-full"
176+
:placeholder="$t('workflow.variable.placeholder')"
177+
v-model="form_data.reranker_model_id_reference"
178+
/>
150179
</el-form-item>
180+
151181
<el-form-item
152182
:label="$t('workflow.nodes.searchKnowledgeNode.showKnowledge.label')"
153183
prop="show_knowledge"
@@ -192,6 +222,8 @@ const ParamSettingDialogRef = ref<InstanceType<typeof ParamSettingDialog>>()
192222
const form = {
193223
reranker_reference_list: [[]],
194224
reranker_model_id: '',
225+
reranker_model_id_type: 'custom',
226+
reranker_model_id_reference: [],
195227
question_reference_address: [],
196228
reranker_setting: {
197229
top_n: 3,
@@ -222,6 +254,12 @@ const wheel = (e: any) => {
222254
const form_data = computed({
223255
get: () => {
224256
if (props.nodeModel.properties.node_data) {
257+
if (!props.nodeModel.properties.node_data.reranker_model_id_type) {
258+
set(props.nodeModel.properties.node_data, 'reranker_model_id_type', 'custom')
259+
}
260+
if (!props.nodeModel.properties.node_data.reranker_model_id_reference) {
261+
set(props.nodeModel.properties.node_data, 'reranker_model_id_reference', [])
262+
}
225263
return props.nodeModel.properties.node_data
226264
} else {
227265
set(props.nodeModel.properties, 'node_data', form)
@@ -232,10 +270,13 @@ const form_data = computed({
232270
set(props.nodeModel.properties, 'node_data', value)
233271
},
234272
})
273+
235274
function refreshParam(data: any) {
236275
set(props.nodeModel.properties.node_data, 'reranker_setting', data)
237276
}
238277
278+
const modelCascaderRef = ref()
279+
239280
const resource = getResourceDetail()
240281
function getSelectModel() {
241282
const obj =
@@ -264,6 +305,7 @@ const nodeCascaderRef = ref()
264305
const validate = () => {
265306
return Promise.all([
266307
nodeCascaderRef.value ? nodeCascaderRef.value.validate() : Promise.resolve(''),
308+
modelCascaderRef.value ? modelCascaderRef.value.validate() : Promise.resolve(''),
267309
rerankerNodeFormRef.value?.validate(),
268310
]).catch((err: any) => {
269311
return Promise.reject({ node: props.nodeModel, errMessage: err })

0 commit comments

Comments
 (0)