o
    cBg                     @   s   d dl Z d dlZd dlmZ d dlmZmZmZmZ d dlZd dl	m
Z
 d dlm
Z ddddedeeeef  dee d	ee
ef fd
dZded	efddZdS )    N)is_dataclass)AnyDictOptionalUnion)	BaseModelfield_definitionsroot
model_namer	   r
   returnc                C   sh   zddl m} || ||dW S  ty3   ddlm} i }|dur%||d< || fi ||p.i  Y S w )zCreate a pydantic model with the given field definitions.

    Args:
        model_name: The name of the model.
        field_definitions: The field definitions for the model.
        root: Type for a root model (RootModel)
    r   )create_model_v2r   )create_modelN__root__)langchain_core.utils.pydanticr   ImportErrorlangchain_core.runnables.utilsr   )r   r	   r
   r   r   	v1_kwargs r   _/var/www/html/development/chatbot/venv/lib/python3.10/site-packages/langgraph/utils/pydantic.pyr      s   r   type_c                 C   sh   t | rdS t| trt| trdS t| dr2| jD ]}|tju r$ dS |t	ju r1t
jdkr1 dS qdS )zCheck if a given "complex" type is supported by pydantic.

    This will return False for primitive types like int, str, etc.

    The check is meant for container types like dataclasses, TypedDicts, etc.
    T__orig_bases__)      F)r   
isinstancetype
issubclassr   hasattrr   typing_extensions	TypedDicttypingsysversion_info)r   baser   r   r   is_supported_by_pydantic,   s   




r$   )r!   r    dataclassesr   r   r   r   r   r   pydanticr   pydantic.v1BaseModelV1strr   boolr$   r   r   r   r   <module>   s&    

!