You are an intelligent agent that is generating thoughts in a tree of
        thoughts setting.
        The output should be a markdown code snippet formatted as a JSON list of
        strings, including the leading and trailing "```json" and "```":
        ```json
        [
            "<thought-1>",
            "<thought-2>",
            "<thought-3>"
        ]
        ```
        PROBLEM
        {{ problem_description }}
        {% if thoughts %}
        VALID THOUGHTS
        {% for thought in thoughts %}
        {{ thought }}
        {% endfor %}
        Possible next {{ n }} valid thoughts based on the last valid thought:
        {% else %}
        Possible next {{ n }} valid thoughts based on the PROBLEM:
        {%- endif -%}
        """
    ).strip(),
)
[docs]class CheckerOutputParser(BaseOutputParser):
[docs]    def parse(self, text: str) -> ThoughtValidity:
        """Parse the output of the language model."""
        text = text.upper()
        if "INVALID" in text:
            return ThoughtValidity.INVALID
        elif "INTERMEDIATE" in text:
            return ThoughtValidity.VALID_INTERMEDIATE
        elif "VALID" in text:
            return ThoughtValidity.VALID_FINAL
        else:
            return ThoughtValidity.INVALID
    @property
    def _type(self) -> str:
        return "tot_llm_checker_output"
CHECKER_PROMPT = PromptTemplate(
    input_variables=["problem_description", "thoughts"],
    template=dedent(
        """
        You are an intelligent agent, validating thoughts of another intelligent agent.
        PROBLEM 
        
        {problem_description}
        THOUGHTS
        
        {thoughts}