From 376c9fdcc045f94ca2b118047ab920f3865d38f9 Mon Sep 17 00:00:00 2001 From: Cheng Qian Date: Tue, 18 Feb 2025 16:40:16 -0500 Subject: [PATCH 1/2] fix: parse intent in action condition --- assistant_skill_analysis/utils/skills_util.py | 25 ++++++++++++++----- tests/utils/test_skills_util.py | 22 ++++++++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/assistant_skill_analysis/utils/skills_util.py b/assistant_skill_analysis/utils/skills_util.py index e8d913b..d5e6e0a 100644 --- a/assistant_skill_analysis/utils/skills_util.py +++ b/assistant_skill_analysis/utils/skills_util.py @@ -179,6 +179,15 @@ def retrieve_workspace(skill_id, conversation, export_flag=True): return ws_json.get_result() +def _get_intent_name_from_action_condition(condition: dict): + if "intent" in condition and condition["intent"] is not None: + return condition["intent"] + for v in condition.values(): + if isinstance(v, list): + for cond in v: + return _get_intent_name_from_action_condition(cond) + + def parse_workspace_json(workspace_json): """ 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): else: # intent name to action title mapping for readability - raw_intent_name_to_action_title_mapping = { - action["condition"]["intent"]: action["title"] - for action in workspace_json["workspace"]["actions"] - if action.get("condition", {}).get("intent") - } + raw_intent_name_to_action_title_mapping = {} + for action in workspace_json["workspace"]["actions"]: + possible_intent = _get_intent_name_from_action_condition(action.get("condition", {})) + if possible_intent: + raw_intent_name_to_action_title_mapping[possible_intent] = action["title"] for intent in workspace_json["workspace"]["intents"]: - action_title = raw_intent_name_to_action_title_mapping[intent["intent"]] + intent_name = intent["intent"] + action_title = raw_intent_name_to_action_title_mapping.get(intent_name) + if action_title is None: + raw_intent_name_to_action_title_mapping[intent_name] = intent_name + action_title = intent_name for example in intent["examples"]: utterances.append(example["text"]) intents.append(action_title) diff --git a/tests/utils/test_skills_util.py b/tests/utils/test_skills_util.py index b287fab..f637fb7 100644 --- a/tests/utils/test_skills_util.py +++ b/tests/utils/test_skills_util.py @@ -62,6 +62,28 @@ def test_extract_workspace_data(self): len(workspace_pd["intent"].unique()), 9, "Extract workspace failed" ) + def test_parse_intent_from_action_condition(self): + + data = { + "intent": "action_10017_intent_27671" + } + self.assertEqual( + skills_util._get_intent_name_from_action_condition(data), "action_10017_intent_27671" + ) + data = { + "and": [ + { + "intent": "action_15841_intent_20012" + }, + { + "expression": "false" + } + ] + } + self.assertEqual( + skills_util._get_intent_name_from_action_condition(data), "action_15841_intent_20012" + ) + @classmethod def tearDownClass(cls): cls.skill_file.close() From a56fded9f8937ef44b33afca01daeae3028b0eac Mon Sep 17 00:00:00 2001 From: Cheng Qian Date: Tue, 18 Feb 2025 16:42:04 -0500 Subject: [PATCH 2/2] fix: latest wa sdk --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2e4a227..6741f04 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ tabulate matplotlib nltk seaborn -ibm-watson>=4.5.0 +ibm-watson>=9.0.0 scipy>=1.2.0 jupyter spacy~=2.3.2