o
    i                     @  sx   d dl mZ d dlmZ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d(ddZd)d!d"Zd#S )*    )annotations)Any	TypeGuardTypeVar)	BaseModelTypeAdapter_Tmodel"type[BaseModel] | TypeAdapter[Any]returndict[str, Any]c                 C  s*   t | tr
|  }n|  }t|d|dS )N pathroot)
isinstancer   json_schemamodel_json_schema_ensure_strict_json_schema)r	   schemar   r   \/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/llm/_strict.pyto_strict_json_schema
   s   

r   r   objectr   tuple[str, ...]r   dict[str, object]c                  s  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~t|
 | 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|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| v r.| dd | d}t|tr|dg| d< nt|tr.| }d|vr*|d || d< | dd | dd | d}|rt| drt|tsUJ d| t|d }t |sjtd!| d"| | 
i ||  | d t|  dS d#D ]V}| |}t|rt	|d$krddi|v rtd%d& |D d}t |sJ d|vrq|d }t|tr|dg|d< d'd |  D }|
| |}  | S q| 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
propertiesrequiredc                   s.   i | ]\}}|t |g  d |R dqS )r   r   )r   ).0keyprop_schemar   r   r   
<dictcomp>C   s    z._ensure_strict_json_schema.<locals>.<dictcomp>itemsanyOfc                   0   g | ]\}}t |g  d t|R dqS )r%   r   r   strr    ivariantr   r   r   
<listcomp>Q       z._ensure_strict_json_schema.<locals>.<listcomp>oneOfc                   r&   )r.   r   r'   r)   r   r   r   r,   Y   r-   allOf   r   0c                   r&   )r/   r   r'   )r    r*   entryr   r   r   r,   g   r-   defaultNnulltitlediscriminatorz$refzReceived non-string $ref - )r   refzExpected `$ref: z&` to resolved to a dictionary but got r%   r.      c                 s  s     | ]}|d dikr|V  qdS )r   r4   Nr   )r    itemr   r   r   	<genexpr>   s    z-_ensure_strict_json_schema.<locals>.<genexpr>c                 S  s   i | ]\}}|d vr||qS )r8   r   )r    kvr   r   r   r#      s    )is_dict	TypeErrorgetr$   r   listkeysis_list	enumeratelenupdatepopr   r(   copyappendhas_more_than_n_keysresolve_ref
ValueErrornext)r   r   r   defsdef_name
def_schemar   definition_namedefinition_schematypr   r$   any_ofone_ofall_ofttypesr7   resolved	union_keyvariantsnon_nullmergedr   r   r   r       s   	



















&

 r   r7   r(   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 #/r9   /z1encountered non-dictionary entry while resolving z - )
startswithrL   splitr>   )r   r7   r   rY   r!   valuer   r   r   rK      s   

rK   objTypeGuard[dict[str, object]]c                 C  
   t | tS N)r   dictrb   r   r   r   r>      s   
r>   TypeGuard[list[object]]c                 C  rd   re   )r   rA   rg   r   r   r   rC      s   
rC   nintboolc                 C  s,   d}|   D ]}|d7 }||kr dS qdS )Nr   r0   TF)rB   )rb   ri   r*   _r   r   r   rJ      s   rJ   N)r	   r
   r   r   )r   r   r   r   r   r   r   r   )r   r   r7   r(   r   r   )rb   r   r   rc   )rb   r   r   rh   )rb   r   ri   rj   r   rk   )
__future__r   typingr   r   r   pydanticr   r   r   r   r   rK   r>   rC   rJ   r   r   r   r   <module>   s    

 


