o
    ?Hh                     @  s   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dZd-ddZd.ddZd/dd Zd0d"d#Zd1d&d'Zd2d*d+ZdS )3    )annotationsN)AnyTypeVar)	TypeGuard   )	NOT_GIVEN)is_dictis_list)PYDANTIC_V2model_json_schema_Tmodel4type[pydantic.BaseModel] | pydantic.TypeAdapter[Any]returndict[str, Any]c                 C  sR   t | rt| rt| }ntrt| tjr|  }nt	d|  t
|d|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)r   schemar   r   T/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/openai/lib/_pydantic.pyto_strict_json_schema   s   

r    r   objectr   tuple[str, ...]r   dict[str, object]c                  sr  t | std|  d  | d}t |r.| D ]\}}t|g  d|R d q| d}t |rN| D ]\}}t|g  d|R d q;| d}	|	dkr_d| vr_d	| d< | d
}
t |
rdd |
 D | d<  fdd|
 D | d
< | d}t |rt|g  dR d| d< | d}t|r fddt|D | d< | d}t|rt|dkr| 	t|d g  ddR d | 
d n fddt|D | d< | dtdu r| 
d | d}|r7t| dr7t|tsJ d| t|d}t |s"td| d| | 	i ||  | 
d t|  dS | S )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typer!   additionalPropertiesF
propertiesc                 S  s   g | ]}|qS r   r   ).0propr   r   r   
<listcomp>9   s    z._ensure_strict_json_schema.<locals>.<listcomp>requiredc                   s.   i | ]\}}|t |g  d |R dqS )r'   r   )r   )r(   keyprop_schemar   r   r   
<dictcomp>:   s    z._ensure_strict_json_schema.<locals>.<dictcomp>itemsanyOfc                   0   g | ]\}}t |g  d t|R dqS )r0   r   r   str)r(   ivariantr   r   r   r*   H       allOf   r   0c                   r1   )r7   r   r2   )r(   r4   entryr   r   r   r*   T   r6   defaultNz$refzReceived non-string $ref - )r   refzExpected `$ref: z&` to resolved to a dictionary but got )r   r   getr/   r   keysr	   	enumeratelenupdatepopr   has_more_than_n_keysr   r3   resolve_ref
ValueError)r   r   r   defsdef_name
def_schemar$   definition_namedefinition_schematypr'   r/   any_ofall_ofr<   resolvedr   r   r   r      s^   	








&




r   r<   r3   c                 C  sf   | dstd|d|dd  d}| }|D ]}|| }t|s.J d| d| |}q|S )Nz#/zUnexpected $ref format z; Does not start with #/r   /z1encountered non-dictionary entry while resolving z - )
startswithrE   splitr   )r   r<   r   rN   r,   valuer   r   r   rD   v   s   
rD   rK   r%   #TypeGuard[type[pydantic.BaseModel]]c                 C  s   t | sdS t| tjS )NF)r   r   
issubclassr   	BaseModelrK   r   r   r   r      s   
r   boolc                 C  s
   t | dS )z@Returns True if the given type likely used `@pydantic.dataclass`__pydantic_config__)hasattrrV   r   r   r   is_dataclass_like_type   s   
rZ   objTypeGuard[dict[str, object]]c                 C  s   t | S )N)_is_dict)r[   r   r   r   r      s   r   nintc                 C  s,   d}|   D ]}|d7 }||kr dS qdS )Nr   r8   TF)r>   )r[   r^   r4   _r   r   r   rC      s   rC   )r   r   r   r   )r   r!   r   r"   r   r#   r   r   )r   r#   r<   r3   r   r!   )rK   r%   r   rS   )rK   r%   r   rW   )r[   r!   r   r\   )r[   r#   r^   r_   r   rW   )
__future__r   r   typingr   r   typing_extensionsr   r   _typesr   _utilsr   r]   r	   _compatr
   r   r   r    r   rD   r   rZ   rC   r   r   r   r   <module>   s     


[


