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

from __future__ import annotations

import typing

import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, update_forward_refs
from ..core.unchecked_base_model import UncheckedBaseModel
from .conversation_history_transcript_common_model_input import ConversationHistoryTranscriptCommonModelInput
from .create_tool_call_unit_test_request_dynamic_variables_value import (
    CreateToolCallUnitTestRequestDynamicVariablesValue,
)
from .test_from_conversation_metadata_input import TestFromConversationMetadataInput
from .unit_test_tool_call_evaluation_model_input import UnitTestToolCallEvaluationModelInput


class CreateToolCallUnitTestRequest(UncheckedBaseModel):
    from_conversation_metadata: typing.Optional[TestFromConversationMetadataInput] = pydantic.Field(default=None)
    """
    Metadata of a conversation this test was created from (if applicable).
    """

    dynamic_variables: typing.Optional[
        typing.Dict[str, typing.Optional[CreateToolCallUnitTestRequestDynamicVariablesValue]]
    ] = pydantic.Field(default=None)
    """
    Dynamic variables to replace in the agent config during testing
    """

    chat_history: typing.Optional[typing.List[ConversationHistoryTranscriptCommonModelInput]] = None
    tool_call_parameters: typing.Optional[UnitTestToolCallEvaluationModelInput] = pydantic.Field(default=None)
    """
    How to evaluate the agent's tool call (if any). If empty, the tool call is not evaluated.
    """

    check_any_tool_matches: typing.Optional[bool] = pydantic.Field(default=None)
    """
    If set to True this test will pass if any tool call returned by the LLM matches the criteria. Otherwise it will fail if more than one tool is returned by the agent.
    """

    name: str
    parent_folder_id: typing.Optional[str] = pydantic.Field(default=None)
    """
    The ID of the parent folder. If not provided, the test will be created at the root level.
    """

    if IS_PYDANTIC_V2:
        model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)  # type: ignore # Pydantic v2
    else:

        class Config:
            frozen = True
            smart_union = True
            extra = pydantic.Extra.allow


update_forward_refs(CreateToolCallUnitTestRequest)
