
    @'h x                     L   d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZ ddl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 ddlmZ dd	lmZ dd
l m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddlm*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD  ej                  eF      ZGeGj                  ej                          e-eF      ZJdZK	 	 d$de:de	deeL   deMde;f
dZNdeDfd ZOdeDde	fd!ZP G d" d#e      ZQy)%zOpenAI agent worker.    N)partial)AnyDictListCallableOptionalUnioncastget_args)resolve_tool_choice)build_error_tool_outputbuild_missing_tool_messageget_function_by_name)BaseAgentWorkerTaskTaskStepTaskStepOutput)add_user_step_to_memory)MessageRole)CallbackManagerCBEventTypeEventPayloadtrace_method)AGENT_CHAT_RESPONSE_TYPEAgentChatResponseChatResponseModeStreamingAgentChatResponse)ChatMessageChatResponse)get_dispatcher)AgentToolCallEvent)LLM)
BaseMemoryChatMemoryBuffer)ObjectRetriever)Settings)BaseTool
ToolOutputadapt_to_async_tool)ToolMetadata)Thread)OpenAI)OpenAIToolCall   tool
input_dicterror_messageraise_errorreturnc                     	  | di |S # t         $ r;}|r |xs d|}t        || j                  j                  d|i|      cY d}~S d}~ww xY w)zY
    Call tool with error handling.

    Input is a dictionary with args and kwargs

    zError: kwargs)content	tool_name	raw_input
raw_outputN )	Exceptionr(   metadataname)r/   r0   r1   r2   es        d/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/llama_index/agent/openai/step.pycall_tool_with_error_handlingr@   9   sc    
!j!! 	
%871%!mm((,	
 	
		
s   
 	A0A	A	A	tool_callc                     	 t        j                  | j                  j                        S # t         j                  $ r?}t        d| j                  j                   d| j                  j                   d      d }~ww xY w)NError in calling tool -: The input json block is malformed:
```json

```)jsonloadsfunction	argumentsJSONDecodeError
ValueErrorr=   )rA   r>   s     r?   default_tool_call_parserrL   S   s    
zz),,6677 
$Y%7%7%<%<$==lmvmm  nJ  nJ  mK  KP  Q
 	

s   (+ A=:A88A=c                 b   | j                   j                  }t        |j                               dk(  ri S 	 t	        j
                  |      } t        | t              s:t        d| j                   j                   d| j                   j                   d      | S # t        j                  $ r}d}t        j                  ||      }|r+|j                  d      }|j                  d      }||icY d}~S t        d| j                   j                   d| j                   j                   d      d}~ww xY w)	z
    Parse tool calls that are not standard json.

    Also parses tool calls of the following forms:
    variable = \"\"\"Some long text\"\"\"
    variable = "Some long text"'
    variable = '''Some long text'''
    variable = 'Some long text'
    r   rC   rD   rE   z0([a-zA-Z_][a-zA-Z_0-9]*)\s*=\s*["\']+(.*?)["\']+      N)rH   rI   lenstriprF   rG   
isinstancedictrK   r=   rJ   researchgroup)rA   arguments_strr>   patternmatchvariable_namer6   s          r?   advanced_tool_call_parserr[   \   sN    &&00M
= !Q&	
JJ}-	)T*(););)@)@(AApqz  rD  rD  rN  rN  qO  OT  U   
E		'=1!KKNMkk!nG!7++$Y%7%7%<%<$==lmvmm  nJ  nJ  mK  KP  Q
 	

s$   A B D.*?D))D./:D))D.c                      e Zd ZdZdedddfdee   dedee   de	de
d	ee   d
eee      deeegef      fdZeddddeddddf	deee      d
eee      dee   de	de
d	ee   dee   deee      deeegef      dedd fd       Zdedee   fdZdedeee      fdZ	 d7dedee   deeef   deeef   fdZdededefdZdedede fdZ!dedede fdZ"dede#dede$fdZ%dede#dede$fdZ&dee   d ed!e'd"ee(   de	f
d#Z)dee   d ed!e'd"ee(   de	f
d$Z*dedede+fd%Z,d&eee      d'e
de	fd(Z-d)edee   fd*Z.e#j^                  dfd+e+dede#deeef   de0f
d,Z1e#j^                  dfd+e+dede#deeef   de0f
d-Z2 e3d.      d+e+dedede0fd/       Z4 e3d.      d+e+dedede0fd0       Z5 e3d.      d+e+dedede0fd1       Z6 e3d.      d+e+dedede0fd2       Z7dededdfd3Z8dededdfd4Z9dededee+   fd5Z:d	eddfd6Z;y)8OpenAIAgentWorkerzOpenAI Agent agent worker.FNtoolsllmprefix_messagesverbosemax_function_callscallback_managertool_retrievertool_call_parserc	                 \  	 || _         || _        || _        || _        |xs | j                   j                  | _        |xs t
        | _        t              dkD  r|t        d      t              dkD  rfd| _	        y |"t        t        t           |      		fd| _	        y d | _	        y )Nr   z,Cannot specify both tools and tool_retrieverc                     S Nr:   )_r^   s    r?   <lambda>z,OpenAIAgentWorker.__init__.<locals>.<lambda>   s         c                 &    j                  |       S rh   )retrieve)messagetool_retriever_cs    r?   rj   z,OpenAIAgentWorker.__init__.<locals>.<lambda>   s    .>.G.G.P rk   c                     g S rh   r:   )ri   s    r?   rj   z,OpenAIAgentWorker.__init__.<locals>.<lambda>   s     rk   )_llm_verbose_max_function_callsr`   rc   rL   re   rP   rK   
_get_toolsr
   r%   r'   )
selfr^   r_   r`   ra   rb   rc   rd   re   ro   s
    `       @r?   __init__zOpenAIAgentWorker.__init__   s     	#5 . 0 NDII4N4N 0 L4Lu:>n8KLLZ!^-DO'#OH$=~NPDO +DOrk   system_promptr5   r3   c
           
      B   |xs g }|xs t         j                  }t        |t              st	        d      |||_        |j                  j                  st	        d|j                   d      ||t	        d      t        |d      g}|xs g } | ||||||||	      S )z
        Create an OpenAIAgent from a list of tools.

        Similar to `from_defaults` in other classes, this method will
        infer defaults for a variety of parameters, including the LLM,
        if they are not specified.

        zllm must be a OpenAI instancezModel name z( does not support function calling API. z5Cannot specify both system_prompt and prefix_messagessystem)r6   role)r^   rd   r_   r`   ra   rb   rc   re   )
r&   r_   rR   r,   rK   rc   r<   is_function_calling_modelmodelr   )clsr^   rd   r_   ra   rb   rc   rw   r`   re   r5   s              r?   
from_toolszOpenAIAgentWorker.from_tools   s    , !X\\#v&<=='#3C ||55cii[(PQ  $* K   +=xPQO)/R)+1--	
 		
rk   taskc                     | j                   |j                  j                         z   |j                  d   j	                         z   S )N
new_memory)r`   memorygetextra_stateget_all)ru   r   s     r?   get_all_messagesz"OpenAIAgentWorker.get_all_messages   s?      kkoo |,4467	
rk   c                     |j                   d   j                         }|r|d   j                  j                  dd       S d S )Nr   
tool_calls)r   r   additional_kwargsr   )ru   r   chat_historys      r?   get_latest_tool_callsz'OpenAIAgentWorker.get_latest_tool_calls   sL    *.*:*:<*H*P*P*R  ..22<F	
 	
rk   autoopenai_toolstool_choicec                 h    d| j                  |      i}|r|j                  |t        |             |S )Nmessages)r^   r   )r   updater   )ru   r   r   r   llm_chat_kwargss        r?   _get_llm_chat_kwargsz&OpenAIAgentWorker._get_llm_chat_kwargs   sB     ",T-B-B4-H I"""0CK0P #  rk   chat_responsec                     |j                   }|j                  d   j                  |       t        t	        |j
                        |j                  d         S )Nr   sources)responser   )rn   r   putr   strr6   )ru   r   r   
ai_messages       r?   _process_messagez"OpenAIAgentWorker._process_message   sP     #**
&**:6 ++,d6F6Fy6Q
 	
rk   r   c           	      r   t         | j                  j                  di ||j                  d         }t	        |j
                  |j                  d   fdt        | j                  |      i      }|j                          |j                  j                          |j                  r|j                          |S )Nr   )chat_streamr   r   on_stream_end_fn)targetargsr5   r:   )r   rq   stream_chatr   r+   write_response_to_historyr   finalize_taskstart!is_function_not_none_thread_eventwaitis_functionjoin)ru   r   r   chat_stream_responsethreads        r?   _get_stream_ai_responsez)OpenAIAgentWorker._get_stream_ai_response   s      :-		--@@$$Y/ 

 'AA""<02&0B0BD(IJ

 	>>CCE++KKM $#rk   c           	        K   t         | j                  j                  di | d {   |j                  d         }t	        j
                  |j                  |j                  d   t        | j                  |                  |_	        |j                          |j                  j                          d {    |S 7 7 w)Nr   )achat_streamr   r   )r   r:   )r   rq   astream_chatr   asynciocreate_taskawrite_response_to_historyr   afinalize_taskawrite_response_to_history_task_ensure_async_setupis_function_false_eventr   )ru   r   r   r   s       r?   _get_async_stream_ai_responsez/OpenAIAgentWorker._get_async_stream_ai_response  s       :5tyy55HHH$$Y/ 

 @G?R?R ;;  .!()<)<d!C < @
< 	002 #::??AAA $#! I 	Bs"   %CB?BC8C9CCmodec                     |t         j                  k(  r. | j                  j                  di |}| j	                  ||      S |t         j
                  k(  r | j                  |fi |S t        Nr:   )r   WAITrq   chatr   STREAMr   NotImplementedErrorru   r   r   r   r   s        r?   _get_agent_responsez%OpenAIAgentWorker._get_agent_response)  sj     #(((*8$))..*K?*KM((}==%,,,/4//HHH%%rk   c                   K   |t         j                  k(  r6 | j                  j                  di | d {   }| j	                  ||      S |t         j
                  k(  r | j                  |fi | d {   S t        7 J7 wr   )r   r   rq   achatr   r   r   r   r   s        r?   _get_async_agent_responsez+OpenAIAgentWorker._get_async_agent_response4  s      #(((0?		0R/0R*RM((}==%,,,;;;DTOTTT%% +S Us!   3BB ?B5B6BBrA   r   r   c           
         |j                   J |j                  J |j                  j                  J |j                  j                  J |j                   }|j                  j                  }|j                  j                  }t	        ||      }t
        j                  t        ||r|j                  nt        d|                   | j                  j                  t        j                  t        j                  |t        j                  ||j                  nt        d|      i      5 }		 | j                  xs t         }
| j"                  rt%        d       t%        d| d|        d }	  |
|      }|t+        |      }|O| j"                  rt%        |       t%        d	       t-        |t.        j                  ||d
      }t1        |||      }n[t3        ||      }| j"                  rt%        d|       t%        d	       t-        t)        |      t.        j                  ||d
      }|	j5                  t        j6                  t)        |      i       d d d        |j9                         |j;                         |%|j                  j<                  xr |j>                   S dS # t&        $ r}t)        |      }Y d }~Qd }~ww xY w# 1 sw Y   vxY w)Nunknowndescriptionr=   rI   r/    payload=== Calling Function ===Calling function:  with args: ========================
r=   tool_call_idr6   rz   r   )r1   Got output: F) idrH   r=   rI   r   
dispatchereventr!   r<   r*   rc   r   FUNCTION_CALLr   TOOLre   rL   rr   printrK   r   r   r   r   r   r@   on_endFUNCTION_OUTPUTappendr   return_directis_error)ru   r^   rA   r   r   function_idfunction_namefunction_args_strr/   r   re   r1   argument_dictr>   function_messagetool_outputs                   r?   _call_functionz OpenAIAgentWorker._call_function?  s    ||'''!!---!!&&222!!++777ll!**//%..88#E=9+  MM%)-P		
 ""((%%**,=!!' MM%"=I ) 

 C	S D#44P8P}}01(|DUCVW ,0M' 0 ;
 | := I (==-(67#.)$)) -(3'$  6!#4m <-} ==L8967#.,$)) -(3'$  LL,">">K@P!QLRGC	SH 	{#

#$  MM''D0D0D,D	
 	
]  ' #A'3C	S C	Ss8   .A K/J.7C$K.	K7KKKKKc           
        K   |j                   J |j                  J |j                  j                  J |j                  j                  J |j                   }|j                  j                  }|j                  j                  }t	        ||      }t
        j                  t        ||r|j                  nt        d|                   | j                  j                  t        j                  t        j                  |t        j                  ||j                  nt        d|      i      5 }		 | j                  xs t         }
| j"                  rt%        d       t%        d| d|        d }	  |
|      }|t+        |      }|O| j"                  rt%        |       t%        d	       t-        |t.        j                  ||d
      }t1        |||      }nrt3        |      } |j4                  di  d {   }| j"                  rt%        d|       t%        d	       t-        t)        |      t.        j                  ||d
      }|	j7                  t        j8                  t)        |      i       d d d        |j;                         |j=                         |%|j                  j>                  xr |j@                   S dS # t&        $ r}t)        |      }Y d }~hd }~ww xY w7 # 1 sw Y   xxY ww)Nr   r   r   r   r   r   r   r   r   r   r   r   Fr:   )!r   rH   r=   rI   r   r   r   r!   r<   r*   rc   r   r   r   r   re   rL   rr   r   rK   r   r   r   r   r   r)   acallr   r   r   r   r   r   )ru   r^   rA   r   r   r   r   r   r/   r   re   r1   r   r>   r   r   
async_tools                    r?   _acall_functionz!OpenAIAgentWorker._acall_function  s     ||'''!!---!!&&222!!++777ll!**//%..88#E=9+  MM%)-P		
 ""((%%**,=!!' MM%"=I ) 

 B	S D#44P8P}}01(|DUCVW ,0M' 0 ;
 | := I (==-(67#.)$)) -(3'$  6!#4m 16
$4J$4$4$E}$EE==L8967#.,$)) -(3'$  LL,">">K@P!QLREB	SF 	{#

#$  MM''D0D0D,D	
 	
[  ' #A'4 FgB	S B	SsX   D.K70A K+1K9A>K+7K)8A<K+4AK7	K&K!K+!K&&K++K40K7c                     g }t        j                         }|d|d}|j                  j                  |       t	        |j
                  t        t        j                               |j                        S )zInitialize step from task.r   )r   n_function_callsr   )task_idstep_idinput)
r$   from_defaultsr   r   r   r   r   uuiduuid4r   )ru   r   r5   r   r   
task_states         r?   initialize_stepz!OpenAIAgentWorker.initialize_step  sf    $&%335
  !$


 	
+LL

%**
 	
rk   r   r   c                 J    || j                   kD  ry|d uxr t        |      dkD  S )NFr   )rs   rP   )ru   r   r   s      r?   _should_continuez"OpenAIAgentWorker._should_continue%  s.     d666%=#j/A*==rk   r   c                 $    | j                  |      S )z
Get tools.)rt   )ru   r   s     r?   	get_toolszOpenAIAgentWorker.get_tools.  s    u%%rk   stepc                    |j                   %t        ||j                  d   | j                         | j	                  |j                         }|D cg c]  }|j
                  j                          }}| j                  |||      } | j                  |fd|i|}	| j                  |      xs g }
g }| j                  |
|j                  d         sd}g }nMd}|
D ]  }t        |t        t                    st        d      |j                  d	k7  rt        d
      | j!                  |||j                  d   |      }|j                  d   j#                  |d          |dvrd}|j                  dxx   dz  cc<   |st%        |
      dk(  sd}|d   j&                  }t)        t+        t,        j.                  |            }| j1                  ||      }	|t2        j4                  k(  |	_         n |s/|j9                  t;        t=        j>                               d      gng }||	_         tC        |	|||      S c c}w )	Run step.Nr   ra   r   r   TFInvalid tool_call objectrH   (Invalid tool type. Unsupported by OpenAIr   r   r   noner   rN   rz   r6   rn   r   r   output	task_stepis_last
next_steps)"r   r   r   rr   r   r<   to_openai_toolr   r   r   r   rR   r   r-   rK   typer   r   rP   r6   r   r   r   	ASSISTANTr   r   r   is_dummy_streamget_next_stepr   r   r   r   r   )ru   r   r   r   r   r^   r/   r   r   agent_chat_responselatest_tool_callslatest_tool_outputsis_done	new_stepsrA   r   response_strr   s                     r?   	_run_stepzOpenAIAgentWorker._run_step2  sw    ::!#d&&|4dmm tzz*CHI4446II33D,T6d66

.

 !66t<B02$$t//0BC
 GI G. #	!)Xn-EF$%?@@>>Z/$%OPP !% 3 3$$\2'	!   +223Fr3JK &66"(K  !3494 S):%;q%@"G#6r#:#B#BL$0 +!,!6!6!%M
 +/*?*?m*T' 0 7 77 (7 G#Z  && #DJJL 1" '    ':#& 	
 	
O Js   !H;c                   K   |j                   %t        ||j                  d   | j                         | j	                  |j                         }|D cg c]  }|j
                  j                          }}| j                  |||      } | j                  |fd|i| d{   }	| j                  |      xs g }
g }| j                  |
|j                  d         sd}nRd}|
D ]@  }t        |t        t                    st        d      |j                  d	k7  s7t        d
       t!        j"                  |
D cg c]#  }| j%                  |||j                  d   |      % c}  d{   }t'        |      D ]  \  }}|j                  d   j)                  ||          |dvrd}|j                  dxx   dz  cc<   |sGt+        |
      dk(  sVd}||   j,                  }t/        t1        t2        j4                  |            }| j7                  ||      }	|t8        j:                  k(  |	_         n |s/|j?                  tA        tC        jD                               d      gng }||	_#        tI        |	|||      S c c}w 7 c c}w 7 w)r   Nr   r   r   r   TFr   rH   r   r   r   r   rN   r   r  r  r  )%r   r   r   rr   r   r<   r  r   r   r   r   rR   r   r-   rK   r	  r   gatherr   	enumerater   rP   r6   r   r   r   r
  r   r   r   r  r  r   r   r   r   r   )ru   r   r   r   r   r^   r/   r   r   r  r  r  r  rA   tool_resultsindexr   r  r   r  s                       r?   
_arun_stepzOpenAIAgentWorker._arun_step  s     ::!#d&&|4dmm tzz*CHI4446II33D,T$BD$B$B%
%
.%
 
 !66t<B02$$t//0BC
 GG / Q	!)Xn-EF$%?@@>>Z/$%OPP	Q ") &7 " ((!((6+	
" 
L )2,(? $}  +223Fu3MN &66"(K  !3494 !S):%;q%@"G#6u#=#E#EL$0 +!,!6!6!%M
 +/*?*?m*T' 0 7 77 (7 +>  ""

- #   	 ':#& 	
 	
Y J
.
sQ   AJ!I;4-J!J "A8JJ:(J"J)J*AJ JB2JJrun_stepc                 l    |j                  dd      }| j                  ||t        j                  |      S )r   r   r   r   r   )r   r  r   r   ru   r   r   r5   r   s        r?   r  zOpenAIAgentWorker.run_step  s:     jj7~~$-22  
 	
rk   c                    K   |j                  dd      }| j                  ||t        j                  |       d{   S 7 w)zRun step (async).r   r   r  N)r   r  r   r   r  s        r?   	arun_stepzOpenAIAgentWorker.arun_step  sH     
 jj7__$-22 % 
 
 	
 
   9AA Ac                 l    |j                  dd      }| j                  ||t        j                  |      S )zRun step (stream).r   r   r  )r   r  r   r   r  s        r?   stream_stepzOpenAIAgentWorker.stream_step  s:     jj7~~$-44+  
 	
rk   c                    K   |j                  dd      }| j                  ||t        j                  |       d{   S 7 w)zRun step (async stream).r   r   r  N)r   r  r   r   r  s        r?   astream_stepzOpenAIAgentWorker.astream_step
  sH     
 jj7__$-44+ % 
 
 	
 
r   c                     |j                   j                  |j                  d   j                                |j                  d   j	                          yz1Finalize task, after all the steps are completed.r   N)r   put_messagesr   r   resetru   r   r5   s      r?   r   zOpenAIAgentWorker.finalize_task  sA     	  !1!1,!?!G!G!IJ&,,.rk   c                    K   |j                   d   j                         }|j                   d   j                          |j                  j	                  |       d{    y7 wr&  )r   r   r(  r   aput_messages)ru   r   r5   r   s       r?   r   z OpenAIAgentWorker.afinalize_task  sN     ##L199;&,,.kk''111s   AA#A!A#c                     t        d      )z\
        Undo step from task.

        If this cannot be implemented, return None.

        zUndo is not yet implemented)r   r)  s      r?   	undo_stepzOpenAIAgentWorker.undo_step#  s     ""?@@rk   c                     || _         y)zSet callback manager.N)rc   )ru   rc   s     r?   set_callback_managerz&OpenAIAgentWorker.set_callback_manager@  s     !1rk   )r   )<__name__
__module____qualname____doc__DEFAULT_MAX_FUNCTION_CALLSr   r'   r,   r   boolintr   r   r%   r   r-   r   rv   classmethodr"   r   r   r~   r   r   r   rS   r	   r   r   r   r   r   r   r   r   r   r   r   r#   r(   r   r   r   r   r   r   r   r   r  r  r   r  r  r"  r$  r   r   r-  r/  r:   rk   r?   r]   r]      sV   $ "<6:>BGK+H~+ + k*	+
 +  + #?3+ !!:;+ #8^,<d,B#CD+:  +/>B!"<6:'+7;GK5
X'5
 !!:;5
 c]	5

 5
  5
 #?35
  }5
 "${"345
 #8^,<d,B#CD5
 5
 
5
 5
n
T 
d;.? 

$ 
8D<P3Q 
 )/	 4j 39%	
 
c3h

)5
	
$$-0$	#$.$$-0$	#$,	&	& 0	&EH	&	!	&	&	& 0	&EH	&	!	&h
H~h
 "h
 	h

 j!h
 
h
Tg
H~g
 "g
 	g

 j!g
 
g
R
D 
C 
H 
&>"4#78>LO>	>&s &tH~ & "2!6!6(.Z
Z
 Z
 	Z

 39%Z
 
Z
@ "2!6!6(._
_
 _
 	_

 39%_
 
_
B *
X 
T 
S 
^ 
 
 *

$(
47
	
 
 *
 
 
 
 
 
 *

$(
47
	
 
/$ /# /$ /2 2 2 2Ad Ac Ahx6H A:1_ 1 1rk   r]   )NF)Rr3  r   rF   loggingr   	functoolsr   typingr   r   r   r   r   r	   r
   r   rT   llama_index.agent.openai.utilsr   ,llama_index.core.agent.function_calling.stepr   r   r   llama_index.core.agent.typesr   r   r   r   llama_index.core.agent.utilsr    llama_index.core.base.llms.typesr   llama_index.core.callbacksr   r   r   r   "llama_index.core.chat_engine.typesr   r   r   r   r   r    llama_index.core.instrumentationr    -llama_index.core.instrumentation.events.agentr!   llama_index.core.llms.llmr"   llama_index.core.memoryr#   r$   llama_index.core.objects.baser%   llama_index.core.settingsr&   llama_index.core.toolsr'   r(   r)   llama_index.core.tools.typesr*   llama_index.core.typesr+   llama_index.llms.openair,   llama_index.llms.openai.utilsr-   	getLoggerr0  loggersetLevelWARNINGr   r4  r   r5  r@   rL   r[   r]   r:   rk   r?   <module>rQ     s          M M M 	 > 
  A 8   G ; L ) @ 9 . L L 5 ) * 8			8	$   H%
  $(	



 C=
 	

 
4
 
 
  
D  
FD1 D1rk   