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)   Ztoolr.    r2   n/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_tools'   s    r4   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 r2   r2   .0tr2   r2   r3   
<listcomp>A       z)parse_chat_completion.<locals>.<listcomp>length)
completionZcontent_filterr,   Zparsed_arguments)r6   r,   )valuetype_messager5   rA   )parsed
tool_calls)r@   r?   choices)r   rE   Zfinish_reasonr    r!   rA   rD   r+   to_dictappendr   r   r   parse_function_tool_argumentsr,   r   r   r	   r   solve_response_format_tmaybe_parse_contentr   r%   )	r5   r6   r7   rE   choicerA   rD   Z	tool_callZtool_call_dictr2   r2   r3   parse_chat_completion:   s~    




	
rL   zlist[ChatCompletionToolParam]strzChatCompletionToolParam | None)r6   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   r8   r/   r2   r3   	<genexpr>   r<   z)get_input_tool_by_name.<locals>.<genexpr>)nextr6   r/   r2   rN   r3   get_input_tool_by_name   s    rR   zFunction | ParsedFunctionobject)r6   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 )NrQ   r,   r.   )rR   r/   r   rS   r1   
isinstancer   r   model	argumentsr"   jsonloads)r6   r,   
input_toolinput_fnr2   r2   r3   rH      s    


rH   z6type[ResponseFormatT] | ResponseFormatParam | NotGivenz;ChatCompletionMessage | ParsedChatCompletionMessage[object]zResponseFormatT | None)r5   rA   r*   c                 C  s$   t | r |jr |js t| |jS d S N)has_rich_response_formatcontentZrefusal_parse_contentrB   r2   r2   r3   rJ      s    rJ   type[ResponseFormatT])r5   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`.
    r_   )r\   r   r(   r5   r2   r2   r3   rI      s    rI   )r6   z%type | ResponseFormatParam | NotGivenbool)r5   r6   r*   c                 C  s,   t | rdS |pg D ]}t|r dS qdS )NTF)r\   is_parseable_tool)r5   r6   rY   r2   r2   r3   has_parseable_input   s    rc   z TypeGuard[type[ResponseFormatT]]c                 C  s   t | sdS t| rdS dS )NFT)r   is_response_format_paramr`   r2   r2   r3   r\      s
    r\   zTypeGuard[ResponseFormatParam]c                 C  s   t | S r[   )r   r`   r2   r2   r3   rd      s    rd   r   )rY   r*   c                 C  s2   t t| d}t|trdS t t|dp0dS )Nr,   Tr.   F)r   rS   r1   rT   r   r"   )rY   rZ   r2   r2   r3   rb      s    
rb   )r5   r]   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TypeAdapterZvalidate_json)r5   r]   r2   r2   r3   r^      s    r^   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)Zschemar/   r.   )r+   rh   )r   r   rd   r   r+   r   __name__r   rf   rg   re   r   )r5   Zjson_schema_typer/   r2   r2   r3   type_to_response_format_param   s&    
rj   )A
__future__r   rW   typingr   r   r   r   Ztyping_extensionsr   r   r	   rf   Z_toolsr   _typesr   r   _utilsr   r   Z_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__r4   rL   rR   rH   rJ   rI   rc   r\   rd   rb   r^   rj   r2   r2   r2   r3   <module>   sD   ,J