
    g                        d dl mZ d dlZd dlmZmZ d dlmZ d dlZddl	m
Z
 ddlmZmZ ddlmZmZ  ed	      Zdd
Z	 	 	 	 	 	 	 	 ddZddZddZddZddZddZy)    )annotationsN)AnyTypeVar)	TypeGuard   )	NOT_GIVEN)is_dictis_list)PYDANTIC_V2model_json_schema_Tc                    t        j                  |       rt        |       rt        |       }n?t        r+t        | t        j                        r| j                         }nt        d|        t        |d|      S )Nz:Non BaseModel types are only supported with Pydantic v2 -  pathroot)inspectisclassis_basemodel_typer   r   
isinstancepydanticTypeAdapterjson_schema	TypeError_ensure_strict_json_schema)modelschemas     I/var/www/openai/venv/lib/python3.12/site-packages/openai/lib/_pydantic.pyto_strict_json_schemar      sd    u"3E":"5)	E8+?+?@""$TUZT[\]]%f2FCC    c               p   t        |       st        d|  d|       | j                  d      }t        |      r-|j                         D ]  \  }}t	        |g |d||        | j                  d      }t        |      r-|j                         D ]  \  }}t	        |g |d||        | j                  d      }	|	dk(  r	d| vrd	| d<   | j                  d
      }
t        |
      r[|
j                         D cg c]  }| c}| d<   |
j                         D ci c]  \  }}|t	        |g |d
||       c}}| d
<   | j                  d      }t        |      rt	        |g |d|      | d<   | j                  d      }t        |      r=t        |      D cg c]#  \  }}t	        |g |dt        |      |      % c}}| d<   | j                  d      }t        |      rt        |      dk(  r9| j                  t	        |d   g |dd|             | j                  d       n=t        |      D cg c]#  \  }}t	        |g |dt        |      |      % c}}| d<   | j                  dt              | j                  d       | j                  d      }|rut        | d      rit        |t              s
J d|        t        ||      }t        |      st!        d| d|       | j                  i ||        | j                  d       | S c c}w c c}}w c c}}w c c}}w )zkMutates the given JSON schema to ensure it conforms to the `strict` standard
    that the API expects.
    z	Expected z to be a dictionary; path=z$defsr   definitionstypeobjectadditionalPropertiesF
propertiesrequireditemsanyOfallOf   r   0defaultz$refzReceived non-string $ref - )r   refzExpected `$ref: z&` to resolved to a dictionary but got )r	   r   getr(   r   keysr
   	enumeratestrlenupdatepopr   has_more_than_n_keysr   resolve_ref
ValueError)r   r   r   defsdef_name
def_schemar"   definition_namedefinition_schematypr&   propkeyprop_schemar(   any_ofivariantall_ofentryr.   resolveds                         r   r   r      s    ;)K=0J4&QRR??7#Dt}$(JJL Hj&z8R$8R8R8RY]^ %1 //-0K{2=2C2C2E.O.&'8?f?f}?fVe?fmqr 3F //&
!C
h1D.3*+ .Jz4>OO4E"F4ED44E"FJ %/$4$4$6%
$6 [ +K>X>Xl>XTW>X_cdd$6%
L! OOG$Eu~9%FVFVgFV]abG __W%Fv (/ 
/
7 'w5Mt5MW5Mc!f5MTXY/ 
G __W%Fvv;!9&)J_DJ_RYJ_[^J_fjklOOG$ !*& 1$ 1HAu +57O7Ow7OA7OVZ[ 1$K  y),4	" //&
!C
#K3#s#H'B3%%HH#Dc2x /u4Z[cZdeff 	6h6+67o #G%
 
$s   <	L! L&!(L,(L2c                    |j                  d      st        d|d      |dd  j                  d      }| }|D ]!  }||   }t        |      sJ d| d|        |}# |S )Nz#/zUnexpected $ref format z; Does not start with #/r   /z1encountered non-dictionary entry while resolving z - )
startswithr8   splitr	   )r   r.   r   rG   r@   values         r   r7   r7   s   s    >>$23'9QRSSqr7==DHu~e!RSVRWWZ[cZdee~ 
 Or    c                b    t        j                  |       syt        | t        j                        S )NF)r   r   
issubclassr   	BaseModelr>   s    r   r   r      s$    ??3c8--..r    c                    t        | d      S )z@Returns True if the given type likely used `@pydantic.dataclass`__pydantic_config__)hasattrrP   s    r   is_dataclass_like_typerT      s    3-..r    c                    t        |       S )N)_is_dict)objs    r   r	   r	      s     C=r    c                J    d}| j                         D ]  }|dz  }||kD  s y y)Nr   r+   TF)r0   )rW   nrC   _s       r   r6   r6      s/    	AXXZ	Qq5  r    )r   z4type[pydantic.BaseModel] | pydantic.TypeAdapter[Any]returndict[str, Any])r   r$   r   ztuple[str, ...]r   dict[str, object]r[   r\   )r   r]   r.   r2   r[   r$   )r>   r#   r[   z#TypeGuard[type[pydantic.BaseModel]])r>   r#   r[   bool)rW   r$   r[   zTypeGuard[dict[str, object]])rW   r]   rY   intr[   r^   )
__future__r   r   typingr   r   typing_extensionsr   r   _typesr   _utilsr	   rV   r
   _compatr   r   r   r   r   r7   r   rT   r6   r   r    r   <module>rf      sv    "   '   1 4T]DUU U 	U
 Up//
r    