{"record":{"id":"b7b6b008993c8cd2","repo":"stanford-oval/storm","slug":"undefined-predicted-action-in-knowledge-navigation","errorCode":null,"errorMessage":"Undefined predicted action in knowledge navigation. {predicted_action}","messagePattern":"Undefined predicted action in knowledge navigation\\. (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"knowledge_storm/collaborative_storm/modules/information_insertion_module.py","lineNumber":104,"sourceCode":"        with dspy.settings.context(lm=self.engine):\r\n            predicted_action = self.insert_info(\r\n                intent=intent, structure=structure\r\n            ).choice\r\n\r\n        # parse action\r\n        cleaned_predicted_action = trim_output_after_hint(\r\n            predicted_action, \"Choice:\"\r\n        ).strip()\r\n        cleaned_predicted_action = cleaned_predicted_action.strip(\"-\").strip()\r\n        if cleaned_predicted_action.startswith(\"insert\"):\r\n            return \"insert\", \"\"\r\n        elif cleaned_predicted_action.startswith(\"step:\"):\r\n            node_name = trim_output_after_hint(cleaned_predicted_action, \"step:\")\r\n            return \"step\", node_name\r\n        elif cleaned_predicted_action.startswith(\"create:\"):\r\n            node_name = trim_output_after_hint(cleaned_predicted_action, \"create:\")\r\n            return \"create\", node_name\r\n        raise Exception(\r\n            f\"Undefined predicted action in knowledge navigation. {predicted_action}\"\r\n        )\r\n\r\n    def layer_by_layer_navigation_placement(\r\n        self,\r\n        knowledge_base: KnowledgeBase,\r\n        question: str,\r\n        query: str,\r\n        allow_create_new_node: bool = False,\r\n        root: Optional[KnowledgeNode] = None,\r\n    ):\r\n        current_node: KnowledgeNode = knowledge_base.root if root is None else root\r\n\r\n        while True:\r\n            action_type, node_name = self._get_navigation_choice(\r\n                knowledge_node=current_node, question=question, query=query\r\n            )\r\n            if action_type == \"insert\":\r","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/stanford-oval/storm/blob/fb951af7744dab086e34962e9bc6fe878e145f83/knowledge_storm/collaborative_storm/modules/information_insertion_module.py#L86-L122","documentation":"_get_navigation_choice parses the LM's predicted navigation action and expects it to start with 'node:', 'step:', or 'create:'. Anything else (including malformed or free-text output) falls through to this exception.","triggerScenarios":"Calling layer_by_layer_navigation_placement with an LLM prediction whose cleaned action string lacks all three recognized prefixes, e.g. 'I would put it under History'.","commonSituations":"LLM answers in prose instead of the constrained format, model/prompt drift, or weak models ignoring few-shot examples.","solutions":["Use a stronger instruction-following LM for the navigation module","Retry the navigation call on this exception (parse failures are often transient)","Add prefix normalization/fuzzy matching before invoking the module if you control the prediction pipeline"],"exampleFix":"# before\nplacement = module.layer_by_layer_navigation_placement(kb, question, information)\n\n# after\ntry:\n    placement = module.layer_by_layer_navigation_placement(kb, question, information)\nexcept Exception as e:\n    if 'Undefined predicted action' in str(e):\n        placement = module.layer_by_layer_navigation_placement(kb, question, information)  # retry\n    else:\n        raise","handlingStrategy":"retry","validationCode":null,"typeGuard":"def is_valid_action(pred: str) -> bool:\n    p = pred.strip().lower()\n    return p.startswith(('node:', 'step:', 'create:'))","tryCatchPattern":"try:\n    placement = module.layer_by_layer_navigation_placement(kb, q, info)\nexcept Exception as e:\n    if 'Undefined predicted action' in str(e):\n        placement = module.layer_by_layer_navigation_placement(kb, q, info)\n    else:\n        raise","preventionTips":["Use a constrained/strong classifier model","Normalize and prefix-check predictions before calling","Retry on parse failure"],"tags":["co-storm","knowledge-navigation","llm-output-parsing"],"backgroundTag":"llm-output-unparseable","analyzedSha":"fb951af7744dab086e34962e9bc6fe878e145f83","analyzedAt":"2026-08-28T11:56:54.780Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}