o
    i                     @  s"  d dl mZ d dlZd dl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 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*d1ddZ+d2d d!Z,d3d%d&Z-d4d*d+Z.d5d/d0Z/dS )6    )annotationsN)TYPE_CHECKINGListIterablecast)TypeVarassert_never   )ResponsesPydanticFunctionTool   )Omit)is_given)PYDANTIC_V1model_parse_json)construct_type_unchecked)is_basemodel_typeis_dataclass_like_type   )type_to_response_format_param)Response	ToolParamParsedContentParsedResponseFunctionToolParamParsedResponseOutputItemParsedResponseOutputTextResponseFunctionToolCallParsedResponseOutputMessageResponseFormatTextConfigParamParsedResponseFunctionToolCall)ResponseFormatTextFormatT)defaulttype_typereturnr   c                 C  s\   t | }t|s
J tt|}|d dksJ d|d v sJ dd|d d |d d dS )Nr$   Zjson_schemaschemaTname)r$   strictr'   r&   )r   r   r   r    )r#   Zresponse_format_dict r)   X/home/kim/smarthome/.venv/lib/python3.10/site-packages/openai/lib/_parsing/_responses.pytype_to_text_format_param&   s   


r+   text_formattype[TextFormatT] | Omitinput_tools!Iterable[ToolParam] | Omit | Noneresponse!Response | ParsedResponse[object]ParsedResponse[TextFormatT]c                 C  s  g }|j D ]}|jdkrKg }|jD ]%}|jdkr|| q|ttt i | dt|j	| did q|tt
t i | d|id q|jdkrf|tti | dt||d	id q|jd
ks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jdks|jd ks|jd!kr|| qtrt| q|| qttt i | d"|idS )#NmessageZoutput_textparsed)r,   )r#   valuecontentfunction_callZparsed_arguments)r.   r7   Zcomputer_callZfile_search_callZweb_search_callZtool_search_callZtool_search_outputZ	reasoningZ
compactionZmcp_callZmcp_approval_requestZmcp_approval_responseZimage_generation_callZcode_interpreter_callZlocal_shell_callZlocal_shell_call_outputZ
shell_callZshell_call_outputZapply_patch_callZapply_patch_call_outputZmcp_list_toolsexecZcustom_tool_callZfunction_call_outputZcomputer_call_outputZcustom_tool_call_outputoutput)r9   r$   r6   appendr   r   r!   to_dict
parse_texttextr   r   parse_function_tool_argumentsr   r   r   )r,   r.   r0   Zoutput_listr9   Zcontent_listitemr)   r)   r*   parse_response5   s   






	
























r@   r=   strTextFormatT | Nonec                 C  s\   t |sd S t|rttt|| S t|r'trtd| t	|
| S td| )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<   Iterable[ToolParam]r'   FunctionToolParam | Nonec                 C  s0   | D ]}|d dkr| d|kr|  S qd S )Nr$   functionr'   )get)r.   r'   toolr)   r)   r*   get_input_tool_by_name   s
   rJ   r7   9ParsedResponseFunctionToolCall | ResponseFunctionToolCallobjectc                 C  sf   | d u st | s
d S t| |jd}|sd S tt|}t|tr&t|j|j	S |
ds-d S t|j	S )N)r.   r'   r(   )r   rJ   r'   r   rL   
isinstancer
   r   model	argumentsrH   jsonloads)r.   r7   Z
input_toolrI   r)   r)   r*   r>      s   


r>   )r#   r$   r%   r   )r,   r-   r.   r/   r0   r1   r%   r2   )r=   rA   r,   r-   r%   rB   )r.   rE   r'   rA   r%   rF   )r.   r/   r7   rK   r%   rL   )0
__future__r   rP   typingr   r   r   r   Ztyping_extensionsr   r   rD   Z_toolsr
   _typesr   Z_utilsr   Z_compatr   r   Z_modelsr   Z	_pydanticr   r   Z_completionsr   Ztypes.responsesr   r   r   r   r   r   r   r   r   r   r   Z#types.chat.completion_create_paramsr    r!   r+   r@   r<   rJ   r>   r)   r)   r)   r*   <module>   s.    4


X
