
    h)                    N   U d dl mZ d dl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(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z1 ddl2m3Z3  e
dd      Z4dZ5de6d<    ejn                  d      Z8de6d<   	 	 	 	 d(dZ9ef	 	 	 d)dZ:ef	 	 	 d)dZ;	 	 	 	 	 	 	 	 d*dZ<	 	 	 	 	 	 d+dZ=	 	 	 	 	 	 d,dZ>	 	 	 	 	 	 d-dZ?	 	 	 	 d.d Z@ed!	 	 	 	 	 d/d"ZA	 	 	 	 d0d#ZBd1d$ZCd2d%ZDd3d&ZE	 	 	 	 d4d'ZFy)5    )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ParsedChatCompletionMessageChatCompletionToolUnionParamChatCompletionFunctionToolParamcompletion_create_params)LengthFinishReasonErrorContentFilterFinishReasonError)FunctionDefinition)ResponseFormat)FunctionResponseFormatT)defaultNone_default_response_formatzopenai.lib.parsingzlogging.Loggerlogc                D    | d   dk(  sy| d   j                  d      duryy)zDCheck if the given tool is a strict ChatCompletionFunctionToolParam.typefunctionFstrictTget)tools    ^/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py$is_strict_chat_completion_tool_paramr4   +   s1     <:%JH%T1    c                f    t        |       st        S | D cg c]  }t        |      s| c}S c c}w )zMSelect only the strict ChatCompletionFunctionToolParams from the given tools.)r   r   r4   )toolsts     r3   #select_strict_chat_completion_toolsr9   7   s-     E?H! DQ GAHHHs   ..c                    t        |       st        S | D ]I  }|d   dk7  rt        d|d    d      |d   j                  d      }|dus6t        d|d   d    d       t	        t
        t           |       S )	Nr-   r.   zECurrently only `function` tool types support auto-parsing; Received ``r/   Tnamez@` is not strict. Only `strict` function tools can be auto-parsed)r   r   
ValueErrorr1   r   r   r    )r7   r2   r/   s      r3   validate_input_toolsr>   A   s     E? 
<:%WX\]cXdWeefg  j!%%h/D$V,--mn 
 895AAr5   c                r   t        |      r|D cg c]  }| }}ng }g }|j                  D ]  }|j                  dk(  rt        |      |j                  dk(  r
t	               |j
                  }g }|j                  r|j                  D ]  }|j                  dk(  rc|j                         }	|j                  t        i |	di t        t        |	d         dt        ||j                        iit                     u|j                  dk(  r8t         j#                  d	|j$                  |j&                  j(                  d
       t*        rt-        |       |j                  |        |j                  t        t        t        t.              t1        |          i |j                         di |j                         t3        | |      |r|nd di              t        t4        t6           t        t        t        t4              t1        |          i |j                         d|i            S c c}w )Nlength)
completioncontent_filterr.   parsed_arguments)input_toolsr.   )valuetype_customz?Custom tool calls are not callable. Ignoring tool call: %s - %sr   )
stacklevelmessageresponse_formatrI   )parsed
tool_calls)rF   rE   choices)r   rN   finish_reasonr"   r#   rI   rM   r-   to_dictappendr   r   r   parse_function_tool_argumentsr.   r   r+   warningidrG   r<   r   r
   r   solve_response_format_tmaybe_parse_contentr   r'   )
rK   rD   chat_completionr8   rN   choicerI   rM   	tool_calltool_call_dicts
             r3   parse_chat_completionr[   V   sC    "-.Qq..35G!)) 8
8+)_EE#33022..35
$// 1	>>Z/%.%6%6%8N%%0#"0# * -"&*3z0J&K-"$68U4?)J\J\9&-"# #9 ^^x/KKY!!((--#$	    # +%%i091< 	$3-.Eo.VW
nn&
  !//+ "5,;$+# 5?jD 
	
S8
t _- s012I/2Z[!))+7	
	 	 /s   	H4c                .    t        fd| D        d       S )Nc              3  ~   K   | ]4  }|d    dk(  s|j                  di       j                  d      k(  s1| 6 yw)r-   r.   r<   Nr0   ).0r8   r<   s     r3   	<genexpr>z)get_input_tool_by_name.<locals>.<genexpr>   s<     qq1V9
+BquuZY[G\G`G`agGhlpGpqs   =$==)nextrD   r<   s    `r3   get_input_tool_by_namerb      s     qKqswxxr5   c                V   t        | |j                        }|sy t        t        |j	                  d            }t        |t              r t        |j                  |j                        S t        t        |      }|j	                  d      sy t        j                  |j                        S )Nra   r.   r/   )rb   r<   r   objectr1   
isinstancer   r   model	argumentsr$   jsonloads)rD   r.   
input_toolinput_fns       r3   rR   rR      s     (KhmmTJFJNN:67H(010B0BCC&1H<<!::h(())r5   c                v    t        |       r.|j                  r"|j                  st        | |j                        S y N)has_rich_response_formatcontentrefusal_parse_contentrJ   s     r3   rV   rV      s,    
  0W__W__ow??r5   c                <    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`.
    type[ResponseFormatT])rn   r   r*   rK   s    r3   rU   rU      s!      0')ABBr5   )rD   c                L    t        |       ry|xs g D ]  }t        |      s y y)NTF)rn   is_parseable_tool)rK   rD   rj   s      r3   has_parseable_inputrw      s3    
  0!'R 
Z( r5   c                4    t        |       syt        |       ryy)NFT)r   is_response_format_paramrt   s    r3   rn   rn      s     O$0r5   c                    t        |       S rm   )r   rt   s    r3   ry   ry      s    ?##r5   c                    | d   dk7  ryt        t        | j                  d            }t        |t              ryt        t
        |      j                  d      xs dS )Nr-   r.   FTr/   )r   rd   r1   re   r   r$   )rj   rk   s     r3   rv   rv      sS    &Z'FJNN:67H(01"H-11(;DuDr5   c                    t        |       rt        t        t        | |            S t	        |       r8t
        st        d|        t        j                  |       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)rK   ro   s     r3   rq   rq     so    )O%5ow%OPPo.XYhXijkk##O4BB7KK
I/IZ[
\\r5   c                0   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)schemar<   r/   )r-   r   )r   r   ry   r   r-   r   __name__r   r~   r   r}   r   )rK   json_schema_typer<   s      r3   type_to_response_format_paramr     s     O$0
 41OTX)''*		0''#//@=o=NOPP +,<=
 r5   )r2   r   returnz*TypeGuard[ChatCompletionFunctionToolParam])r7   1Iterable[ChatCompletionToolUnionParam] | NotGivenr   z4Iterable[ChatCompletionFunctionToolParam] | NotGiven)rK   zJtype[ResponseFormatT] | completion_create_params.ResponseFormat | NotGivenrD   r   rW   z-ChatCompletion | ParsedChatCompletion[object]r   z%ParsedChatCompletion[ResponseFormatT])rD   "list[ChatCompletionToolUnionParam]r<   strr   z&ChatCompletionFunctionToolParam | None)rD   r   r.   zFunction | ParsedFunctionr   zobject | None)rK   6type[ResponseFormatT] | ResponseFormatParam | NotGivenrI   z;ChatCompletionMessage | ParsedChatCompletionMessage[object]r   zResponseFormatT | None)rK   r   r   rs   )rK   z%type | ResponseFormatParam | NotGivenrD   r   r   bool)rK   r   r   z TypeGuard[type[ResponseFormatT]])rK   rd   r   zTypeGuard[ResponseFormatParam])rj   r   r   r   )rK   rs   ro   r   r   r'   )rK   z9type | completion_create_params.ResponseFormat | NotGivenr   zResponseFormatParam | NotGiven)G
__future__r   rh   logging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    r!   _exceptionsr"   r#   types.shared_paramsr$   #types.chat.completion_create_paramsr%   ResponseFormatParam5types.chat.chat_completion_message_function_tool_callr&   r'   r*   __annotations__	getLoggerr+   r4   r9   r>   r[   rb   rR   rV   rU   rw   rn   ry   rv   rq   r    r5   r3   <module>r      s   "   5 5 > >  ) ) ' 4 / X X   S 5 X M
 "& $ %'g''(<=^ =	
&	/	 @II<I9I @IB<B9B*O_O CO C	O
 +Ody6y>Ay+y*6*B[**&K I 	CKCC" FO: C 
		K	%	$E
] N # r5   