# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

from ...core.datetime_utils import serialize_datetime

try:
    import pydantic.v1 as pydantic  # type: ignore
except ImportError:
    import pydantic  # type: ignore


class CustomTool(pydantic.BaseModel):
    name: str = pydantic.Field()
    """
    The name of the tool.
    """

    description: str = pydantic.Field()
    """
    A short explanation of what the tool does.
    """

    input_schema: typing.Any = pydantic.Field()
    """
    A JSON schema describing the input data.
    """

    speech: typing.Optional[str] = pydantic.Field(default=None)
    """
    A string that will be spoken to the agent while your tool waits for a response.
    """

    response_data: typing.List[typing.Any] = pydantic.Field()
    """
    An array of objects that describe how to extract data from the response. Within the response data, you can create variables that the phone agent can reference in its prompt.
    """

    def json(self, **kwargs: typing.Any) -> str:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().json(**kwargs_with_defaults)

    def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().dict(**kwargs_with_defaults)

    class Config:
        frozen = True
        smart_union = True
        json_encoders = {dt.datetime: serialize_datetime}
