a
    ~g#                     @  s  U 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
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 dd
lmZmZ ddlmZ ddlmZ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' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z/ ddl0m1Z1 e	dddZ2dZ3de4d< efdddddZ5dddddddZ6d d!d"d#d$d%Z7d d&d'd(d)d*Z8d+d,d-d.d/d0Z9d+d1d2d3d4Z:ed5d6dd7d8d9d:Z;d+d;d2d<d=Z<d'd>d2d?d@Z=dAd7dBdCdDZ>d1d!ddEdFdGZ?dHdId2dJdKZ@dS )L    )annotationsN)TYPE_CHECKINGAnyIterablecast)TypeVar	TypeGuardassert_never   )PydanticFunctionTool   )	NOT_GIVENNotGiven)is_dictis_given)PYDANTIC_V2model_parse_json)construct_type_unchecked)is_basemodel_typeto_strict_json_schemais_dataclass_like_type)	ParsedChoiceChatCompletionParsedFunctionParsedChatCompletionChatCompletionMessageParsedFunctionToolCallChatCompletionToolParamParsedChatCompletionMessagecompletion_create_params)LengthFinishReasonErrorContentFilterFinishReasonError)FunctionDefinition)ResponseFormat)FunctionResponseFormatT)defaultNone_default_response_formatz,Iterable[ChatCompletionToolParam] | NotGiven)toolsreturnc                 C  sh   t | sd S | D ]R}|d dkr4td|d  d|d d}|durtd|d d  dqd S )	NtypefunctionzECurrently only `function` tool types support auto-parsing; Received ``strictTnamez@` is not strict. Only `strict` function tools can be auto-parsed)r   
ValueErrorget)r)   toolr.    r3   e/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_tools'   s    r5   zJtype[ResponseFormatT] | completion_create_params.ResponseFormat | NotGivenz-ChatCompletion | ParsedChatCompletion[object]z%ParsedChatCompletion[ResponseFormatT])response_formatinput_toolschat_completionr*   c           	      C  s`  t |rdd |D }ng }g }|jD ]}|jdkr@t|d|jdkrPt |j}g }|jr|jD ]n}|jdkr| }|	t
i |di tt|d dt||jdiitd	 qftrt| qf|	| qf|	t
tttt|  i | d
i | t| |d|r|nd did q&ttt t
tttt|  i | d|idS )Nc                 S  s   g | ]}|qS r3   r3   .0tr3   r3   r4   
<listcomp>A       z)parse_chat_completion.<locals>.<listcomp>length)
completioncontent_filterr,   parsed_arguments)r7   r,   )valuetype_messager6   rD   )parsed
tool_calls)rC   rB   choices)r   rH   finish_reasonr    r!   rD   rG   r+   to_dictappendr   r   r   parse_function_tool_argumentsr,   r   r   r	   r   solve_response_format_tmaybe_parse_contentr   r%   )	r6   r7   r8   rH   choicerD   rG   Z	tool_callZtool_call_dictr3   r3   r4   parse_chat_completion:   s~    




	
rP   zlist[ChatCompletionToolParam]strzChatCompletionToolParam | None)r7   r/   r*   c                   s   t  fdd| D d S )Nc                 3  s(   | ] }| d i  d kr|V  qdS )r,   r/   N)r1   r9   r/   r3   r4   	<genexpr>   r=   z)get_input_tool_by_name.<locals>.<genexpr>)nextr7   r/   r3   rR   r4   get_input_tool_by_name   s    rV   zFunction | ParsedFunctionobject)r7   r,   r*   c                 C  sb   t | |jd}|sd S tt|d}t|tr>t|j|j	S tt
|}|dsVd S t|j	S )NrU   r,   r.   )rV   r/   r   rW   r1   
isinstancer   r   model	argumentsr"   jsonloads)r7   r,   
input_toolinput_fnr3   r3   r4   rL      s    


rL   z6type[ResponseFormatT] | ResponseFormatParam | NotGivenz;ChatCompletionMessage | ParsedChatCompletionMessage[object]zResponseFormatT | None)r6   rD   r*   c                 C  s$   t | r |jr |js t| |jS d S N)has_rich_response_formatcontentrefusal_parse_contentrE   r3   r3   r4   rN      s    rN   type[ResponseFormatT])r6   r*   c                 C  s   t | r| S tdtS )zReturn the runtime type for the given response format.

    If no response format is given, or if we won't auto-parse the response format
    then we default to `None`.
    rd   )r`   r   r(   r6   r3   r3   r4   rM      s    rM   )r7   z%type | ResponseFormatParam | NotGivenbool)r6   r7   r*   c                 C  s,   t | rdS |pg D ]}t|r dS qdS )NTF)r`   is_parseable_tool)r6   r7   r]   r3   r3   r4   has_parseable_input   s    rh   z TypeGuard[type[ResponseFormatT]]c                 C  s   t | sdS t| rdS dS )NFT)r   is_response_format_paramre   r3   r3   r4   r`      s
    r`   zTypeGuard[ResponseFormatParam]c                 C  s   t | S r_   )r   re   r3   r3   r4   ri      s    ri   r   )r]   r*   c                 C  s2   t t| d}t|trdS t t|dp0dS )Nr,   Tr.   F)r   rW   r1   rX   r   r"   )r]   r^   r3   r3   r4   rg      s    
rg   )r6   ra   r*   c                 C  sT   t | rttt| |S t| rBts2t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   	TypeErrorpydanticTypeAdaptervalidate_json)r6   ra   r3   r3   r4   rc      s    rc   z9type | completion_create_params.ResponseFormat | NotGivenzResponseFormatParam | NotGivenc                 C  sx   t | stS t| r| S tt| } d }t| r:| j}| }n(t| rT| j}t	| }nt
d|  dt||dddS )Nz#Unsupported response_format type - json_schemaT)schemar/   r.   )r+   rn   )r   r   ri   r   r+   r   __name__r   rk   rl   rj   r   )r6   Zjson_schema_typer/   r3   r3   r4   type_to_response_format_param   s&    
rq   )A
__future__r   r[   typingr   r   r   r   typing_extensionsr   r   r	   rk   _toolsr   _typesr   r   _utilsr   r   _compatr   r   _modelsr   	_pydanticr   r   r   
types.chatr   r   r   r   r   r   r   r   r   _exceptionsr    r!   types.shared_paramsr"   Z#types.chat.completion_create_paramsr#   ZResponseFormatParamZ,types.chat.chat_completion_message_tool_callr$   r%   r(   __annotations__r5   rP   rV   rL   rN   rM   rh   r`   ri   rg   rc   rq   r3   r3   r3   r4   <module>   sD   ,J