
    i              	          d dl Z d dlZd dlmZ d dlZd dlmZmZ d dlm	Z	 d dl
Z
d dlmZmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lm Z m!Z!m"Z"m#Z#  ejH                  e%      Z&e G d d             Z'e G d d             Z(e G d d             Z)ee'e(e)f   Z*de+e   de,fdZ-de+e   de+ej\                     de/e,ef   fdZ0dede!fdZ1	 dde#de*de2de fdZ3dee   de+e#   fdZ4y)     N)	dataclass)Fieldcreate_model)	FieldInfo)castCallableSequenceAny
ForwardRefget_type_hintsUnion)	DocstringDocstringSectionKindDocstringSectionTextDocstringParameterDocstringSection)RunException)MCPClientProtocol)RunOutputEntries)FunctionResultEntryFunctionToolFunctionFunctionCallEntryc                   ,    e Zd ZU eed<   eed<   eed<   y)RunFunctionnamecallabletoolN__name__
__module____qualname__str__annotations__r   r        W/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/mistralai/extra/run/tools.pyr   r   !   s    
I
r&   r   c                   ,    e Zd ZU eed<   eed<   eed<   y)RunCoroutiner   	awaitabler   Nr   r%   r&   r'   r)   r)   (   s    
I
r&   r)   c                   ,    e Zd ZU eed<   eed<   eed<   y)
RunMCPToolr   r   
mcp_clientN)r    r!   r"   r#   r$   r   r   r%   r&   r'   r,   r,   /   s    
I
!!r&   r,   docstring_sectionsreturnc                     g }| D ]?  }|j                   t        j                  k(  s!|j                  t	        t
        |             A dj                  d |D              S )zIGiven a list of docstring sections create a description for the function.
c              3   4   K   | ]  }|j                     y wN)value).0texts     r'   	<genexpr>z,_get_function_description.<locals>.<genexpr>?   s     :DTZZ:s   )kindr   r6   appendr   r   join)r.   text_sectionssections      r'   _get_function_descriptionr=   9   sX    02M% F<</444  &:G!DEF 99:M:::r&   params_from_sig
type_hintsc                    t        t        j                  j                  d | D                    }i }i }|D ]  }|j                  ||j
                  <    |D ]G  }|j
                  |vrd||j
                  <   |j                  |j
                        ||j
                  <   I i }|D ]^  }	|	j                  t        j                  j                  ur|	j                  nd}
|	j                  t        j                  j                  ur|	j                  nt        }t        |t              r||	j
                     }t        |
t              r|
}nmd}t!        |d      r_t!        |d      rS|j"                  D ]  }t        |t              s|} n |j$                  d   }t        |t&              r||	j
                     }||
du rt)               }nt)        |
      }||	j
                     |_        t+        t,        |      |f||	j
                  <   a t/        di |j1                         }|j3                  d	d       |j                  d
i       j5                         D ]  }|j3                  d	d        |S )z`Given a list of docstring sections and type annotations create the most accurate tool parametersc              3      K   | ]<  }|j                   t        j                  t        j                  fv r|j                   > y wr3   )r8   r   
parametersother_parametersr4   )r5   r<   s     r'   r7   z+_get_function_parameters.<locals>.<genexpr>I   s>      &
||$//1E1V1VWX MM&
s   AA .N__metadata____args__r   )defaulttitle
properties)_)list	itertoolschainfrom_iterabledescriptionr   getrG   inspect	Parameterempty
annotationr
   
isinstancer#   r   hasattrrE   rF   r   r   r   typer   model_json_schemapopvalues)r.   r>   r?   params_from_docstringsparam_descriptionsparam_annotations	param_docparamfieldsprG   rT   
field_infometaschemaprops                   r'   _get_function_parametersrf   B   sJ    8<%% &
-&
 	
8 + C	-6-B-B9>>*C ! C:://-/uzz*(2uzz(B%**%C 13F '> yy0A0A0G0GG!))SLL0A0A0G0GGALLS 	 j#&#AFF+Jgy) J Jz>2wz:7V '33 D!$	2%)

 (003
 j*5!2166!:J #~"W
"73
!3AFF!;
tZ0*=qvvO'>R ((::<F
JJw

<,335  $ Mr&   funcc                    | j                   }t        j                  |       }|st        j	                  d| d       g }nFt        |d      }|j                  d      }t        |      dk(  rt        j	                  d| d       t        j                  |       }t        |j                  j                               }t        | d	d
d
      }t        dt        |t        |      t!        |||      d	            S )zGParse a function docstring / type annotations to create a FunctionTool.z
Function 'zN' without a docstring is being parsed, add docstring for more accurate result.google)parserF)warningsr   zM' has no relevant docstring sections, add docstring for more accurate result.TN)include_extraslocalnsglobalnsfunction)r.   r>   r?   )r   rO   rB   strict)rW   ro   )r    rQ   getdocloggerwarningr   parselen	signaturerK   rB   rZ   r   r   r   r=   rf   )rg   r   docr.   	docstringsigr>   r?   s           r'   create_tool_callrz      s    ==D ..
Clm	
  c(3	&__e_<!"a'NNTF"op
 

D
!C3>>0023OT4RVWJ12DE/#5 /%
 	
 r&   function_callrun_toolcontinue_on_fn_errorc           
        K   t        | j                  t              rt        j                  | j                        n| j                  }	 t        |t
              r |j                  d	i |}nit        |t              r |j                  d	i | d{   }n>t        |t              r.|j                  j                  | j                  |       d{   }t        | j                  t        t              r|      S t        j"                  |            S 7 7 G# t        $ re}|du r5t        | j                  d| j                   dt        |             cY d}~S t!        d| j                   d| j                   d      |d}~ww xY ww)
z7Run the function with arguments of a FunctionCallEntry.NTzError while executing z: )tool_call_idresultzFailed to execute tool z with arguments ''r%   )rU   	argumentsr#   jsonloadsr   r   r)   r*   r,   r-   execute_toolr   	Exceptionr   r   r   dumps)r{   r|   r}   r   reses         r'   create_function_resultr      si     m--s3 	

=**+$$ 
h,#(##0i0C,/***7Y77C*- ++889K9KYWWC "// c*s 04

3  8W 4'&*77/0B0B/C2c!fXN  %m&8&8%99J=KbKbJccde
	sb   AF	AD D>D DD AFD D 	F#3FFF'FFFoutput_entriesc                 \    g }| D ]$  }t        |t              s|j                  |       & |S )z:Extract all FunctionCallEntry from a conversation response)rU   r   r9   )r   function_callsentrys      r'   get_function_callsr      s9     N )e./!!%() r&   )F)5rL   loggingdataclassesr   rQ   pydanticr   r   pydantic.fieldsr   r   typingr   r   r	   r
   r   r   r   griffer   r   r   r   r   mistralai.extra.exceptionsr   mistralai.extra.mcp.baser   mistralai.extra.run.resultr   mistralai.modelsr   r   r   r   	getLoggerr    rr   r   r)   r,   RunToolrK   r#   r=   rR   dictrf   rz   boolr   r   r%   r&   r'   <module>r      sn     !  ( %  S S S  4 6 7  
		8	$       " " " \:5
6;$7G2H ;S ;J-.J'++,J S#XJZ%8 % %V "'$  	D-.	
r&   