
    
@g#                       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          Z2dZ3de4d<   efdAdZ5dBd Z6dCd%Z7dDd)Z8dEd.Z9dFd0Z:ed1dGd4Z;dHd6Z<dId8Z=dJd;Z>dKd=Z?dLd@Z@dS )M    )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                    t          |           sd S | D ]e}|d         dk    rt          d|d          d          |d                             d          }|durt          d|d         d          d          fd 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*   toolr1   s      T/var/www/piapp/venv/lib/python3.11/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_toolsr7   '   s     E??  
 
<:%%gX\]cXdggg   j!%%h//nD$V,nnn   
 
    response_formatJtype[ResponseFormatT] | completion_create_params.ResponseFormat | NotGiveninput_toolschat_completion-ChatCompletion | ParsedChatCompletion[object]%ParsedChatCompletion[ResponseFormatT]c                T   t          |          rd |D             }ng }g }|j        D ]}|j        dk    rt          |          |j        dk    rt	                      |j        }g }|j        r|j        D ]}|j        dk    rw|                                }|	                    t          i |di t          t          |d                   dt          ||j                  iit                               t           rt#          |           |	                    |           |	                    t          t          t          t$                    t'          |                    i |                                d	i |                                t)          | |
          |di                     t          t*          t,                   t          t          t          t*                    t'          |                    i |                                d|i                    S )Nc                    g | ]}|S  rA   ).0ts     r6   
<listcomp>z)parse_chat_completion.<locals>.<listcomp>A   s    ...Qq...r8   length)
completioncontent_filterr/   parsed_arguments)r;   r/   )valuetype_messager9   rK   )parsed
tool_calls)rJ   rI   choices)r   rO   finish_reasonr!   r"   rK   rN   r.   to_dictappendr   r   r   parse_function_tool_argumentsr/   r   r   r
   r   solve_response_format_tmaybe_parse_contentr   r&   )	r9   r;   r<   rO   choicerK   rN   	tool_calltool_call_dicts	            r6   parse_chat_completionrY   :   s     ..+...35G!) 0
 0
8++)_EEEE#3330222.35
 	1$/ 1 1	>Z//%.%6%6%8%8N%%0#"0# * -"&*3z0J&K&K-"$68U4?)J\9& 9& 9&-" -"# # #9      # 1 ++++%%i0000$3--.Eo.V.VW
nn&&
  !//++ "5,;$+# # # '1     
 
  	
 	
 	
 	
" _- s0112I/2Z2Z[!))++7 	
 	
 	
	 	 	r8   list[ChatCompletionToolParam]r2   strChatCompletionToolParam | Nonec                <    t          fd| D             d           S )Nc              3  v   K   | ]3}|                     d i                                d          k    /|V  4dS )r/   r2   N)r4   )rB   rC   r2   s     r6   	<genexpr>z)get_input_tool_by_name.<locals>.<genexpr>   sJ      UUq155R+@+@+D+DV+L+LPT+T+T+T+T+T+TUUr8   )nextr;   r2   s    `r6   get_input_tool_by_namerb      s)    UUUUKUUUW[\\\r8   r/   Function | ParsedFunctionobjectc                n   t          | |j                  }|sd S t          t          |                    d                    }t          |t                    rt          |j        |j	                  S t          t          |          }|                    d          sd S t          j        |j	                  S )Nra   r/   r1   )rb   r2   r   rd   r4   
isinstancer   r   model	argumentsr#   jsonloads)r;   r/   
input_toolinput_fns       r6   rS   rS      s     (KhmTTTJ tFJNN:6677H(011 D0BCCC&11H<<!! t:h()))r8   6type[ResponseFormatT] | ResponseFormatParam | NotGivenrK   ;ChatCompletionMessage | ParsedChatCompletionMessage[object]ResponseFormatT | Nonec                j    t          |           r#|j        |j        st          | |j                  S d S N)has_rich_response_formatcontentrefusal_parse_contentrL   s     r6   rU   rU      s<    
  00 @W_5PY`Yh5Pow???4r8   type[ResponseFormatT]c                N    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`.
    rv   )rr   r   r)   r9   s    r6   rT   rT      s,      00 ')ABBBr8   )r;   %type | ResponseFormatParam | NotGivenboolc                Z    t          |           rdS |pg D ]}t          |          r dS dS )NTF)rr   is_parseable_tool)r9   r;   rk   s      r6   has_parseable_inputr}      sP    
  00 t!'R  
Z(( 	44	 5r8    TypeGuard[type[ResponseFormatT]]c                J    t          |           sdS t          |           rdS dS )NFT)r   is_response_format_paramrx   s    r6   rr   rr      s3     O$$ u00 u4r8   TypeGuard[ResponseFormatParam]c                     t          |           S rq   )r   rx   s    r6   r   r      s    ?###r8   rk   r   c                    t          t          |                     d                    }t          |t                    rdS t          t
          |                              d          pdS )Nr/   Tr1   F)r   rd   r4   rf   r   r#   )rk   rl   s     r6   r|   r|      sY    FJNN:6677H(011 t"H--11(;;DuDr8   rs   c                (   t          |           r#t          t          t          | |                    S t	          |           r@t
          st          d|            t          j        |           	                    |          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)r9   rs   s     r6   ru   ru      s    )) QO%5ow%O%OPPPo.. L 	ljYhjjkkk#O44BB7KKK
[/[[
\
\\r8   9type | completion_create_params.ResponseFormat | NotGivenResponseFormatParam | NotGivenc                V   t          |           st          S t          |           r| S t          t          |           } d }t          |           r
| j        }| }n=t          |           r| j        }t          j	        |           }nt          d|            dt          |          |dddS )Nz#Unsupported response_format type - json_schemaT)schemar2   r1   )r.   r   )r   r   r   r   r.   r   __name__r   r   r   r   r   )r9   json_schema_typer2   s      r6   type_to_response_format_paramr      s     O$$ 00 
 411OTX)) Q'*		0	0 Q'#/@@OoOOPPP +,<==
 
  r8   )r*   r+   r,   r(   )r9   r:   r;   r+   r<   r=   r,   r>   )r;   rZ   r2   r[   r,   r\   )r;   rZ   r/   rc   r,   rd   )r9   rm   rK   rn   r,   ro   )r9   rm   r,   rv   )r9   ry   r;   r+   r,   rz   )r9   rm   r,   r~   )r9   rd   r,   r   )rk   r   r,   rz   )r9   rv   rs   r[   r,   r&   )r9   r   r,   r   )A
__future__r   ri   typingr   r   r   r   typing_extensionsr   r	   r
   r   _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__r7   rY   rb   rS   rU   rT   r}   rr   r   r|   ru   r   rA   r8   r6   <module>r      s   " " " " " " "  5 5 5 5 5 5 5 5 5 5 5 5 > > > > > > > > > >  ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' ' 4 4 4 4 4 4 4 4 / / / / / / X X X X X X X X X X
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 S R R R R R R R 5 5 5 5 5 5 X X X X X X D D D D D D'  
 "&  % % % % ;D    &G G G GT] ] ] ]* * * *&   C C C C" AJ     	 	 	 	$ $ $ $E E E E
] 
] 
] 
]           r8   