
    Oj=(                    P   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;ef	 	 	 d+dZ<	 	 	 	 	 	 	 	 d,dZ=	 	 	 	 	 	 d-dZ>	 	 	 	 	 	 d.dZ?	 	 	 	 	 	 d/d Z@ed!	 	 	 	 	 d0d"ZA	 	 	 	 d1d#ZBd2d$ZCd3d%ZDd4d&ZE	 	 	 	 d5d'ZFy)6    )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    w/var/www/origus_pro_usr/data/www/origus.pro/core/.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 t        |       S N)r   r   list)r7   s    r3   materialize_input_toolsr=   A   s     E?;r5   c                   t        |       }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   r   
ValueErrorr1   r   r<   r    )r7   input_toolsr2   r/   s       r3   validate_input_toolsrC   J   s     *%0KK  
<:%WX\]cXdWeefg  j!%%h/D$V,--mn 
 45{CCr5   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)rB   r.   )valuetype_customz?Custom tool calls are not callable. Ignoring tool call: %s - %sr   )
stacklevelmessageresponse_formatrM   )parsed
tool_calls)rJ   rI   choices)r   rR   finish_reasonr"   r#   rM   rQ   r-   to_dictappendr   r   r   parse_function_tool_argumentsr.   r   r+   warningidrK   r@   r   r
   r   r'   maybe_parse_contentr   )
rO   rB   chat_completionr8   rR   choicerM   rQ   	tool_calltool_call_dicts
             r3   parse_chat_completionr^   `   s    "-.Qq..35G!)) 8
8+)_EE#330OLL..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   	G;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rB   r@   s    `r3   get_input_tool_by_namere      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 )Nrd   r.   r/   )re   r@   r   objectr1   
isinstancer   r   model	argumentsr$   jsonloads)rB   r.   
input_toolinput_fns       r3   rV   rV      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 r;   )has_rich_response_formatcontentrefusal_parse_contentrN   s     r3   rY   rY      s,    
  0W__W__ow??r5   )rB   c                L    t        |       ry|xs g D ]  }t        |      s y y)NTF)rp   is_parseable_tool)rO   rB   rm   s      r3   has_parseable_inputrv      s3    
  0!'R 
Z( r5   c                4    t        |       syt        |       ryy)NFT)r   is_response_format_paramrO   s    r3   rp   rp      s     O$0r5   c                    t        |       S r;   )r   ry   s    r3   rx   rx      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   rg   r1   rh   r   r$   )rm   rn   s     r3   ru   ru      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)rO   rq   s     r3   rs   rs      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   rx   r   r-   r   __name__r   r~   r   r}   r   )rO   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)r7   r   r   z)list[ChatCompletionToolUnionParam] | Omit)r7   r   r   z,list[ChatCompletionFunctionToolParam] | Omit)rO   zFtype[ResponseFormatT] | completion_create_params.ResponseFormat | OmitrB   r   rZ   z-ChatCompletion | ParsedChatCompletion[object]r   z%ParsedChatCompletion[ResponseFormatT])rB   "list[ChatCompletionToolUnionParam]r@   strr   z&ChatCompletionFunctionToolParam | None)rB   r   r.   zFunction | ParsedFunctionr   zobject | None)rO   2type[ResponseFormatT] | ResponseFormatParam | OmitrM   z;ChatCompletionMessage | ParsedChatCompletionMessage[object]r   zResponseFormatT | None)rO   z!type | ResponseFormatParam | OmitrB   r   r   bool)rO   r   r   z TypeGuard[type[ResponseFormatT]])rO   rg   r   zTypeGuard[ResponseFormatParam])rm   r   r   r   )rO   ztype[ResponseFormatT]rq   r   r   r'   )rO   z5type | completion_create_params.ResponseFormat | Omitr   zResponseFormatParam | Omit)G
__future__r   rk   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=   rC   r^   re   rV   rY   rv   rp   rx   ru   rs   r    r5   r3   <module>r      s   "   5 5 > >  )   ' 4 / X X   S 5 X M
 "& $ %'g''(<=^ =	
&	/	 <@I8I5I <@8. <@D8D1D,L[L ?L C	L
 +L^y6y>Ay+y*6*B[**&G I 	 BF6 ? 
		G	%	$E
] J  r5   