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

import typing

import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2
from ..core.unchecked_base_model import UncheckedBaseModel
from .custom_guardrail_config_model import CustomGuardrailConfigModel
from .custom_guardrail_config_trigger_action import CustomGuardrailConfigTriggerAction
from .guardrail_execution_mode import GuardrailExecutionMode


class CustomGuardrailConfig(UncheckedBaseModel):
    """
    Single custom guardrail configuration
    """

    is_enabled: typing.Optional[bool] = None
    name: str = pydantic.Field()
    """
    User-facing name for this guardrail
    """

    prompt: str = pydantic.Field()
    """
    Instruction describing what to block, e.g. 'don't talk about politics'
    """

    execution_mode: typing.Optional[GuardrailExecutionMode] = None
    model: typing.Optional[CustomGuardrailConfigModel] = pydantic.Field(default=None)
    """
    LLM model to use for custom guardrail evaluation
    """

    history_message_count: typing.Optional[int] = pydantic.Field(default=None)
    """
    How much recent history the guardrail sees before the reply it evaluates, counted in user messages (the agent replies between them are included too). The guardrail always gets a single <conversation_history> transcript ending in the evaluated reply, marked 'AGENT [current reply]:'. 0 (default) adds no prior history (just that line); 1 adds the latest user message onward.
    """

    trigger_action: typing.Optional[CustomGuardrailConfigTriggerAction] = None
    evaluate_full_response_only: typing.Optional[bool] = pydantic.Field(default=None)
    """
    Evaluate once against the complete non-TTS response instead of cumulative partials. Requires blocking mode.
    """

    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
