
    g.              	       $   U d dl Zd dlZd dlmZ d dlZd dlZddlmZ ddl	m
Z
 ej                  j                  d      Zer1d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ n0d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ  ej>                  d      Z  ej>                  dejB                        Z"dejF                  e    dejH                  de fdZ%dejH                  dejL                  ejH                  gejH                  f   dejH                  fdZ' G d dejB                        Z(dejR                  ejH                     dejR                  ejH                     dejR                  ejH                     fdZ*dejV                  e,ejH                  f   dejV                  e,ejH                  f   dejV                  e,ejH                  f   fdZ-er( G d d e(ej\                        Z/e/Z0ejb                  e2d!<   ne(Z0ejb                  e2d!<   d"ejH                  dejH                  fd#Z3d$ejF                  d   d%ejH                  ddfd&Z4ejL                  d'ejH                  f   Z5	 d/d(e6dejL                  e5ge5f   fd)Z7d/d*e,d(e6dejL                  e5ge5f   fd+Z8ejr                  eejt                  jv                  f   Z<d$ejF                  d   dejz                  e,e<f   fd,Z>d-e<dejH                  fd.Z?y)0    N)defaultdict   )serialize_datetime)'convert_and_respect_annotation_metadataz2.)
parse_date)parse_datetime)ENCODERS_BY_TYPE)get_args)
get_origin)is_literal_type)is_union)
ModelFieldTModel)boundtype_object_returnc                     t        || d      }t        r&t        j                  |       }|j	                  |      S t        j
                  | |      S Nreadr   
annotation	direction)r   IS_PYDANTIC_V2pydanticTypeAdaptervalidate_pythonparse_obj_as)r   r   dealiased_objectadapters       S/var/www/openai/venv/lib/python3.12/site-packages/cohere/core/pydantic_utilities.pyr   r   ;   sL    >w[`lrs&&u-&&'788$$U,<==    objfallback_serializerc                 >    t         rddlm}  || |      S  ||       S )Nr   )to_jsonable_python)fallback)r   pydantic_corer'   )r$   r%   r'   s      r"   to_jsonable_with_fallbackr*   D   s#     4!#0CDD"3''r#   c            
           e Zd ZU erc ej
                  d      Zej                  ej
                     e	d<    ej                  dd      dej                  dej                  fd	       Zn
 G d
 d      Ze	 ddej                   d   dej"                  ej$                  e      dej                  ddfd       Ze	 ddej                   d   dej"                  ej$                  e      dej                  ddf fd       Zdej                  def fdZdej                  dej.                  eej                  f   f fdZ xZS )UniversalBaseModel )protected_namespacesmodel_configwrapjson)mode	when_usedhandlerr   c           	           ||       }|j                         D ci c]-  \  }}|t        |t        j                        rt	        |      n|/ }}}|S c c}}w N)items
isinstancedtdatetimer   )selfr4   
serializedkvdatas         r"   serialize_modelz"UniversalBaseModel.serialize_modelV   sW     J^h^n^n^pq^pVZVWYZA
1bkk0J)!,PQQ^pDqK rs   2Ac                   ,    e Zd ZdZej
                  eiZy)UniversalBaseModel.ConfigTN)__name__
__module____qualname__smart_unionr9   r:   r   json_encodersr-   r#   r"   ConfigrB   ^   s    K[[*<=Mr#   rH   clsr   _fields_setvaluesc                 D    t        || d      } | j                  |fi |S r   )r   	construct)rI   rJ   rK   r    s       r"   model_constructz"UniversalBaseModel.model_constructb   s-     C6^amsts}}[=,<==r#   c                 l    t        || d      }t        rt        |   |fi |S t        |   |fi |S r   )r   r   superrN   rM   )rI   rJ   rK   r    	__class__s       r"   rM   zUniversalBaseModel.constructi   sF     C6^amst7*;K:JKK7$[E4DEEr#   kwargsc                 Z    ddd|}t         rt        |   di |S t        |   di |S )NT)by_aliasexclude_unsetr-   )r   rP   model_dump_jsonr1   )r;   rR   kwargs_with_defaultsrQ   s      r"   r1   zUniversalBaseModel.jsons   sG    !,
 ,

 7*B-ABB7<7"677r#   c                 
   t         r;i |dddd}i |dddd}t        t        |   d	i |t        |   d	i |      }n| j                  j                         }t        | j                        }|j                         D ]Q  \  }}||vst        |      }	|	d|v s|d   r#|j                  |       |	7| j                  j                  |       S dd|d|}
t        | ,  d	i |
}t        || j                  d      S )
z
        Override the default dict method to `exclude_unset` by default. This function patches
        `exclude_unset` to work include fields within non-None default values.
        TF)rT   rU   exclude_none)rT   rY   rU   rU   )rT   rU   includewriter   r-   )r   deep_union_pydantic_dictsrP   
model_dump__fields_set__copy_get_model_fieldsrQ   r7   _get_field_defaultadddictr   )r;   rR   "kwargs_with_defaults_exclude_unset!kwargs_with_defaults_exclude_none	dict_dumprJ   fieldsnamefielddefault1kwargs_with_defaults_exclude_unset_include_fieldsrQ   s              r"   rc   zUniversalBaseModel.dict~   sD    >> !% %	>.==  $!&	=- 2"H%GH"G%FGI --224K&t~~6F%||~e{*07G
 *&/HQWXgQh#-". //33D9  . !!%&M 	M= Y'XYI6yUYUcUcovwwr#   r6   )rC   rD   rE   r   r   
ConfigDictr/   typingClassVar__annotations__model_serializerSerializerFunctionWrapHandlerAnyr@   rH   classmethodTypeOptionalSetstrrN   rM   r1   Dictrc   __classcell__)rQ   s   @r"   r,   r,   O   sv   =PX=P=P!#>
fooh&9&9: 	

 
#	"	"&	A	8+Q+Q 	V\V`V` 	 
B		> 	> SW>[[!>06

30P>cicmcm>	> > SWF[[!F06

30PFcicmcmF	F F	8VZZ 	8C 	86xVZZ 6xFKKVZZ,H 6x 6xr#   r,   sourcedestinationc                    g }t        |       D ]s  \  }}||   }t        |t              r|j                  t	        ||             7t        |t
              r|j                  t        ||             c|j                  |       u |S r6   )	enumerater8   rc   appendr\   list_union_list_of_pydantic_dicts)rz   r{   converted_listiitemdestination_values         r"   r   r      s~     /1NV$4'NdD!!!";DBS"TUd#!!"?FW"XY!!$' % r#   c                     | j                         D ]Y  \  }}|j                  |i       }t        |t              rt	        ||       5t        |t
              rt        ||      ||<   U|||<   [ |S r6   )r7   
setdefaultr8   rc   r\   r   r   )rz   r{   keyvaluenodes        r"   r\   r\      sm     lln
U%%c2.eT"%eT2 t$<UDIK$K % r#   c                       e Zd Zy)V2RootModelN)rC   rD   rE   r-   r#   r"   r   r      s    r#   r   UniversalRootModeloc                 "   t        t              }t        j                         D ]  \  }}||xx   |fz  cc<    t	        |       t        v rt        t	        |          |       S |j                         D ]  \  }}t        | |      s ||       c S  y r6   )r   tupleencoders_by_typer7   typer8   )r   encoders_by_class_tuplesr   encoderclasses_tuples        r"   encode_by_typer      s    E  +002w )eX5) 3 Aw""Q(++":"@"@"Ba'1: #Cr#   modellocalnsc                 Z    t         r| j                  d       y  | j                  di | y )NF)raise_errorsr-   )r   model_rebuildupdate_forward_refs)r   r   s     r"   r   r      s)    /!!!,G,r#   .prec                 ,     dt         dt         f fd}|S )Nfuncr   c                     t         r  t        j                  rdnd      |       S  t        j                        |       S Nbeforeafter)r2   )r   )r   r   model_validatorroot_validator)r   r   s    r"   	decoratorz+universal_root_validator.<locals>.decorator   s:    N8++SgNtTT38**s3D99r#   AnyCallable)r   r   s   ` r"   universal_root_validatorr      s    : : : r#   
field_namec                 0     dt         dt         f fd}|S )Nr   r   c                     t         r! t        j                  rdnd      |       S  t        j                        |       S r   )r   r   field_validator	validator)r   r   r   s    r"   r   z,universal_field_validator.<locals>.decorator  s@    Z8++JXRYZ[_``:8%%jc:4@@r#   r   )r   r   r   s   `` r"   universal_field_validatorr     s!    A A A r#   c                 >    t         r| j                  S | j                  S r6   )r   model_fields
__fields__)r   s    r"   r`   r`     s     !!!r#   ri   c                 v    	 | j                         }t        rddlm} ||k(  ry |S |S #  | j                  }Y &xY w)Nr   )PydanticUndefined)get_defaultrj   r   r)   r   )ri   r   r   s      r"   ra   ra     sC    !!# 3%%Ls   ( 8)F)@r:   r9   rm   collectionsr   typing_extensionsr   datetime_utilsr   serializationr   VERSION
startswithr   pydantic.v1.datetime_parser   r   pydantic.v1.jsonr	   r   pydantic.v1.typingr
   r   r   r   pydantic.v1.fieldsr   pydantic.datetime_parsepydantic.fieldspydantic.jsonpydantic.typingTypeVarr   	BaseModelr   rt   rr   r   Callabler*   r,   Listr   rx   rw   r\   	RootModelr   r   	TypeAliasro   r   r   r   boolr   r   Unionrg   	FieldInfoPydanticFieldMappingr`   ra   r-   r#   r"   <module>r      s     #   . B!!,,T2 <@H8B48B4
 FNN3wh&8&89>A > > >(	(*0//6::,

:R*S(ZZ(ex++ exPKK

#28++fjj2I[[KKVZZ(7={{3

?7S[[fjj!$ ((*<*<  7B)33A6H)33Hfjj VZZ -v{{73 -

 -t - ooc6::o. 			__k]K/0	# D V__VaUbdoUoEp  Z)B)BBC ;;w ^^C&' m 

 r#   