o
    /wi#                     @  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)   toolr/    r4   ]/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_tools'   s   r6   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 r4   r4   .0tr4   r4   r5   
<listcomp>A   s    z)parse_chat_completion.<locals>.<listcomp>length)
completioncontent_filterr-   parsed_arguments)r9   r-   )valuetype_messager7   rG   )parsed
tool_calls)rF   rE   choices)r   rK   finish_reasonr    r!   rG   rJ   r,   to_dictappendr   r   r   parse_function_tool_argumentsr-   r   r   r	   r   solve_response_format_tmaybe_parse_contentr   r%   )	r7   r9   r:   rK   choicerG   rJ   	tool_calltool_call_dictr4   r4   r5   parse_chat_completion:   s~   





	

rU   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   r4   r5   	<genexpr>   s   ( z)get_input_tool_by_name.<locals>.<genexpr>)nextr9   r0   r4   rY   r5   get_input_tool_by_name   s   r]   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 )Nr\   r-   r/   )r]   r0   r   r_   r2   
isinstancer   r   model	argumentsr"   jsonloads)r9   r-   
input_toolinput_fnr4   r4   r5   rO      s   


rO   6type[ResponseFormatT] | ResponseFormatParam | NotGivenrG   ;ChatCompletionMessage | ParsedChatCompletionMessage[object]ResponseFormatT | Nonec                 C  s$   t | r|jr|jst| |jS d S N)has_rich_response_formatcontentrefusal_parse_contentrH   r4   r4   r5   rQ      s   rQ   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`.
    ro   )rk   r   r(   r7   r4   r4   r5   rP      s   
rP   )r9   %type | ResponseFormatParam | NotGivenboolc                 C  s,   t | rdS |p	g D ]	}t|r dS q
dS )NTF)rk   is_parseable_tool)r7   r9   re   r4   r4   r5   has_parseable_input   s   rt    TypeGuard[type[ResponseFormatT]]c                 C  s   t | sdS t| rdS dS )NFT)r   is_response_format_paramrp   r4   r4   r5   rk      s
   rk   TypeGuard[ResponseFormatParam]c                 C  s   t | S rj   )r   rp   r4   r4   r5   rv      s   rv   re   r   c                 C  s2   t t| d}t|trdS t t|dpdS )Nr-   Tr/   F)r   r_   r2   r`   r   r"   )re   rf   r4   r4   r5   rs      s   
rs   rl   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TypeAdaptervalidate_json)r7   rl   r4   r4   r5   rn      s   rn   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)schemar0   r/   )r,   r~   )r   r   rv   r   r,   r   __name__r   ry   rz   rx   r   )r7   json_schema_typer0   r4   r4   r5   type_to_response_format_param   s&   
r   )r)   r*   r+   r'   )r7   r8   r9   r*   r:   r;   r+   r<   )r9   rV   r0   rW   r+   rX   )r9   rV   r-   r^   r+   r_   )r7   rg   rG   rh   r+   ri   )r7   rg   r+   ro   )r7   rq   r9   r*   r+   rr   )r7   rg   r+   ru   )r7   r_   r+   rw   )re   r   r+   rr   )r7   ro   rl   rW   r+   r%   )r7   r|   r+   r}   )A
__future__r   rc   typingr   r   r   r   typing_extensionsr   r   r	   ry   _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"   #types.chat.completion_create_paramsr#   ResponseFormatParam,types.chat.chat_completion_message_tool_callr$   r%   r(   __annotations__r6   rU   r]   rO   rQ   rP   rt   rk   rv   rs   rn   r   r4   r4   r4   r5   <module>   sF    ,

J






