Source code for sherpa_ai.output_parser
import json
import re
from abc import abstractmethod
from typing import Dict, NamedTuple
from langchain_core.output_parsers import BaseOutputParser
[docs]
class TaskAction(NamedTuple):
name: str
args: Dict
[docs]
class BaseTaskOutputParser(BaseOutputParser):
[docs]
@abstractmethod
def parse(self, text: str) -> TaskAction:
"""Return TaskAction"""
[docs]
class TaskOutputParser(BaseTaskOutputParser):
[docs]
def parse(self, text: str) -> TaskAction:
try:
parsed = json.loads(text, strict=False)
except json.JSONDecodeError:
preprocessed_text = preprocess_json_input(text)
try:
parsed = json.loads(preprocessed_text, strict=False)
except Exception:
return TaskAction(
name="ERROR",
args={"error": f"Could not parse invalid json: {text}"},
)
try:
return TaskAction(
name=parsed["command"]["name"],
args=parsed["command"]["args"],
)
except (KeyError, TypeError):
# If the command is null or incomplete, return an erroneous tool
return TaskAction(
name="ERROR", args={"error": f"Incomplete command args: {parsed}"}
)