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

import typing

import pydantic
import typing_extensions
from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from ...core.serialization import FieldMetadata
from .entity_id import EntityId
from .llm_persona import LlmPersona


class SimulationContext(UniversalBaseModel):
    additional_prompt_text: typing_extensions.Annotated[
        typing.Optional[str], FieldMetadata(alias="additionalPromptText")
    ] = pydantic.Field(default=None)
    """
    If provided, overrides the agent's default additional prompt text during the simulation. 
    Note that this field is provided for backwards compatibility and will be removed in a future release. 
    Instead please use the `availableKnowledgeBases` field to include a knowledge base with a document `llmInclusionStatus` set to `ALWAYS`.
    """

    persona: typing.Optional[LlmPersona] = pydantic.Field(default=None)
    """
    The persona to use during the simulation. If not provided, the agent's default persona will be used.
    """

    available_knowledge_bases: typing_extensions.Annotated[
        typing.Optional[typing.List[EntityId]], FieldMetadata(alias="availableKnowledgeBases")
    ] = pydantic.Field(default=None)
    """
    If provided, knowledge search will be restricted to the provided list of knowledge bases. Otherwise, all active knowledge bases will be used. An empty list means no knowledge bases will be used.
    """

    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
