
    עi'                    >   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?ed 	 	 	 	 	 d-d!Z@	 	 	 	 d.d"ZAd/d#ZBd0d$ZCd1d%ZD	 	 	 	 d2d&ZEy)3    )annotationsN)TYPE_CHECKINGAnyIterablecast)TypeVar	TypeGuardassert_never   )PydanticFunctionTool   )Omitomit)is_dictis_given)PYDANTIC_V1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    a/sites/domain-asset-master/.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                   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.        t0           i |j                         di |j                         t3        | |      |r|nd di              t        t4        t0           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   r'   maybe_parse_contentr   )
rK   rD   chat_completionr8   rN   choicerI   rM   	tool_calltool_call_dicts
             r3   parse_chat_completionrZ   V   s    "-.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
nn&
  !//+ "5,;$+# 5?jD 
	
S8
t $"?3
%%'
w
  /s   	G9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_namera      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 )Nr`   r.   r/   )ra   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   rU   rU      s,    
  0W__W__ow??r5   )rD   c                L    t        |       ry|xs g D ]  }t        |      s y y)NTF)rm   is_parseable_tool)rK   rD   ri   s      r3   has_parseable_inputrs      s3    
  0!'R 
Z( r5   c                4    t        |       syt        |       ryy)NFT)r   is_response_format_paramrK   s    r3   rm   rm      s     O$0r5   c                    t        |       S rl   )r   rv   s    r3   ru   ru      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   rc   r1   rd   r   r$   )ri   rj   s     r3   rr   rr      sS    &Z'FJNN:67H(01"H-11(;DuDr5   c                    t        |       rt        t        t        | |            S t	        |       r8t
        r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   rn   s     r3   rp   rp      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   ru   r   r-   r   __name__r   r{   r|   rz   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   -Iterable[ChatCompletionToolUnionParam] | Omitr   z0Iterable[ChatCompletionFunctionToolParam] | Omit)rK   zFtype[ResponseFormatT] | completion_create_params.ResponseFormat | OmitrD   r   rV   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   2type[ResponseFormatT] | ResponseFormatParam | OmitrI   z;ChatCompletionMessage | ParsedChatCompletionMessage[object]r   zResponseFormatT | None)rK   z!type | ResponseFormatParam | OmitrD   r   r   bool)rK   r   r   z TypeGuard[type[ResponseFormatT]])rK   rc   r   zTypeGuard[ResponseFormatParam])ri   r   r   r   )rK   ztype[ResponseFormatT]rn   r   r   r'   )rK   z5type | completion_create_params.ResponseFormat | Omitr   zResponseFormatParam | Omit)F
__future__r   rg   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>   rZ   ra   rR   rU   rs   rm   ru   rr   rp   r    r5   r3   <module>r      s   "   5 5 > >  )   ' 4 / X X   S 5 X M
 "& $ %'g''(<=^ =	
&	/	 <@I8I5I <@B8B5B*L[L ?L C	L
 +L^y6y>Ay+y*6*B[**&G I 	 BF6 ? 
		G	%	$E
] J  r5   