| class StructuredChatOutputParser(LCStructuredChatOutputParser): | class StructuredChatOutputParser(LCStructuredChatOutputParser): | ||||
| def parse(self, text: str) -> Union[AgentAction, AgentFinish]: | def parse(self, text: str) -> Union[AgentAction, AgentFinish]: | ||||
| try: | try: | ||||
| action_match = re.search(r"```(.*?)\n?(.*?)```", text, re.DOTALL) | |||||
| action_match = re.search(r"```(\w*)\n?({.*?)```", text, re.DOTALL) | |||||
| if action_match is not None: | if action_match is not None: | ||||
| response = json.loads(action_match.group(2).strip(), strict=False) | response = json.loads(action_match.group(2).strip(), strict=False) | ||||
| if isinstance(response, list): | if isinstance(response, list): | ||||
| else: | else: | ||||
| return AgentFinish({"output": text}, text) | return AgentFinish({"output": text}, text) | ||||
| except Exception as e: | except Exception as e: | ||||
| raise OutputParserException(f"Could not parse LLM output: {text}") from e | |||||
| raise OutputParserException(f"Could not parse LLM output: {text}") |