a
    _g                     @  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ddZdddddddZddddddZdddddZddddd Zdd!d"d#d$Zdd%dd&d'd(ZdS ))    )annotationsN)AnyTypeVar)	TypeGuard   )	NOT_GIVEN)is_dictis_list)PYDANTIC_V2model_json_schema_Tz4type[pydantic.BaseModel] | pydantic.TypeAdapter[Any]zdict[str, Any])modelreturnc                 C  sR   t | rt| rt| }n(tr6t| tjr6|  }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pydanticZTypeAdapterjson_schema	TypeError_ensure_strict_json_schema)r   Zschemar   r   b/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/openai/lib/_pydantic.pyto_strict_json_schema   s    

r   objectztuple[str, ...]zdict[str, object])r   r   r   r   c                  s~  t | std|  d  | d}t |r\| D ]$\}}t|g  d|R d q6| d}t |r| D ]$\}}t|g  d|R d qv| d}	|	dkrd| vrd	| d< | d
}
t |
rdd |
 D | d<  fdd|
 D | d
< | d}t |r4t|g  dR d| d< | d}t|rd 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}|rzt| drzt|ts&J d| t|d}t |sPt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   ZadditionalPropertiesF
propertiesc                 S  s   g | ]}|qS r   r   ).0propr   r   r   
<listcomp>9       z._ensure_strict_json_schema.<locals>.<listcomp>requiredc                   s.   i | ]&\}}|t |g  d |R dqS )r    r   )r   )r!   keyZprop_schemar   r   r   
<dictcomp>:   s   z._ensure_strict_json_schema.<locals>.<dictcomp>itemsanyOfc                   s0   g | ](\}}t |g  d t|R dqS )r)   r   r   str)r!   ivariantr   r   r   r#   H   s   allOf   r   0c                   s0   g | ](\}}t |g  d t|R dqS )r.   r   r*   )r!   r,   entryr   r   r   r#   T   s   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   r+   resolve_ref
ValueError)r   r   r   ZdefsZdef_nameZ
def_schemar   Zdefinition_nameZdefinition_schematypr    r(   Zany_ofZall_ofr3   resolvedr   r   r   r      s^    	












&




r   r+   )r   r3   r   c                 C  sf   | dstd|d|dd  d}| }|D ],}|| }t|s\J d| d| |}q4|S )Nz#/zUnexpected $ref format z; Does not start with #/r   /z1encountered non-dictionary entry while resolving z - )
startswithr<   splitr   )r   r3   r   r>   r&   valuer   r   r   r;   v   s    
r;   r   z#TypeGuard[type[pydantic.BaseModel]])r=   r   c                 C  s   t | sdS t| tjS )NF)r   r   
issubclassr   Z	BaseModelr=   r   r   r   r      s    
r   boolc                 C  s
   t | dS )z@Returns True if the given type likely used `@pydantic.dataclass`Z__pydantic_config__)hasattrrD   r   r   r   is_dataclass_like_type   s    rG   zTypeGuard[dict[str, object]])objr   c                 C  s   t | S )N)_is_dict)rH   r   r   r   r      s    r   int)rH   nr   c                 C  s,   d}|   D ]}|d7 }||kr dS qdS )Nr   r/   TF)r5   )rH   rK   r,   _r   r   r   r:      s    r:   )
__future__r   r   typingr   r   Ztyping_extensionsr   r   _typesr   _utilsr   rI   r	   Z_compatr
   r   r   r   r   r;   r   rG   r:   r   r   r   r   <module>   s   [