Skip to content

Commit 376c9fd

Browse files
author
Cheng Qian
committed
fix: parse intent in action condition
1 parent 31df0b7 commit 376c9fd

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

assistant_skill_analysis/utils/skills_util.py

+19-6
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,15 @@ def retrieve_workspace(skill_id, conversation, export_flag=True):
179179
return ws_json.get_result()
180180

181181

182+
def _get_intent_name_from_action_condition(condition: dict):
183+
if "intent" in condition and condition["intent"] is not None:
184+
return condition["intent"]
185+
for v in condition.values():
186+
if isinstance(v, list):
187+
for cond in v:
188+
return _get_intent_name_from_action_condition(cond)
189+
190+
182191
def parse_workspace_json(workspace_json):
183192
"""
184193
Parse workspace json and returns list of utterances, list of intents, and list of entities, and intent to action title mapping
@@ -202,13 +211,17 @@ def parse_workspace_json(workspace_json):
202211

203212
else:
204213
# intent name to action title mapping for readability
205-
raw_intent_name_to_action_title_mapping = {
206-
action["condition"]["intent"]: action["title"]
207-
for action in workspace_json["workspace"]["actions"]
208-
if action.get("condition", {}).get("intent")
209-
}
214+
raw_intent_name_to_action_title_mapping = {}
215+
for action in workspace_json["workspace"]["actions"]:
216+
possible_intent = _get_intent_name_from_action_condition(action.get("condition", {}))
217+
if possible_intent:
218+
raw_intent_name_to_action_title_mapping[possible_intent] = action["title"]
210219
for intent in workspace_json["workspace"]["intents"]:
211-
action_title = raw_intent_name_to_action_title_mapping[intent["intent"]]
220+
intent_name = intent["intent"]
221+
action_title = raw_intent_name_to_action_title_mapping.get(intent_name)
222+
if action_title is None:
223+
raw_intent_name_to_action_title_mapping[intent_name] = intent_name
224+
action_title = intent_name
212225
for example in intent["examples"]:
213226
utterances.append(example["text"])
214227
intents.append(action_title)

tests/utils/test_skills_util.py

+22
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,28 @@ def test_extract_workspace_data(self):
6262
len(workspace_pd["intent"].unique()), 9, "Extract workspace failed"
6363
)
6464

65+
def test_parse_intent_from_action_condition(self):
66+
67+
data = {
68+
"intent": "action_10017_intent_27671"
69+
}
70+
self.assertEqual(
71+
skills_util._get_intent_name_from_action_condition(data), "action_10017_intent_27671"
72+
)
73+
data = {
74+
"and": [
75+
{
76+
"intent": "action_15841_intent_20012"
77+
},
78+
{
79+
"expression": "false"
80+
}
81+
]
82+
}
83+
self.assertEqual(
84+
skills_util._get_intent_name_from_action_condition(data), "action_15841_intent_20012"
85+
)
86+
6587
@classmethod
6688
def tearDownClass(cls):
6789
cls.skill_file.close()

0 commit comments

Comments
 (0)