o
    ͩZh#                     @  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dMddZ5dNd!d"Z6dOd'd(Z7dPd,d-Z8dQd2d3Z9dRd5d6Z:ed7dSd:d;Z;dTd=d>Z<dUd@dAZ=dVdDdEZ>dWdGdHZ?dXdKdLZ@dS )Y    )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_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)   Ztoolr/    r3   W/var/www/html/lang_env/lib/python3.10/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_tools'   s   r5   response_formatJtype[ResponseFormatT] | completion_create_params.ResponseFormat | NotGiveninput_toolschat_completion-ChatCompletion | ParsedChatCompletion[object]%ParsedChatCompletion[ResponseFormatT]c           	      C  s\  t |rdd |D }ng }g }|jD ]}|jdkrt|d|jdkr't |j}g }|jrj|jD ]7}|jdkr]| }|	t
i |di tt|d dt||jdiitd	 q2trdt| q2|	| q2|	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   s    z)parse_chat_completion.<locals>.<listcomp>length)
completionZcontent_filterr-   Zparsed_arguments)r8   r-   )valuetype_messager6   rD   )parsed
tool_calls)rC   rB   choices)r   rH   Z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   r8   r9   rH   choicerD   rG   Z	tool_callZtool_call_dictr3   r3   r4   parse_chat_completion:   s~   





	

rO   list[ChatCompletionToolParam]r0   strChatCompletionToolParam | Nonec                   s   t  fdd| D d S )Nc                 3  s*    | ]}| d i  d kr|V  qdS )r-   r0   N)r2   r<   r0   r3   r4   	<genexpr>   s   ( z)get_input_tool_by_name.<locals>.<genexpr>)nextr8   r0   r3   rS   r4   get_input_tool_by_name   s   rW   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 )NrV   r-   r/   )rW   r0   r   rY   r2   
isinstancer   r   model	argumentsr"   jsonloads)r8   r-   
input_toolinput_fnr3   r3   r4   rK      s   


rK   6type[ResponseFormatT] | ResponseFormatParam | NotGivenrD   ;ChatCompletionMessage | ParsedChatCompletionMessage[object]ResponseFormatT | Nonec                 C  s$   t | r|jr|jst| |jS d S N)has_rich_response_formatcontentZrefusal_parse_contentrE   r3   r3   r4   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`.
    rh   )re   r   r(   r6   r3   r3   r4   rL      s   
rL   )r8   %type | ResponseFormatParam | NotGivenboolc                 C  s,   t | rdS |p	g D ]	}t|r dS q
dS )NTF)re   is_parseable_tool)r6   r8   r_   r3   r3   r4   has_parseable_input   s   rm    TypeGuard[type[ResponseFormatT]]c                 C  s   t | sdS t| rdS dS )NFT)r   is_response_format_paramri   r3   r3   r4   re      s
   re   TypeGuard[ResponseFormatParam]c                 C  s   t | S rd   )r   ri   r3   r3   r4   ro      s   ro   r_   r   c                 C  s2   t t| d}t|trdS t t|dpdS )Nr-   Tr/   F)r   rY   r2   rZ   r   r"   )r_   r`   r3   r3   r4   rl      s   
rl   rf   c                 C  sP   t | rttt| |S t| r!ts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   	TypeErrorpydanticTypeAdapterZvalidate_json)r6   rf   r3   r3   r4   rg      s   rg   9type | completion_create_params.ResponseFormat | NotGivenResponseFormatParam | NotGivenc                 C  sx   t | stS t| r| S tt| } d }t| r| j}| }nt| r*| j}t	| }nt
d|  dt||dddS )Nz#Unsupported response_format type - json_schemaT)Zschemar0   r/   )r,   rv   )r   r   ro   r   r,   r   __name__r   rr   rs   rq   r   )r6   Zjson_schema_typer0   r3   r3   r4   type_to_response_format_param   s&   
rx   )r)   r*   r+   r'   )r6   r7   r8   r*   r9   r:   r+   r;   )r8   rP   r0   rQ   r+   rR   )r8   rP   r-   rX   r+   rY   )r6   ra   rD   rb   r+   rc   )r6   ra   r+   rh   )r6   rj   r8   r*   r+   rk   )r6   ra   r+   rn   )r6   rY   r+   rp   )r_   r   r+   rk   )r6   rh   rf   rQ   r+   r%   )r6   rt   r+   ru   )A
__future__r   r]   typingr   r   r   r   Ztyping_extensionsr   r   r	   rr   Z_toolsr   _typesr   r   _utilsr   r   _compatr   r   Z_modelsr   Z	_pydanticr   r   r   Z
types.chatr   r   r   r   r   r   r   r   r   _exceptionsr    r!   Ztypes.shared_paramsr"   Z#types.chat.completion_create_paramsr#   ZResponseFormatParamZ,types.chat.chat_completion_message_tool_callr$   r%   r(   __annotations__r5   rO   rW   rK   rM   rL   rm   re   ro   rl   rg   rx   r3   r3   r3   r4   <module>   sF    ,

J






