
    gM(                       d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dl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mZmZ dd	lmZmZ dd
l m!Z! ddl"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z( e
 G d dee&e#f                Z) G d de*      Z+e
 G d dee#                Z,dZ- e
d       G d dee#                Z.ddZ/d dZ0d!dZ1d"dZ2ejf                  dk  rd#dZ4yd#dZ4y)$    )annotationsN)	AwaitableIterable)	dataclassfield)AnyCallableGenericLiteralUnioncastget_args
get_origin)TypeAdapterValidationError)SelfTypeAliasType	TypedDict   )_utilsmessages)
ModelRetry)
ResultDataResultValidatorFunc)	AgentDeps
RunContextToolDefinitionc                  n    e Zd ZU ded<    ed      Zded<    ed      Zded<   d Z	 	 	 	 	 	 	 	 dd	Zy
)ResultValidatorz*ResultValidatorFunc[AgentDeps, ResultData]functionFinitbool
_takes_ctx	_is_asyncc                    t        t        j                  | j                        j                        dkD  | _        t        j                  | j                        | _        y )Nr   )leninspect	signaturer    
parametersr$   iscoroutinefunctionr%   selfs    H/var/www/openai/venv/lib/python3.12/site-packages/pydantic_ai/_result.py__post_init__zResultValidator.__post_init__   s>    g//>IIJQN 44T]]C    c                d  K   | j                   r%|j                  |r|j                  nd      }||f}n|f}	 | j                  r>t	        t
        t        gt        t           f   | j                        } ||  d{   }|S t	        t
        t        gt        f   | j                        }t        j                  |g|  d{   }	 |S 7 O7 	# t        $ rU}t        j                  |j                        }	|"|j                  |	_        |j                   |	_        t#        |	      |d}~ww xY ww)a  Validate a result but calling the function.

        Args:
            result: The result data after Pydantic validation the message content.
            tool_call: The original tool call message, `None` if there was no tool call.
            run_context: The current run context.

        Returns:
            Result of either the validated result data (ok) or a retry message (Err).
        N)	tool_name)content)r$   replace_withr2   r%   r   r	   r   r   r   r    r   run_in_executorr   	_messagesRetryPromptPartmessagetool_call_idToolRetryError)
r-   result	tool_callrun_contextctxargsr    result_datarms
             r.   validatezResultValidator.validate   s      ??**IY5H5H[_*`C;D9D	~~#	*0E)E FV$,dO3   #
): ;T]]K$*$:$:8$Kd$KK  4 L 	+))!))<A$'11!*!7!7 #*	+s[   5D0AC ;C<C  D0AC CC 	D0C C 	D-AD((D--D0N)r;   r   r<   z_messages.ToolCallPart | Noner=   zRunContext[AgentDeps]returnr   )	__name__
__module____qualname____annotations__r   r$   r%   r/   rC    r0   r.   r   r      sW    88%(J('It'D$$ 1$ +	$
 
$r0   r   c                  $     e Zd ZdZd fdZ xZS )r:   zVInternal exception used to signal a `ToolRetry` message should be returned to the LLM.c                0    || _         t        | 	          y N)
tool_retrysuper__init__)r-   rM   	__class__s     r.   rO   zToolRetryError.__init__G   s    $r0   )rM   z_messages.RetryPromptPart)rE   rF   rG   __doc__rO   __classcell__)rP   s   @r.   r:   r:   D   s    ` r0   r:   c                  l    e Zd ZU dZded<   ded<   edd       Z	 	 	 	 	 	 ddZ	 	 	 	 ddZdd	Z	dd
Z
y)ResultSchemazuModel the final response from an agent run.

    Similar to `Tool` but for the final result of running an agent.
    z!dict[str, ResultTool[ResultData]]toolsr#   allow_text_resultc                (   |t         u ryt        |      x}r|j                  }d}nd}d	fd}i }t        |      x}r?t	        |d      D ].  \  }	}
t        ||
      }||v r| d|	 }||v r ||
|d      ||<   0 n |||d      ||<    | ||      S )
z4Build a ResultSchema dataclass from a response type.NTFc           	     J    t        t        t           t        | ||            S rL   )r   
ResultToolr   )a
tool_name_multipledescriptions      r.   _build_toolz'ResultSchema.build.<locals>._build_toolb   s!    
:.
1j+W_0`aar0   r   )start_)rU   rV   )rZ   r   r[   strr\   r#   rD   zResultTool[ResultData])ra   extract_str_from_unionvalueget_union_args	enumerateunion_tool_name)clsresponse_typenamer]   response_type_optionrV   r^   rU   r?   iargr2   s      `        r.   buildzResultSchema.buildV   s     C#9-#HHH066M $ %	b 46!-0040#D23+D#6	5(#,+Qqc 2I  5(#.sIt#Di 	 3 &mT5AE$K2CDDr0   c                    |D ]?  }t        |t        j                        s|j                  |k(  s.|| j                  |   fc S  y)z@Find a tool that matches one of the calls, with a specific name.N)
isinstancer6   ToolCallPartr2   rU   )r-   partsr2   parts       r.   find_named_toolzResultSchema.find_named_toolq   s>     D$	 6 67>>Y.I!666 r0   c                    |D ]J  }t        |t        j                        s| j                  j	                  |j
                        x}sF||fc S  y)z*Find a tool that matches one of the calls.N)ro   r6   rp   rU   getr2   )r-   rq   rr   r;   s       r.   	find_toolzResultSchema.find_toolz   sD    
 D$	 6 67!ZZ^^DNN;;6;<' r0   c                H    t        | j                  j                               S )zReturn the names of the tools.)listrU   keysr,   s    r.   
tool_nameszResultSchema.tool_names   s    DJJOO%&&r0   c                p    | j                   j                         D cg c]  }|j                   c}S c c}w )z0Get tool definitions to register with the model.)rU   valuestool_def)r-   ts     r.   	tool_defszResultSchema.tool_defs   s-    $(JJ$5$5$78$7q

$7888s   3N)rh   type[ResultData]ri   ra   r]   
str | NonerD   zSelf | None)rq   %Iterable[_messages.ModelResponsePart]r2   ra   rD   <tuple[_messages.ToolCallPart, ResultTool[ResultData]] | None)rq   r   rD   r   )rD   z	list[str])rD   zlist[ToolDefinition])rE   rF   rG   rQ   rH   classmethodrm   rs   rv   rz   r   rI   r0   r.   rT   rT   L   sh    
 -,E E47:7GJ7	E7(4( 
F('9r0   rT   z/The final response which ends this conversationFr!   c                  D    e Zd ZU ded<   ded<   ddZ	 d		 	 	 	 	 	 	 d
dZy)rY   r   r}   zTypeAdapter[Any]type_adapterc                *   |t         usJ d       t        j                  |      r@t        |      | _        d}t        j
                  | j                  j                               }n^t        dd|i      }t        |      | _        d}t        j
                  | j                  j                               }|j                  d       |j                  dd      x}r||}	n$| d| }	n|xs t        }	|rt        |       d|	 }	t        ||	||	      | _        y)
z2Build a ResultTool dataclass from a response type.z2ResultTool does not support str as a response typeNresponse_data_typed_dictresponsetitler]   z. z: )ri   r]   parameters_json_schemaouter_typed_dict_key)ra   r   is_model_liker   r   check_object_json_schemajson_schemar   popDEFAULT_DESCRIPTIONunion_arg_namer   r}   )
r-   rh   ri   r]   r\   r   r   r   json_schema_descriptiontool_descriptions
             r.   rO   zResultTool.__init__   s&   C'])]]'. +M :D/3 %+%D%DTEVEVEbEbEd%e"'01KjZgMh'i$ +,D ED#- %+%D%DTEVEVEbEbEd%e""&&w/&<&@&@PT&UU"U"#: &1]"5L4M#N *A.A&4]&C%DBGWFX#Y &(#9!5	
r0   c                   	 |rdnd}t        |j                  t        j                        r6| j                  j                  |j                  j                  xs d|      }n1| j                  j                  |j                  j                  |      }| j                  j                  x}r||   }|S # t        $ rP}|rHt        j                  |j                  |j                  d      |j                        }t!        |      | d}~ww xY w)	am  Validate a result message.

        Args:
            tool_call: The tool call from the LLM to validate.
            allow_partial: If true, allow partial validation.
            wrap_validation_errors: If true, wrap the validation errors in a retry message.

        Returns:
            Either the validated result data (left) or a retry message (right).
        ztrailing-stringsoff )experimental_allow_partialF)include_url)r2   r3   r9   N)ro   r?   r6   ArgsJsonr   validate_json	args_jsonvalidate_python	args_dictr}   r   r   r7   r2   errorsr9   r:   )	r-   r<   allow_partialwrap_validation_errorspyd_allow_partialr;   kerB   s	            r.   rC   zResultTool.validate   s    	ZgDVmr)..)*<*<=**88NN,,2O` 9  **::NN,,IZ ;  MM666q6M  		%--'11HHH7!*!7!7
 %Q'Q.		s   BB2 2	D;ADDN)rh   r   ri   ra   r]   r   r\   r#   )FT)r<   z_messages.ToolCallPartr   r#   r   r#   rD   r   )rE   rF   rG   rH   rO   rC   rI   r0   r.   rY   rY      s@    ""!
H nr$/$@D$fj$	$r0   rY   c                "    |  dt        |       S )Nr`   )r   )	base_name	union_args     r.   rf   rf      s    [.3455r0   c                    | j                   S rL   )rE   )r   s    r.   r   r      s    r0   c                (   t        |       }t        d |D              rug }d}|D ]  }|t        u rd}|j                  |         |rKt	        |      dk(  rt        j                  |d         S t        j                  t        t        |               S yy)zSExtract the string type from a Union, return the remaining union or remaining type.c              3  ,   K   | ]  }|t         u   y wrL   )ra   ).0r~   s     r.   	<genexpr>z)extract_str_from_union.<locals>.<genexpr>   s     
(Z18Zs   FTr   r   N)	rd   anyra   appendr'   r   Somer   tuple)rh   
union_argsremain_argsincludes_strrl   s        r.   rb   rb      s    .J

(Z
((!#Ccz#""3'	 
 ;1${{;q>22{{5{);#<==	  )r0   c                ~    t        | t              r| j                  } t        |       }t	        |      rt        |       S y)zeExtract the arguments of a Union type if `response_type` is a union, otherwise return an empty union.rI   )ro   r   	__value__r   origin_is_unionr   )tporigins     r.   rd   rd      s3    "m$\\^Fv|r0   )   
   c                    | t         u S rL   )r   r   s    r.   r   r     s    U{r0   c                :    | t         u xs | t        j                  u S rL   )r   types	UnionTyper   s    r.   r   r     s    U{3bEOO33r0   )r   ra   r   r   rD   ra   )r   r   rD   ra   )rh   r   rD   z_utils.Option[Any])r   r   rD   ztuple[Any, ...])r   ztype[Any] | NonerD   r#   )5
__future__r   _annotationsr(   sysr   collections.abcr   r   dataclassesr   r   typingr   r	   r
   r   r   r   r   r   pydanticr   r   typing_extensionsr   r   r   r   r   r   r6   
exceptionsr   r;   r   r   rU   r   r   r   r   	Exceptionr:   rT   r   rY   rf   r   rb   rd   version_infor   rI   r0   r.   <module>r      s    2  
  / ( U U U 1 < < + " 3 8 8 -gi34 - -`Y  =97:& =9 =9@ H  K$ K K\6>$	 g
4r0   