
    љi33                         S SK r S SKJr  S SKrS SKJrJrJr  S SKJ	r	  SSK
JrJrJrJr  SSKJr  \" \5      r " S S	\5      rg)
    N)	getLogger)AsyncGeneratorDictList)acompletion   )
LLMServiceLLMResponseToolCallTool)ContextManagerc            #         ^  \ rS rSrSSSSSSSSSSSSSSSSSS.S	\S
\S\S\S\S\S\\   S\\   S\\   S\	S\S\S\S\
S\\   S\S\4"U 4S jjjrS\4U 4S jjr\S\4S j5       rS.S\S\S \S!\\\\4      S"\\\4   S\\   4S# jjrS\S\S$\\   S%\4S& jrS'\4S( jrS/S$\\   S)\\\4   S\\\\4      4S* jjrS.S\S\S$\\   S"\\\4   S+\\\\4      S\\S4   4S, jjrS-rU =r$ )0LiteLLMService   NFg      ?2   Tzaiavatar.db)api_keysystem_promptsystem_prompt_by_user_promptbase_urlmodeltemperatureinitial_messagessplit_charsoption_split_charsoption_split_thresholdsplit_on_control_tagsvoice_text_taguse_dynamic_toolscontext_managershared_context_idsdb_connection_strdebugr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   c                   > [         TU ]  UUUUUU	U
UUUUUUUS9  Xl        X@l        XPl        X0l        SSSSSSS.SS	S.S
.SS/S.S.S.U l        g )N)r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   functionexecute_external_toolz_Execute the most appropriate tool based on the user's intent: what they want to do and to what.objectstringzNWhat the user wants to interact with (e.g., long-term memory, weather, music).)typedescriptionzOThe type of operation to perform on the target (e.g., retrieve, look up, play).)targetactionr*   r+   )r(   
propertiesrequired)namer)   
parameters)r(   r$   )super__init__r   r   r   r   dynamic_tool_spec)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   	__class__s                     R/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/sts/llm/litellm.pyr1   LiteLLMService.__init__   s    * 	'#-#1#9"7)/+1/ 	 	
   
,H) /  A$ %-+{#
 %-+|#	# "*8 4"
    returnc                 `   > [         TU ]  5       nU R                  US'   U R                  US'   U$ )Nr   r   )r0   
get_configr   r   )r3   configr4   s     r5   r:   LiteLLMService.get_configM   s4    #%!]]z151R1R-.r7   c                 &    U R                   S   S   $ )Nr$   r.   )r2   )r3   s    r5   dynamic_tool_name LiteLLMService.dynamic_tool_nameS   s    %%j1&99r7   
context_iduser_idtextfilessystem_prompt_paramsc                   #    / nU R                   (       a~  U R                  (       aA  UR                  SU R                  XU5      I S h  vN S.5        UR                  SSS.5        O,UR                  SU R                  XU5      I S h  vN S.5        U R                  (       a  UR                  U R                  5        U R                  R                  U R                  (       a  U/U R                  -   OUS9I S h  vN nU(       a2  US   S   S:w  a&  UR                  S5        U(       a  US   S   S:w  a  M&  UR                  U5        U(       aW  / nU H3  n	U	R                  S	5      =n
(       d  M  UR                  S
S	U
0S.5        M5     U(       a  UR                  SUS.5        OUnUR                  SUS.5        U$  GNz GN< N7f)Nuserrolecontent	assistantoksystem)r@   r   rH   url	image_url)r(   rN   rB   r(   rB   )r   r   append_get_system_promptr   extendr   get_historiesr    popget)r3   r@   rA   rB   rC   rD   messages	historiesrI   frM   s              r5   compose_messagesLiteLLMService.compose_messagesW   s    00$BYBYZd  pD  CE  =E  !F  G FGDD[D[\f  rF  EG  ?G  !H  I   OOD112 ..<<AEAXAX
|d&=&==^h = 
 
	 IaL0F:MM! IaL0F:	"G%%,&3&NNKucl#ST  =>GG<=9 =E ?G
sE   AG
G
	A G
	G

A3G
=G>;G
;5G
4AG
G
G
rV   response_textc                   #    U R                   (       a  [        US   S   [        5      (       a9  SUS   S   S   ;   a)  U R                  US   S   S   S   5      US   S   S   S'   O8[        US   S   [        5      (       a  U R                  US   S   5      US   S'   UR	                  SUS.5        U R
                  R                  XS5      I S h  vN   g  N7f)Nr   rI   rB   rJ   rG   chatgpt)_update_context_filter
isinstanceliststrrP   r   add_histories)r3   r@   rA   rV   r[   s        r5   update_contextLiteLLMService.update_contexty   s     &&(1+i0$77Xa[3B779=9T9TU]^_U`ajUklnUopvUw9xHQK	*2.v6HQK	2C88)-)D)DXa[QZE[)\I&GH""00yQQQs   CCCCspecc                    ^ ^ U U4S jnU$ )Nc                 F   > TS   S   n[        UTU S9TR                  U'   g )Nr$   r.   )r.   rf   func)r   tools)ri   	tool_namer3   rf   s     r5   	decorator&LiteLLMService.tool.<locals>.decorator   s.    Z(0I$(%DJJy!r7    )r3   rf   rl   s   `` r5   toolLiteLLMService.tool   s    	 r7   metadatac           	        #    U R                   nU R                  R                  5        H+  u  pEUSUR                   SUR                  S   S    S3-  nM-     US-  nUS   S   n[        U[        5      (       aj  / nS	nU HD  n	U	S
   n
U
S:X  a%  U(       d  UR                  SU	S   U-   S.5        SnM3  UR                  U	5        MF     U(       d  UR                  SUS.5        O[        U[        5      (       a  Xc-   n[        U R                  U R                  U R                  US S SWS./-   S/ S9I S h  vN n[        R                  " SUR                  S   R                   R"                  5      =n(       a  UR%                  S5      nOSn/ nUR'                  S5       HP  nU R                  R)                  UR+                  5       5      =n(       d  M5  UR                  UR                  5        MR     U$  N7f)Nz- z: r$   r)   
z6- NOT_FOUND: Use this if no suitable tools are found.
r]   rI   Fr(   rB   rO   TrF   rG   g        )r   r   r   rV   r   rj   z\[tools:(.*?)\]r   r   	NOT_FOUND,)"additional_prompt_for_tool_listingrj   itemsr.   rf   r`   ra   rP   rb   r   r   r   r   researchchoicesmessagerI   groupsplitrU   strip)r3   rV   rq   tool_listing_prompt_tuser_contentuser_content_for_tooltext_updatedccontent_typetool_choice_respmatch
tool_namesrj   ro   s                   r5   get_dynamic_tools_default(LiteLLMService.get_dynamic_tools_default   s    "EEJJ$$&DARxr!&&2D]2S1TTV#WW 'XX  |I.lD))$&! L! y6),)00&!F)ViJi1jk#'L *003 "  %,,fFY-Z[c**$0$F! "-LL]]**cr]vBW&X%YY"
 
 II02B2J2J12M2U2U2]2]^^5^QJ$J!!#&Azz~~aggi00t0TYY' ' )
s   D4G96G77BG9"G9rj   c           
     4  #    SnU(       aG  UnU H>  nU R                   R                  US   S   5      R                  =n	(       d  M7  Xi S3-  nM@     OU R                  (       a1  U R                  /nU R
                  R                  U R                  S9nOUU R                   R                  5        V
Vs/ s H$  u  pUR                  (       a  M  UR                  PM&     snn
=(       d    S nU(       a]  US   S   S:X  a  SUS   S	   U-   S
.nOGUS   S   S:X  a5  [        U5      S:  a&  US   S   S:X  a  US   S	   S:X  a  SUS   S	   U-   S
.nOUS   n[        U R                  U R                  U R                  W/USS  -   U R                   USS9I S h  vN n/ nSnSnU  S h  vN nUR"                  (       d  M  UR"                  S   R$                  R&                  (       Ga*  UR"                  S   R$                  R&                  S   nUR(                  (       a  UR+                  [-        UR(                  UR.                  R0                  S5      5        UR.                  R0                  U R                  :X  aH  [2        R5                  S5        U R7                  U5      I S h  vN n[2        R5                  SU 35        SnUR.                  R8                  (       a/  US   =R8                  UR.                  R8                  -  sl        GMl  GMo  UR"                  S   R$                  R:                  =n(       d  GM  U(       a  GM  UU-  n[=        UUS97v   GM  s  snn
f  GN GN N
 U(       Ga$  U R?                  U5      I S h  vN    [        U5      nU GH  nU R@                  (       a"  [2        R5                  SUR0                   35        [=        UUS97v   S nUR0                  U R                  :X  a  U(       d  SS0nOU RC                  UR0                  [D        RF                  " UR8                  5      SU05        S h  vN  nUUl$        URJ                  (       a  [=        UURJ                  S97v   M;  [=        UUS97v   URL                  (       d  M[  URN                  n  O
 U R@                  (       a  [2        R5                  SU 35        U(       d  GMF  UR+                  SUR(                  SUR0                  UR8                  S.S./U(       a  UOS S.5        UR+                  S[D        RP                  " U5      UR(                  S .5        GM     [        U5      U:  d  U(       a$  U RS                  XX4US!9  S h  vN  nU7v   M  
 g g g 7f)"N r$   r.   z

)r>   r   rH   rL   rI   rG   rF   r   rJ   rK   T)r   r   r   rV   r   rj   streamFzGet dynamic toolzDynamic tools: r]   )r@   rB   z
ToolCall: )r@   	tool_callr{   zNo tools foundrA   zToolCall result: )r.   	arguments)idr(   r$   )rH   
tool_callsrI   ro   )rH   rI   tool_call_id)rD   rj   )*rj   rU   instructionr   r2   dynamic_tool_instructionformatr>   rw   
is_dynamicrf   lenr   r   r   r   r   rz   deltar   r   rP   r   r$   r.   loggerinfo_get_dynamic_toolsr   rI   r
   _on_before_tool_callsr"   execute_tooljsonloadsresultrB   is_finaldatadumpsget_llm_stream_response)r3   r@   rA   rV   rD   rj   tool_instructionfiltered_toolsr   tir   system_message_for_toolstream_respr   try_dynamic_toolsr[   chunkrI   messages_lengthtctool_resulttrllm_responses                          r5   r   &LiteLLMService.get_llm_stream_response   s    "N#*f(=>JJJ2J$$d3$ $ ##"445N#<<CC"&"8"8  D   261A1A1CX1C1<<faff1CX`\`N {6"h.3;QRT]H^aqHq*r'!V$.x=1$!V)<)KPXYZP[\ePfjnPn7=(ST+V_J`csJs.t+&.qk#'LL]]**-.!"=(( 
 
 &(
!& 	K%==}}Q%%000MM!$**55a844%%hqttQZZ__b&IJzz$*@*@@$67/3/F/Fx/P)Pon5E$FG,0)::''rN,,

0D0DD,, ( "MM!,22:::::((!W,M%'JJY Y
	K *Q '* ,,Z888 "(mO ::KK*RWWI 67!Z2FF"77d444)'02B&C$($5$5bggtzz",,?WZcelYm$n & &b$&	77"-"''"RR"-r"RR!{{{.0gg % %o ::KK"3K= AB;OO +"$%%$.(*-/\\)( ' 5B=t%  OO &#'::k#:(*% K !V 8}.2C*.*F*Fdr +G + ' ', '&+ 3Dc s   AVA+V2MMB7VM"V!M*%M%&M*)C;V$M(%BV=VV%M*(V*VN
B;VR,Q
R,AV=V B#VVV
VV)r   r   r2   r   r   )NN)N)__name__
__module____qualname____firstlineno__rb   boolfloatr   dictintr   r1   r:   propertyr>   r   anyrY   rd   ro   r   r   r
   r   __static_attributes____classcell__)r4   s   @r5   r   r      s    !-2 '+!%(,&(&*""'*.(,!.'>
 >
 	>

 '+>
 >
 >
 >
 t*>
 #Y>
 !I>
 !$>
  $>
 >
  >
  (!>
" !I#>
$ %>
& '>
 >
@D  :3 : :   s  #  VZ[_`ceh`h[iVj    JN  OR  TW  OW  JX    dh  im  dn  DRs RS RDQUJ Rgj R 0T
 0dSVX[S[n 0hlmqruwzrzm{h| 0dr' r'c r'UYZ^U_ r'w{|  BE  }E  xF r'  VZ  [_  `c  eh  `h  [i  Vj r'  vD  EP  RV  EV  vW r' r'r7   r   )r   loggingr   rx   typingr   r   r   litellmr   r   r	   r
   r   r   r   r   r   r   r   rn   r7   r5   <module>r      s8      	 - -  5 5 +	8	e'Z e'r7   