o
    ùT·j‹  ã                   @  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*d3dd„Z+d4d d!„Z,d5d'd(„Z-d6d,d-„Z.d7d1d2„Z/dS )8é    )Ú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$   Újson_schemaÚschemaTÚname)r$   Ústrictr(   r'   )r   r   r   r    )r#   Úresponse_format_dict© r+   úa/home/dinkstrade/pdmp-scanner/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  s6  g }|j pg D �]}|jdkrTg }|jpg D ](}|jdkr#| |¡ q| ttdtƒi | ¡ ¥dt|j	| |j
d�i¥d�¡ q| ttdtƒi | ¡ ¥d|i¥d�¡ q|jd	kro| 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sö|jd$ksö|jd%ksö|jd&krü| |¡ qt�rt|ƒ q| |¡ qttd'tƒi | ¡ ¥d(|i¥d�S ))NÚmessageÚoutput_textz+type[ParsedResponseOutputText[TextFormatT]]Úparsed)r.   Úphase)r#   Úvaluez.type[ParsedResponseOutputMessage[TextFormatT]]ÚcontentÚfunction_callÚparsed_arguments)r0   r;   Úcomputer_callÚfile_search_callÚweb_search_callÚtool_search_callÚtool_search_outputÚadditional_toolsÚ	reasoningÚprogramÚprogram_outputÚ
compactionÚmcp_callÚmcp_approval_requestÚmcp_approval_responseÚimage_generation_callÚcode_interpreter_callÚlocal_shell_callÚlocal_shell_call_outputÚ
shell_callÚshell_call_outputÚapply_patch_callÚapply_patch_call_outputÚmcp_list_toolsÚexecÚcustom_tool_callÚfunction_call_outputÚcomputer_call_outputÚcustom_tool_call_outputz!type[ParsedResponse[TextFormatT]]Úoutput)rX   r$   r:   Úappendr   r   r   Úto_dictÚ
parse_textÚtextr8   r   r   Úparse_function_tool_argumentsr   r   r   )r.   r0   r2   Úoutput_listrX   Úcontent_listÚitemr+   r+   r,   Úparse_response5   s    


ÿþþÿ
ÿþþÿ
	ÿÿþþÿ



























ÿþþra   r\   Ústrr8   ú
str | NoneúTextFormatT | Nonec                C  sp   |dur
|dkr
dS t |ƒsdS t|ƒrttt|| ƒƒS t|ƒr1tr)td|› �ƒ‚t 	|¡ 
| ¡S td|› �ƒ‚)a=  Parse final-answer text, retaining legacy behavior for messages without a phase.

    Explicit phases other than `final_answer` are not structured results. Leave
    their text unparsed, including phases introduced by future API versions.
    Both completed responses and streamed text-done events use this rule.
    NÚfinal_answerz:Non BaseModel types are only supported with Pydantic v2 - z3Unable to automatically parse response format type )r   r   r   r!   r   r   r   Ú	TypeErrorÚpydanticÚTypeAdapterÚvalidate_json)r\   r.   r8   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)r0   r(   Útoolr+   r+   r,   Úget_input_tool_by_name«   s
   €ro   r;   ú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)r0   r(   r)   )r   ro   r(   r   rq   Ú
isinstancer
   r   ÚmodelÚ	argumentsrm   ÚjsonÚloads)r0   r;   Ú
input_toolrn   r+   r+   r,   r]   ³   s   


r]   )r#   r$   r%   r   )r.   r/   r0   r1   r2   r3   r%   r4   )r\   rb   r.   r/   r8   rc   r%   rd   )r0   rj   r(   rb   r%   rk   )r0   r1   r;   rp   r%   rq   )0Ú
__future__r   ru   Útypingr   r   r   r   Útyping_extensionsr   r   rg   Ú_toolsr
   Ú_typesr   Ú_utilsr   Ú_compatr   r   Ú_modelsr   Ú	_pydanticr   r   Ú_completionsr   Útypes.responsesr   r   r   r   r   r   r   r   r   r   r   Ú#types.chat.completion_create_paramsr    r!   r-   ra   r[   ro   r]   r+   r+   r+   r,   Ú<module>   s.    4ý


]
