o
    ØRWj÷  ã                   @  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_V1Úmodel_json_schemaÚ_TÚmodelú4type[pydantic.BaseModel] | pydantic.TypeAdapter[Any]Úreturnúdict[str, Any]c                 C  sR   t  | ¡rt| ƒrt| ƒ}nts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   úc/home/esfera/Documents/content_generation/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 |
ƒr�dd„ |
 ¡ D ƒ| d< ‡ ‡fdd„|
 ¡ D ƒ| d
< |  d¡}t |ƒr˜t|g ˆ ¢d‘R ˆd�| d< |  d¡}t|ƒr¯‡ ‡fdd„t|ƒD ƒ| d< |  d¡}t|ƒråt|ƒ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     


[


