o
    @Bi!                     @  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 ddl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$ ddl%m&Z&m'Z' ddl(m)Z) ddl*m+Z, ddl-m.Z. e	dddZ/dZ0de1d< efdRddZ2dSd!d"Z3dTd'd(Z4dUd,d-Z5dVd2d3Z6dWd5d6Z7ed7dXd:d;Z8dYd=d>Z9dZd@dAZ:d[dDdEZ;d\dIdJZ<d]dLdMZ=d^dPdQZ>dS )_    )annotationsN)TYPE_CHECKINGAnyIterablecast)TypeVar	TypeGuardassert_never   )PydanticFunctionTool   )	NOT_GIVENNotGiven)is_dictis_given)model_parse_json)construct_type_unchecked)to_strict_json_schema)	ParsedChoiceChatCompletionParsedFunctionParsedChatCompletionChatCompletionMessageParsedFunctionToolCallChatCompletionToolParamParsedChatCompletionMessagecompletion_create_params)LengthFinishReasonErrorContentFilterFinishReasonError)FunctionDefinition)ResponseFormat)FunctionResponseFormatT)defaultNone_default_response_formattools,Iterable[ChatCompletionToolParam] | NotGivenreturnc                 C  sh   t | sd S | D ])}|d dkrtd|d  d|d d}|dur1t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,    r1   `/var/www/html/Trade-python/venv/lib/python3.10/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_tools'   s   r3   response_formatJtype[ResponseFormatT] | completion_create_params.ResponseFormat | NotGiveninput_toolschat_completion-ChatCompletion | ParsedChatCompletion[object]%ParsedChatCompletion[ResponseFormatT]c           	      C  sP  t |rdd |D }ng }g }|jD ]z}|jdkrt |jdkr%t |j}g }|jrh|jD ]7}|jdkr[| }|	t
i |di tt|d dt||jdiitd q0trbt| q0|	| q0|	t
tttt|  i | d	i | t| |d
|did qttt t
tttt|  i | d|idS )Nc                 S  s   g | ]}|qS r1   r1   .0tr1   r1   r2   
<listcomp>A   s    z)parse_chat_completion.<locals>.<listcomp>lengthcontent_filterr*   parsed_arguments)r6   r*   )valuetype_messager4   rC   )parsed
tool_calls)rB   rA   choices)r   rG   finish_reasonr   r   rC   rF   r)   to_dictappendr   r   r   parse_function_tool_argumentsr*   r   r   r	   r   solve_response_format_tmaybe_parse_contentr   r"   )	r4   r6   r7   rG   choicerC   rF   	tool_calltool_call_dictr1   r1   r2   parse_chat_completion:   s~   




	
rQ   list[ChatCompletionToolParam]r-   strChatCompletionToolParam | Nonec                   s   t  fdd| D d S )Nc                 3  s*    | ]}| d i  d kr|V  qdS )r*   r-   N)r/   r:   r-   r1   r2   	<genexpr>   s   ( z)get_input_tool_by_name.<locals>.<genexpr>)nextr6   r-   r1   rU   r2   get_input_tool_by_name   s   rY   r*   Function | ParsedFunctionobjectc                 C  sb   t | |jd}|sd S tt|d}t|trt|j|j	S tt
|}|ds+d S t|j	S )NrX   r*   r,   )rY   r-   r   r[   r/   
isinstancer   r   model	argumentsr   jsonloads)r6   r*   
input_toolinput_fnr1   r1   r2   rK      s   


rK   6type[ResponseFormatT] | ResponseFormatParam | NotGivenrC   ;ChatCompletionMessage | ParsedChatCompletionMessage[object]ResponseFormatT | Nonec                 C  s(   t | r|jd ur|jst| |jS d S N)has_rich_response_formatcontentrefusal_parse_contentrD   r1   r1   r2   rM      s   rM   type[ResponseFormatT]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`.
    rk   )rg   r   r%   r4   r1   r1   r2   rL      s   
rL   )r6   %type | ResponseFormatParam | NotGivenboolc                 C  s,   t | rdS |p	g D ]	}t|r dS q
dS )NTF)rg   is_parseable_tool)r4   r6   ra   r1   r1   r2   has_parseable_input   s   rp    TypeGuard[type[ResponseFormatT]]c                 C  s   t | sdS t| rdS dS )NFT)r   is_response_format_paramrl   r1   r1   r2   rg      s
   rg   TypeGuard[ResponseFormatParam]c                 C  s   t | S rf   )r   rl   r1   r1   r2   rr      s   rr   ra   r   c                 C  s2   t t| d}t|trdS t t|dpdS )Nr*   Tr,   F)r   r[   r/   r\   r   r   )ra   rb   r1   r1   r2   ro      s   
ro   typr)   #TypeGuard[type[pydantic.BaseModel]]c                 C  s   t | tjS rf   )
issubclasspydantic	BaseModel)rt   r1   r1   r2   is_basemodel_type   s   ry   rh   c                 C  s&   t | rttt| |S td|  )Nz3Unable to automatically parse response format type )ry   r   r"   r   	TypeError)r4   rh   r1   r1   r2   rj      s   rj   9type | completion_create_params.ResponseFormat | NotGivenResponseFormatParam | NotGivenc                 C  sP   t | stS t| r| S tt| } t| std|  dt| | jdddS )Nz#Unsupported response_format type - json_schemaT)schemar-   r,   )r)   r}   )	r   r   rr   r   r)   ry   rz   r   __name__rl   r1   r1   r2   type_to_response_format_param   s   
r   )r&   r'   r(   r$   )r4   r5   r6   r'   r7   r8   r(   r9   )r6   rR   r-   rS   r(   rT   )r6   rR   r*   rZ   r(   r[   )r4   rc   rC   rd   r(   re   )r4   rc   r(   rk   )r4   rm   r6   r'   r(   rn   )r4   rc   r(   rq   )r4   r[   r(   rs   )ra   r   r(   rn   )rt   r)   r(   ru   )r4   rk   rh   rS   r(   r"   )r4   r{   r(   r|   )?
__future__r   r_   typingr   r   r   r   typing_extensionsr   r   r	   rw   _toolsr   _typesr   r   _utilsr   r   _compatr   _modelsr   	_pydanticr   
types.chatr   r   r   r   r   r   r   r   r   _exceptionsr   r   types.shared_paramsr   #types.chat.completion_create_paramsr    ResponseFormatParam,types.chat.chat_completion_message_tool_callr!   r"   r%   __annotations__r3   rQ   rY   rK   rM   rL   rp   rg   rr   ro   ry   rj   r   r1   r1   r1   r2   <module>   sH    ,

J







