
    hKP                     .   d dl 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 d dlmZ d dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ  ej8                  e      Zd
Z eee df      dd      Z! eee df      dd      Z"g dZ# G d d      Z$d'de de	de$fdZ%de	dee
e e	f   ee	   e	f   fdZ&de	de	fdZ'de(de	fdZ)de de fdZ*de	de	fdZ+de	de	fdZ,d ede
e e	f   fd!Z-d"eee   e	f   dee
e e	f      fd#Z. G d$ d%e      Z/d%d&gZ0y)(    N)
ContextVar)AnyDictListUnioncast)UUID)AgentActionAgentFinish)BaseCallbackHandler)BaseMessage)	LLMResult)parsezhttps://app.llmonitor.comuser_ctx)defaultuser_props_ctx)temperaturetop_ptop_kstoppresence_penaltyfrequence_penaltyseedfunction_call	functionstoolstool_choiceresponse_format
max_tokens
logit_biasc                   J    e Zd ZdZddededdfdZdefdZded	ed
edefdZy)UserContextManagerz+Context manager for LLMonitor user context.Nuser_id
user_propsreturnc                 X    t         j                  |       t        j                  |       y Nr   setr   )selfr#   r$   s      n/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/callbacks/llmonitor_callback.py__init__zUserContextManager.__init__-   s    W:&    c                      y r'    )r*   s    r+   	__enter__zUserContextManager.__enter__1   s    r-   exc_type	exc_valueexc_tbc                 X    t         j                  d        t        j                  d        y r'   r(   )r*   r1   r2   r3   s       r+   __exit__zUserContextManager.__exit__4   s    T4 r-   r'   )	__name__
__module____qualname____doc__strr   r,   r0   r5   r/   r-   r+   r"   r"   *   sL    5' ' ' '3 ! ! !c !c !r-   r"   r#   r$   r%   c                     t        | |      S )zBuilds an LLMonitor UserContextManager

    Parameters:
        - `user_id`: The user id.
        - `user_props`: The user properties.

    Returns:
        A context manager that sets the user context.
    )r"   )r#   r$   s     r+   identifyr<   9   s     gz22r-   objc                     t        | d      r| j                         S t        | t              r-| j	                         D ci c]  \  }}|t        |       c}}S t        | t              r| D cg c]  }t        |       c}S | S c c}}w c c}w )Nto_json)hasattrr?   
isinstancedictitems
_serializelist)r=   keyvalueelements       r+   rD   rD   F   sw    sI{{}#t9<E:3Z&&EE#t367
7#77J F 8s    B.B	raw_inputc                 T   | sy t        | t              rt        |       dk(  rt        | d         S t        | t              st        |       S | j                  d      }| j                  d      }| j                  d      }| j                  d      }|r|S |r|S |r|S |r|S t        |       S )N   r   inputinputsquestionquery)rA   rE   len_parse_inputrB   rD   get)rI   input_valueinputs_valuequestion_valuequery_values        r+   rQ   rQ   S   s     )T"s9~':IaL))i&)$$--(K==*L]]:.N--(Ki  r-   
raw_outputc                 &   | sy t        | t              st        |       S | j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }|r|S |r|S |r|S |r|S |r|S t        |       S )Ntextoutputoutput_textanswerresult)rA   rB   rD   rR   )rW   
text_valueoutput_valueoutput_text_valueanswer_valueresult_values         r+   _parse_outputrc   o   s    j$'*%%'J>>(+L"}5>>(+L>>(+L  j!!r-   rolec                     | dk(  ry| S )Nhumanuserr/   )rd   s    r+   _parse_lc_rolerh      s     wr-   metadatac                     t         j                         t         j                         S | xs i } | j                  d      }|| j                  d      }|S )Nr#   userId)r   rR   )ri   r#   s     r+   _get_user_idrl      sI    ||~!||~~2Hll9%G,,x(Nr-   c                     t         j                         t         j                         S | xs i } | j                  dd       S )Nr$   )r   rR   )ri   s    r+   _get_user_propsrn      s:    '!!##~2H<<d++r-   messagec                     g d}| j                   t        | j                        d}|j                  |D ci c]G  }| j                  j                  |      *|t        t        | j                  j                  |            I c}       |S c c}w )N)r   
tool_callstool_call_idname)rY   rd   )contentrh   typeupdateadditional_kwargsrR   r   r   )ro   keysparsedrF   s       r+   _parse_lc_messagerz      s    BDoo~gll/KLF
MM 	
((,,S1= c74488=>>	
 M	
s   ABmessagesc                 >    | D cg c]  }t        |       c}S c c}w r'   )rz   )r{   ro   s     r+   _parse_lc_messagesr}      s    6>?7g&???s   c                       e Zd ZU dZeed<   eed<   eed<   eed<   eed<   	 	 	 d,deedf   d	eedf   d
eddf fdZddddde	ee
f   dee   dedeedf   deee   df   dee	ee
f   df   de
ddfdZddddde	ee
f   deee      dedeedf   deee   df   dee	ee
f   df   de
de
fdZdddededeedf   de
ddf
dZddddde	ee
f   dededeedf   deee   df   dee	ee
f   df   de
ddfdZdddde
dedeedf   deee   df   de
ddfdZddddde	ee
f   d e	ee
f   dedeedf   deee   df   dee	ee
f   df   de
de
fd!Zddd"e	ee
f   dedeedf   de
de
f
d#Zddd$ededeedf   de
de
f
d%Zddd&ededeedf   de
de
f
d'Zddd(ededeedf   de
de
f
d)Zddd(ededeedf   de
de
f
d*Zddd(ededeedf   de
de
f
d+Z xZS )-LLMonitorCallbackHandlera  Callback Handler for LLMonitor`.

    #### Parameters:
        - `app_id`: The app id of the app you want to report to. Defaults to
        `None`, which means that `LLMONITOR_APP_ID` will be used.
        - `api_url`: The url of the LLMonitor API. Defaults to `None`,
        which means that either `LLMONITOR_API_URL` environment variable
        or `https://app.llmonitor.com` will be used.

    #### Raises:
        - `ValueError`: if `app_id` is not provided either as an
        argument or as an environment variable.
        - `ConnectionError`: if the connection to the API fails.


    #### Example:
    ```python
    from langchain_community.llms import OpenAI
    from langchain_community.callbacks import LLMonitorCallbackHandler

    llmonitor_callback = LLMonitorCallbackHandler()
    llm = OpenAI(callbacks=[llmonitor_callback],
                 metadata={"userId": "user-123"})
    llm.invoke("Hello, how are you?")
    ```
    "_LLMonitorCallbackHandler__api_url!_LLMonitorCallbackHandler__app_id"_LLMonitorCallbackHandler__verbose,_LLMonitorCallbackHandler__llmonitor_version+_LLMonitorCallbackHandler__has_valid_configNapp_idapi_urlverboser%   c                    t         |           d| _        	 dd l}t        j
                  j                  d      | _        |j                  | _	        t        | j                        t        d      k  r*t        j                  d| j                   d       d| _        d| _        |xs t        j                  d	      xs t         | _        |xs t%        t        j                  d
            | _        |xs t        j                  d      }|t        j                  d       d| _        n|| _        | j                  du ry 	 t+        j,                  | j"                   d| j(                         }|j.                  s
t1               y # t        $ r t        j                  d       d| _        Y y w xY w# t2        $ r% t        j                  d| j"                          Y y w xY w)NTr   	llmonitorz[LLMonitor] To use the LLMonitor callback handler you need to 
                have the `llmonitor` Python package installed. Please install it 
                with `pip install llmonitor`Fz0.0.32zB[LLMonitor] The installed `llmonitor` version is 
                z 
                but `LLMonitorCallbackHandler` requires at least version 0.0.32 
                upgrade `llmonitor` with `pip install --upgrade llmonitor`LLMONITOR_API_URLLLMONITOR_VERBOSELLMONITOR_APP_IDzh[LLMonitor] app_id must be provided either as an argument or 
                as an environment variablez	/api/app/zG[LLMonitor] Could not connect to the LLMonitor API at 
                )superr,   r   r   	importlibri   versionr   track_event&_LLMonitorCallbackHandler__track_eventImportErrorloggerwarningr   osgetenvDEFAULT_API_URLr   boolr   r   requestsrR   okConnectionError	Exception)r*   r   r   r   r   _app_idres	__class__s          r+   r,   z!LLMonitorCallbackHandler.__init__   s    	"&	'0'9'9'A'A+'ND$!*!6!6D ))*U8_<NN))* +KN ',D#"& UBII.A$BUo HD3F)G$H9BII&89?NN. ',D##DM""e+	,,$..!14==/JKC66%'' M  	NN0
 ',D#	P  	NN $	s$   9F ?AF/ %F,+F,/+GG)parent_run_idtagsri   
serializedpromptsrun_idr   r   ri   kwargsc                   | j                   du ry 	 t        |      }t        |      }	|j                  di       }
|
j	                  |j                  di              |
j                  d      xs$ |
j                  d      xs |
j                  d      }|sd|
j                  d      v rd	}t
        D ci c]%  }|
j                  |      ||
j                  |      ' }}t        |      }| j                  d
d|t        |      |rt        |      nd ||||||	| j                         y c c}w # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFinvocation_paramsr   model
model_namemodel_id	anthropic_typeclaude-2llmstart
r#   r   r   rs   rL   r   extrari   r$   r   z/[LLMonitor] An error occurred in on_llm_start: )r   rl   rn   rR   rv   PARAMS_TO_CAPTURErQ   r   r:   r   r   warningswarn)r*   r   r   r   r   r   ri   r   r#   r$   paramsrs   paramr   rL   es                   r+   on_llm_startz%LLMonitorCallbackHandler.on_llm_start  si    ""e+)	Q"8,G(2JZZ 3R8FMMx,
 

7# *::l+*::j)  K6::g+>>! /::e$0 vzz%((E  !)E6{4Ac-0t!%}}  ,  	QMMKA3OPP	Qs+   BD* 0*D%A
D* %D* *	E3EEr{   c                   | j                   du ry 	 t        |      }t        |      }	|j                  di       }
|
j	                  |j                  di              |
j                  d      xs$ |
j                  d      xs |
j                  d      }|sd|
j                  d      v rd	}t
        D ci c]%  }|
j                  |      ||
j                  |      ' }}t        |d
         }| j                  dd|t        |      |rt        |      nd ||||||	| j                         y c c}w # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   r   r   r   r   r   r   r   r   r   r   z6[LLMonitor] An error occurred in on_chat_model_start: )r   rl   rn   rR   rv   r   r}   r   r:   r   r   r   error)r*   r   r{   r   r   r   ri   r   r#   r$   r   rs   r   r   rL   r   s                   r+   on_chat_model_startz,LLMonitorCallbackHandler.on_chat_model_startO  so    ""e+)	W"8,G(2JZZ 3R8FMMx,
 

7# *::l+*::j)  K6::g+>>! /::e$0 vzz%((E  'x{3E6{4Ac-0t!%}}  ,  	WLLQRSQTUVV	Ws+   BD- 0*D(AD- (D- -	E6EE)r   responsec                0   | j                   du ry 	 |j                  xs i j                  di       }|j                  d   D cg c]/  }t	        |d      rt        |j                        n|j                  1 }}t        |      dk(  r|d   }| j                  ddt        |      |rt        |      nd ||j                  d      |j                  d	      d
| j                         y c c}w # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFtoken_usager   ro   rK   r   endprompt_tokenscompletion_tokens)prompt
completion)r   r   rZ   r   r   z-[LLMonitor] An error occurred in on_llm_end: )r   
llm_outputrR   generationsr@   rz   ro   rY   rP   r   r:   r   r   r   r   )	r*   r   r   r   r   r   
generationparsed_outputr   s	            r+   
on_llm_endz#LLMonitorCallbackHandler.on_llm_end  s&    ""e+	N#..4"99-LK #+"6"6q"9	"  :y1 "*"4"45__%"M " =!Q& -a 06{4Ac-0t$)ooo>"-//2E"F }}  ".  	NLLHLMM	Ns*   1C* 4C%6A.C* %C* *	D3DD	input_strc                F   | j                   du ry 	 t        |      }t        |      }	|j                  d      }
| j	                  dd|t        |      |rt        |      nd |
||||	| j                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFrs   toolr   	r#   r   r   rs   rL   r   ri   r$   r   z0[LLMonitor] An error occurred in on_tool_start: )
r   rl   rn   rR   r   r:   r   r   r   r   )r*   r   r   r   r   r   ri   r   r#   r$   rs   r   s               r+   on_tool_startz&LLMonitorCallbackHandler.on_tool_start  s     ""e+	Q"8,G(2J>>&)D6{4Ac-0t!%}}    	QLLKA3OPP	Qs   A#A5 5	B >BB )r   r   rZ   c                   t        |      }| j                  du ry 	 | j                  ddt        |      |rt        |      nd || j                         y # t        $ r"}t
        j                  d|        Y d }~y d }~ww xY w)NFr   r   r   r   rZ   r   z.[LLMonitor] An error occurred in on_tool_end: )r:   r   r   r   r   r   r   )r*   rZ   r   r   r   r   r   s          r+   on_tool_endz$LLMonitorCallbackHandler.on_tool_end  s     V""e+
	O6{4Ac-0t}}    	OLLI!MNN	Os   7A 	A?A::A?rM   c                   | j                   du ry 	 |j                  dg d      d   }d}	|xs i }|j                  d      }
|
|j                  d      }
|dk(  s|d	k(  rd
}	|
d
}	|
}|d}	t        |      }t        |      }t	        |      }| j                  |	d|t        |      |rt        |      nd |||||| j                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFid)NNNN   chain
agent_name	agentNameAgentExecutorPlanAndExecuteagentr   r   z1[LLMonitor] An error occurred in on_chain_start: )r   rR   rl   rn   rQ   r   r:   r   r   r   r   )r*   r   rM   r   r   r   ri   r   rs   ru   r   r#   r$   rL   r   s                  r+   on_chain_startz'LLMonitorCallbackHandler.on_chain_start  s    ""e+#	R>>$(@A!DDD~2H \2I $LL5	&$2B*B$ ("8,G(2J (E6{4Ac-0t!%}}    	RLLLQCPQQ	Rs   B6C 	C3C..C3outputsc                   | j                   du ry 	 t        |      }| j                  ddt        |      |rt        |      nd || j                         y # t
        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   r   z/[LLMonitor] An error occurred in on_chain_end: )r   rc   r   r:   r   r   r   r   )r*   r   r   r   r   rZ   r   s          r+   on_chain_endz%LLMonitorCallbackHandler.on_chain_end  s     ""e+	P"7+F6{4Ac-0t}}    	PLLJ1#NOO	Ps   AA 	A?A::A?actionc          	      2   | j                   du ry 	 |j                  }t        |j                        }| j	                  ddt        |      |rt        |      nd ||| j                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   )r   r   rs   rL   r   z2[LLMonitor] An error occurred in on_agent_action: )
r   r   rQ   
tool_inputr   r:   r   r   r   r   )r*   r   r   r   r   rs   rL   r   s           r+   on_agent_actionz(LLMonitorCallbackHandler.on_agent_action4  s     ""e+	S;;D !2!23E6{4Ac-0t}}    	SLLMaSQRR	Ss   AA+ +	B4BBfinishc                   | j                   du ry 	 t        |j                        }| j                  ddt	        |      |rt	        |      nd || j
                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   r   z2[LLMonitor] An error occurred in on_agent_finish: )	r   rc   return_valuesr   r:   r   r   r   r   )r*   r   r   r   r   rZ   r   s          r+   on_agent_finishz(LLMonitorCallbackHandler.on_agent_finishN  s     ""e+	S"6#7#78F6{4Ac-0t}}    	SLLMaSQRR	Ss   AA 	B	'BB	r   c          	      *   | j                   du ry 	 | j                  ddt        |      |rt        |      nd t        |      t        j                         d| j
                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   ro   stackr   r   r   r   z1[LLMonitor] An error occurred in on_chain_error: 	r   r   r:   	traceback
format_excr   r   r   r   r*   r   r   r   r   r   s         r+   on_chain_errorz'LLMonitorCallbackHandler.on_chain_errorf  s     ""e+
	R6{4Ac-0t"%e*y7K7K7MN}}    	RLLLQCPQQ	R   AA' '	B0BBc          	      *   | j                   du ry 	 | j                  ddt        |      |rt        |      nd t        |      t        j                         d| j
                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   r   r   z0[LLMonitor] An error occurred in on_tool_error: r   r   s         r+   on_tool_errorz&LLMonitorCallbackHandler.on_tool_error|  s     ""e+
	Q6{4Ac-0t"%e*y7K7K7MN}}    	QLLKA3OPP	Qr   c          	      *   | j                   du ry 	 | j                  ddt        |      |rt        |      nd t        |      t        j                         d| j
                         y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NFr   r   r   r   z/[LLMonitor] An error occurred in on_llm_error: r   r   s         r+   on_llm_errorz%LLMonitorCallbackHandler.on_llm_error  s     ""e+
	P6{4Ac-0t"%e*y7K7K7MN}}    	PLLJ1#NOO	Pr   )NNF)r6   r7   r8   r9   r:   __annotations__r   r   r,   r   r   r   r	   r   r   r   r   r   r   r   r   r   r
   r   r   r   BaseExceptionr   r   r   __classcell__)r   s   @r+   r   r      sP   6 NMO $($(	<c4i < sDy!< 	<
 
<H ,0'+046QcN6Q c6Q
 6Q T4Z(6Q DItO$6Q S#X,-6Q 6Q 
6Q| ,0'+047WcN7W tK()7W
 7W T4Z(7W DItO$7W S#X,-7W 7W 
7W| ,0&N&N 	&N
 T4Z(&N &N 
&N\ ,0'+04 QcN Q  Q
  Q T4Z( Q DItO$ Q S#X,- Q  Q 
 QN ,0'+OO 	O
 T4Z(O DItO$O O 
O< ,0'+040RcN0R S#X0R
 0R T4Z(0R DItO$0R S#X,-0R 0R 
0Rn ,0Pc3hP 	P
 T4Z(P P 
P: ,0SS 	S
 T4Z(S S 
S> ,0SS 	S
 T4Z(S S 
S: ,0RR 	R
 T4Z(R R 
R6 ,0QQ 	Q
 T4Z(Q Q 
Q6 ,0PP 	P
 T4Z(P P 
Pr-   r   r<   r'   )1importlib.metadatar   loggingr   r   r   contextvarsr   typingr   r   r   r   r   uuidr	   r   langchain_core.agentsr
   r   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr   packaging.versionr   	getLoggerr6   r   r   r:   r   r   r   r"   r<   rD   rQ   rB   rc   rh   rl   rn   rz   r}   r   __all__r/   r-   r+   <module>r     s     	   " / /   : 8 / , #			8	$-':eCI&'
DA-E#t),-.>M $! !
3c 
3s 
36H 
3
C 
E$sCx.$s)S"@A 
!C !C !8"d "s "6
3 3 ,c ,c ,
{ 
tCH~ 
@tK'8#'=!> @4SRUXCW @oP2 oPd &z
2r-   