13
13
from rest_framework import serializers
14
14
15
15
from application .flow .i_step_node import INode , NodeResult
16
+ from common .util .common import flat_map
16
17
from common .util .field_message import ErrMessage
17
18
18
19
@@ -43,6 +44,13 @@ def is_valid(self, *, raise_exception=False):
43
44
super ().is_valid (raise_exception = True )
44
45
45
46
47
+ def get_paragraph_list (chat_record , node_id ):
48
+ return flat_map ([chat_record .details [key ].get ('paragraph_list' , []) for key in chat_record .details if
49
+ (chat_record .details [
50
+ key ].get ('type' , '' ) == 'search-dataset-node' ) and chat_record .details [key ].get (
51
+ 'paragraph_list' , []) is not None and key == node_id ])
52
+
53
+
46
54
class ISearchDatasetStepNode (INode ):
47
55
type = 'search-dataset-node'
48
56
@@ -53,7 +61,13 @@ def _run(self):
53
61
question = self .workflow_manage .get_reference_field (
54
62
self .node_params_serializer .data .get ('question_reference_address' )[0 ],
55
63
self .node_params_serializer .data .get ('question_reference_address' )[1 :])
56
- return self .execute (** self .node_params_serializer .data , question = str (question ), exclude_paragraph_id_list = [])
64
+ history_chat_record = self .flow_params_serializer .data .get ('history_chat_record' , [])
65
+ paragraph_id_list = [p .get ('id' ) for p in flat_map (
66
+ [get_paragraph_list (chat_record , self .node .id ) for chat_record in history_chat_record if
67
+ chat_record .problem_text == question ])]
68
+ exclude_paragraph_id_list = list (set (paragraph_id_list ))
69
+ return self .execute (** self .node_params_serializer .data , question = str (question ),
70
+ exclude_paragraph_id_list = exclude_paragraph_id_list )
57
71
58
72
def execute (self , dataset_id_list , dataset_setting , question ,
59
73
exclude_paragraph_id_list = None ,
0 commit comments