U
    Zh\                     @  sR  d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlZddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ e
dd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'd(Z0dd)d*d+d,d-Z1dS ).    )annotationsN)TYPE_CHECKINGAnyListIterablecast)TypeVarassert_never   )ResponsesPydanticFunctionTool   )NotGiven)is_given)PYDANTIC_V2model_parse_json)construct_type_unchecked)is_basemodel_typeis_dataclass_like_type   )solve_response_format_ttype_to_response_format_param)Response	ToolParamParsedContentParsedResponseFunctionToolParamParsedResponseOutputItemParsedResponseOutputTextResponseFunctionToolCallParsedResponseOutputMessageResponseFormatTextConfigParamParsedResponseFunctionToolCall)ResponseFormatTextFormatT)defaulttyper    )type_returnc                 C  s\   t | }t|sttt|}|d dks.td|d ks>tdd|d d |d d dS )Nr%   Zjson_schemaschemaTname)r%   strictr)   r(   )r   r   AssertionErrorr   r"   )r&   Zresponse_format_dict r,   B/tmp/pip-unpacked-wheel-693nel7n/openai/lib/_parsing/_responses.pytype_to_text_format_param&   s    


r.   ztype[TextFormatT] | NotGivenz%Iterable[ToolParam] | NotGiven | Nonez!Response | ParsedResponse[object]zParsedResponse[TextFormatT])text_formatinput_toolsresponser'   c                 C  s  t | }g }|jD ]l}|jdkrg }|jD ]L}|jdkrF|| q,|tttt| |	 dt
|j| did q,|tttt| |	 d|id q|jdkr|tt|	 dt||d	id q|jd
ksZ|jdksZ|jdksZ|jdksZ|jdksZ|jdksZ|jdksZ|jdksZ|jdksZ|jdksZ|jdkrf|| qtrvt| q|| qttt tttt| |	 d|idS )NmessageZoutput_textparsed)r/   )r&   valuecontentfunction_callZparsed_arguments)r0   r6   Zcomputer_callZfile_search_callZweb_search_callZ	reasoningZmcp_callZmcp_approval_requestZimage_generation_callZcode_interpreter_callZlocal_shell_callZmcp_list_toolsexecoutput)r   r8   r%   r5   appendr   r   r   r   Zto_dict
parse_texttextr   r!   parse_function_tool_argumentsr   r	   r   r#   )r/   r0   r1   Zsolved_tZoutput_listr8   Zcontent_listitemr,   r,   r-   parse_response5   s    



 
 	
  	

 r>   strzTextFormatT | None)r;   r/   r'   c                 C  s`   t |sd S t|r$ttt|| S t|rNts>td| t	|
| S td| d S )Nz:Non BaseModel types are only supported with Pydantic v2 - z3Unable to automatically parse response format type )r   r   r   r#   r   r   r   	TypeErrorpydanticZTypeAdapterZvalidate_json)r;   r/   r,   r,   r-   r:      s    r:   zIterable[ToolParam]zFunctionToolParam | None)r0   r)   r'   c                 C  s0   | D ]&}|d dkr| d|kr|  S qd S )Nr%   functionr)   )get)r0   r)   toolr,   r,   r-   get_input_tool_by_name   s    
rE   z9ParsedResponseFunctionToolCall | ResponseFunctionToolCallobject)r0   r6   r'   c                 C  sf   | d kst | sd S t| |jd}|s*d S tt|}t|trLt|j|j	S |
dsZd S t|j	S )N)r0   r)   r*   )r   rE   r)   r   rF   
isinstancer   r   model	argumentsrC   jsonloads)r0   r6   Z
input_toolrD   r,   r,   r-   r<      s    


r<   )2
__future__r   rJ   typingr   r   r   r   r   Ztyping_extensionsr   r	   rA   Z_toolsr   _typesr   _utilsr   _compatr   r   Z_modelsr   Z	_pydanticr   r   Z_completionsr   r   Ztypes.responsesr   r   r   r   r   r   r   r   r   r    r!   Z#types.chat.completion_create_paramsr"   r#   r.   r>   r:   rE   r<   r,   r,   r,   r-   <module>   s,   4O