# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# top-level folder for each specific model found within the models/ directory at
# the top-level of this source tree.

import textwrap
from typing import Optional

from .base import PromptTemplate, PromptTemplateGeneratorBase


class ToolResponseGenerator(PromptTemplateGeneratorBase):
    def gen(
        self,
        status: str,
        stdout: Optional[str] = None,
        stderr: Optional[str] = None,
    ):
        assert status in [
            "success",
            "failure",
        ], f"status must be 'success' or 'failure'; Got: {status}"
        template_str = textwrap.dedent(
            """
            {% if status == "success" %}completed{% else %}failed{% endif %}
            {%- if stdout %}
            [stdout]{{ stdout }}[/stdout]
            {%- endif -%}
            {%- if stderr %}
            [stderr]{{ stderr }}[/stderr]
            {%- endif -%}
            """
        )
        return PromptTemplate(
            template_str.lstrip("\n"),
            {
                "status": status,
                "stdout": stdout,
                "stderr": stderr,
            },
        )

    def data_examples(self):
        return [
            # success
            {
                "status": "success",
                "stdout": '{"results":["something something"]}',
            },
            # failure
            {
                "status": "failure",
                "stderr": "brave_search encounter an error: could not communicate with api.brave.com",
            },
        ]
