
    g%                        d dl Z d dlZd dlZd dlZd dlZ G d d      Zdddej                  dej                  dej                  ej                     dej                  d	   d
ej                  f
dZ	dej                  eef   dej                  dej                  d	   d
ej                  eef   fdZdej                  d
ej                  ej                     fdZdej                  d
ej                  fdZdej                  d
ej                   eef   fdZdej                  d
ej                   eef   fdZdej                   eej                  f   d
ej                   eef   fdZdej                   eej                  f   d
ej                   eef   fdZdej                  d
ej                  e   fdZdedej                  dej                  d	   dej                   eef   d
ef
dZy)    Nc                   ,    e Zd ZU dZeed<   deddfdZy)FieldMetadataa  
    Metadata class used to annotate fields to provide additional information.

    Example:
    class MyDict(TypedDict):
        field: typing.Annotated[str, FieldMetadata(alias="field_name")]

    Will serialize: `{"field": "value"}`
    To: `{"field_name": "value"}`
    aliasreturnNc                    || _         y N)r   )selfr   s     N/var/www/openai/venv/lib/python3.12/site-packages/cohere/core/serialization.py__init__zFieldMetadata.__init__   s	    
    )__name__
__module____qualname____doc__str__annotations__r    r   r
   r   r      s!    	 J  r   r   )
inner_typeobject_
annotationr   	direction)readwriter   c                    | y||}t        |      }t        j                  |      rAt        |t        j
                        r't        | t        j                        rt        | ||      S t        j                  |      r't        | t        j                        rt        | ||      S t        j                  |      t        j                  k(  s/t        j                  |      t        k(  s|t        j                  k(  r{t        | t        j                        rat        j                  |      d   }t        j                  |      d   }| j!                         D ci c]  \  }}|t#        ||||       c}}S t        | t$              st        j                  |      t        j&                  k(  s/t        j                  |      t(        k(  s|t        j&                  k(  rOt        | t        j&                        r5t        j                  |      d   }| D 	ch c]  }	t#        |	|||       c}	S t        j                  |      t        j*                  k(  s/t        j                  |      t,        k(  s|t        j*                  k(  rt        | t        j*                        st        j                  |      t        j.                  k(  sCt        j                  |      t0        j2                  j.                  k(  s|t        j.                  k(  rOt        | t        j.                        r5t        j                  |      d   }| D 	cg c]  }	t#        |	|||       c}	S t        j                  |      t        j4                  k(  r+t        j                  |      D ]  }
t#        | ||
|      }  | S t7        |      }|| S | S c c}}w c c}	w c c}	w )a.  
    Respect the metadata annotations on a field, such as aliasing. This function effectively
    manipulates the dict-form of an object to respect the metadata annotations. This is primarily used for
    TypedDicts, which cannot support aliasing out of the box, and can be extended for additional
    utilities, such as defaults.

    Parameters
    ----------
    object_ : typing.Any

    annotation : type
        The type we're looking to apply typing annotations from

    inner_type : typing.Optional[type]

    Returns
    -------
    typing.Any
    Nr      )r   r   r   r   )_remove_annotationsinspectisclass
issubclasspydantic	BaseModel
isinstancetypingMapping_convert_mappingtyping_extensionsis_typeddict
get_originDictdictget_argsitems'convert_and_respect_annotation_metadatar   SetsetListlistSequencecollectionsabcUnion_get_annotation)r   r   r   r   
clean_typekey_type
value_typekeyvalueitemmemberannotated_types               r
   r-   r-      s6   6 
$Z0J 	
#z8#5#56w/Y??%%j1j&..6YY?? 	$$Z0FKK?''
3t;$
Wfkk
*$--j9!<&//
;A>
 &mmo
 .
U 8%%#	  .
 	
 gs#((4

B ++J73>VZZ'&**-*33J?BJ $ $D 8 ))'	 $  ",,Z8FKKG$//
;tC,7FKK0 ",,Z8FOOK$//
;{?W?WW07FOO4*33J?BJ $ $D 8 ))'	 $  ##J/6<<?
 (00<F=%!#	G = $Z0N NS
$2s   N3N98N>expected_typec           	      |   i }t        j                  |d      }t        |      }| j                         D ]  \  }}|dk(  r)||v r%|j	                  |      }|#|j	                  |      }	n|j	                  |      }		|||<   M|dk(  r||vrt        ||	|      ||<   ht        ||	|      |t        ||	||      <    |S )NTinclude_extrasr   )r   r   r   )r&   get_type_hints_get_alias_to_field_namer,   getr-   
_alias_key)
r   r?   r   converted_objectannotationsaliases_to_field_namesr:   r;   dealiased_keytype_s
             r
   r%   r%      s    
 24#22=QUVK5kBmmo
U3*@#@266s;M(#6OOC(E
 =$)S!& S0F%F$K%9%S!
 8RWclm ZUI?UVW% &* r   rK   c                     t        j                  |       }|y |t         j                  k(  r-t        j                  |       d   } t        j                  |       }|t         j                  k(  r| S y Nr   )r&   r(   NotRequiredr+   	AnnotatedrK   maybe_annotated_types     r
   r6   r6      sh    ,77>#0<<<!**51!40;;EB0:::r   c                    t        j                  |       }|| S |t         j                  k(  r!t        t        j                  |       d         S |t         j
                  k(  r!t        t        j                  |       d         S | S rM   )r&   r(   rN   r   r+   rO   rP   s     r
   r   r      sy    ,77>#0<<<"#4#=#=e#DQ#GHH0:::"#4#=#=e#DQ#GHHLr   c                 F    t        j                  | d      }t        |      S NTrA   )r&   rC   rD   rK   rH   s     r
   get_alias_to_field_mappingrV          #225NK#K00r   c                 F    t        j                  | d      }t        |      S rT   )r&   rC   _get_field_to_alias_namerU   s     r
   get_field_to_alias_mappingrZ      rW   r   field_to_hintc                 `    i }| j                         D ]  \  }}t        |      }||||<    |S r   r,   _get_alias_from_typer[   aliasesfieldhintmaybe_aliass        r
   rD   rD      sA     G$**,t*40"#(GK  - Nr   c                 `    i }| j                         D ]  \  }}t        |      }||||<    |S r   r]   r_   s        r
   rY   rY      s@     G$**,t*40"(GEN - Nr   c                     t        |       }|Jt        j                  |      dd  }|D ]-  }t        |t              s|j
                  !|j
                  c S  y )Nr   )r6   r&   r+   r"   r   r   )rK   rQ   rH   r   s       r
   r^   r^      s[    *51''001EFqrJ%J*m49I9I9U!''' & r   r:   rI   c                 P    |dk(  r|j                  | |       S t        |      xs | S )Nr   )rK   )rE   r^   )r:   rK   r   rI   s       r
   rF   rF     s/     F%))#s33e,33r   )r3   r   r#   r&   r    r   AnyOptionalLiteralr-   r$   r   objectr%   r6   r   r)   rV   rZ   rD   rY   r^   rF   r   r   r
   <module>rk      s.        , /3	}ZZ} 

} 

+	}
 ~~o.} ZZ}@^^CK(:: ~~o. ^^CK 	@6:: &//&***E vzz fjj 1fjj 1V[[c5J 1
1fjj 1V[[c5J 1
;;sFJJ/[[c;;sFJJ/[[c


 
vs/C 
4	4::4 ~~o.4 #KKS1	4
 	4r   