
    NgKP                        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j        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Z0dS )(    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                   L    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dS )UserContextManagerz+Context manager for LLMonitor user context.Nuser_id
user_propsreturnc                 n    t                               |           t                              |           d S Nr   setr   )selfr#   r$   s      l/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/callbacks/llmonitor_callback.py__init__zUserContextManager.__init__-   s.    W:&&&&&    c                     d S r'    )r*   s    r+   	__enter__zUserContextManager.__enter__1   s    r-   exc_type	exc_valueexc_tbc                 n    t                               d            t                              d            d S 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"   *   s        5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22r-   objc                     t          | d          r|                                 S t          | t                    rd |                                 D             S t          | t
                    rd | D             S | S )Nto_jsonc                 4    i | ]\  }}|t          |          S r/   
_serialize).0keyvalues      r+   
<dictcomp>z_serialize.<locals>.<dictcomp>K   s&    EEE:3Z&&EEEr-   c                 ,    g | ]}t          |          S r/   rA   )rC   elements     r+   
<listcomp>z_serialize.<locals>.<listcomp>N   s     777
7##777r-   )hasattrr?   
isinstancedictitemslist)r=   s    r+   rB   rB   F   s|    sI {{}}#t FEEEEEE#t 87737777Jr-   	raw_inputc                    | sd S t          | t                    r(t          |           dk    rt          | d                   S t          | t                    st          |           S |                     d          }|                     d          }|                     d          }|                     d          }|r|S |r|S |r|S |r|S t          |           S )N   r   inputinputsquestionquery)rK   rN   len_parse_inputrL   rB   get)rO   input_valueinputs_valuequestion_valuequery_values        r+   rW   rW   S   s     t )T"" *s9~~':':IaL)))i&& %)$$$--((K==**L]]:..N--((K    i   r-   
raw_outputc                 j   | sd S t          | t                    st          |           S |                     d          }|                     d          }|                     d          }|                     d          }|                     d          }|r|S |r|S |r|S |r|S |r|S t          |           S )Ntextoutputoutput_textanswerresult)rK   rL   rB   rX   )r]   
text_valueoutput_valueoutput_text_valueanswer_valueresult_values         r+   _parse_outputri   o   s     tj$'' &*%%%''J>>(++L"}55>>(++L>>(++L    !   j!!!r-   rolec                     | dk    rdS | S )Nhumanuserr/   )rj   s    r+   _parse_lc_rolern      s     wvr-   metadatac                     t                                           t                                           S | pi } |                     d          }||                     d          }|S )Nr#   userId)r   rX   )ro   r#   s     r+   _get_user_idrr      sS    ||~~!||~~~2Hll9%%G,,x((Nr-   c                     t                                           t                                           S | pi } |                     dd           S )Nr$   )r   rX   )ro   s    r+   _get_user_propsrt      sC    '!!###~2H<<d+++r-   messagec                      g d} j         t           j                  d}|                     fd|D                        |S )N)r   
tool_callstool_call_idname)r_   rj   c           	          i | ]J}j                             |          |t          t          j                             |                    KS r'   )additional_kwargsrX   r   r   )rC   rD   ru   s     r+   rF   z%_parse_lc_message.<locals>.<dictcomp>   sW     	
 	
 	
(,,S11= c7488==>>===r-   )contentrn   typeupdate)ru   keysparseds   `  r+   _parse_lc_messager      sj    BBBDo~gl/K/KLLF
MM	
 	
 	
 	
	
 	
 	
   Mr-   messagesc                     d | D             S )Nc                 ,    g | ]}t          |          S r/   )r   )rC   ru   s     r+   rI   z&_parse_lc_messages.<locals>.<listcomp>   s!    ???7g&&???r-   r/   )r   s    r+   _parse_lc_messagesr      s    ??h????r-   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_configNFapp_idapi_urlverboser%   c                    t                                                       d| _        	 dd l}t          j                            d          | _        |j        | _	        n2# t          $ r% t                              d           d| _        Y d S w xY wt          | j                  t          d          k     r*t                              d| j         d           d| _        d| _        |pt          j        d	          pt           | _        |p t%          t          j        d
                    | _        |pt          j        d          }|"t                              d           d| _        n|| _        | j        du rd S 	 t+          j        | j         d| j                   }|j        st1                      d S # t2          $ r& t                              d| j                    Y d S 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   	importlibro   versionr   track_event&_LLMonitorCallbackHandler__track_eventImportErrorloggerwarningr   osgetenvDEFAULT_API_URLr   boolr   r   requestsrX   okConnectionError	Exception)r*   r   r   r   r   _app_idres	__class__s          r+   r,   z!LLMonitorCallbackHandler.__init__   s7    	"&	'0'9'A'A+'N'ND$!*!6D 	 	 	NN0  
 ',D#FF	 )**U8__<<NNN)N N N   ',D#"& UBI.A$B$BUo HD3F)G)G$H$H9BI&899?NN.   ',D###DM"e++4	,$.JJ4=JJKKC6 (%'''( ( 	 	 	NN$$ $     	s#   4A +BB>8F8 8,G('G()parent_run_idtagsro   
serializedpromptsrun_idr   r   ro   kwargsc                   | j         du rd S 	 t          |          }t          |          }	|                    di                               |                    di                                          d          p)                    d          p                    d          }
|
sd                    d          v rd	}
fd
t
          D             }t          |          }|                     dd|t          |          |rt          |          nd |
|||||	| j	                   d S # t          $ r"}t          j        d|            Y d }~d S d }~ww xY w)NFinvocation_paramsr   model
model_namemodel_id	anthropic_typeclaude-2c                 f    i | ]-}                     |          |                     |          .S r'   rX   rC   paramparamss     r+   rF   z9LLMonitorCallbackHandler.on_llm_start.<locals>.<dictcomp>6  C       ::e$$0 vzz%((000r-   llmstart
r#   r   r   ry   rR   r   extraro   r$   r   z/[LLMonitor] An error occurred in on_llm_start: )r   rr   rt   rX   r~   PARAMS_TO_CAPTURErW   r   r:   r   r   warningswarn)r*   r   r   r   r   r   ro   r   r#   r$   ry   r   rR   er   s                 @r+   on_llm_startz%LLMonitorCallbackHandler.on_llm_start  s    "e++F)	Q"8,,G(22JZZ 3R88FMMx,,  
 

7## *::l++*::j))   "K6::g+>+>>>!   .  E !))E6{{4AKc-000t!%}        	Q 	Q 	QMOAOOPPPPPPPPP	Qs   DD- -
E7EEr   c                   | j         du rd S 	 t          |          }t          |          }	|                    di                               |                    di                                          d          p)                    d          p                    d          }
|
sd                    d          v rd	}
fd
t
          D             }t          |d                   }|                     dd|t          |          |rt          |          nd |
|||||	| j	                   d S # t          $ r(}t                              d|            Y d }~d S d }~ww xY w)NFr   r   r   r   r   r   r   r   c                 f    i | ]-}                     |          |                     |          .S r'   r   r   s     r+   rF   z@LLMonitorCallbackHandler.on_chat_model_start.<locals>.<dictcomp>o  r   r-   r   r   r   r   z6[LLMonitor] An error occurred in on_chat_model_start: )r   rr   rt   rX   r~   r   r   r   r:   r   r   r   error)r*   r   r   r   r   r   ro   r   r#   r$   ry   r   rR   r   r   s                 @r+   on_chat_model_startz,LLMonitorCallbackHandler.on_chat_model_startO  s    "e++F)	W"8,,G(22JZZ 3R88FMMx,,  
 

7## *::l++*::j))   "K6::g+>+>>>!   .  E 'x{33E6{{4AKc-000t!%}        	W 	W 	WLLURSUUVVVVVVVVV	Ws   D#D3 3
E%=E  E%)r   responsec                   | j         du rd S 	 |j        pi                     di           }d |j        d         D             }t	          |          dk    r|d         }|                     ddt          |          |rt          |          nd ||                    d          |                    d	          d
| j                   d S # t          $ r(}t          
                    d|            Y d }~d S d }~ww xY w)NFtoken_usagec                 d    g | ]-}t          |d           rt          |j                  n|j        .S )ru   )rJ   r   ru   r_   )rC   
generations     r+   rI   z7LLMonitorCallbackHandler.on_llm_end.<locals>.<listcomp>  sO     " " "  :y11%!*"4555_" " "r-   r   rQ   r   endprompt_tokenscompletion_tokens)prompt
completion)r   r   r`   r   r   z-[LLMonitor] An error occurred in on_llm_end: )r   
llm_outputrX   generationsrV   r   r:   r   r   r   r   )r*   r   r   r   r   r   parsed_outputr   s           r+   
on_llm_endz#LLMonitorCallbackHandler.on_llm_end  sQ    "e++F	N#.4"99-LLK" " #+"6q"9	" " "M =!!Q&& -a 06{{4AKc-000t$)ooo>>"-//2E"F"F  }        	N 	N 	NLLLLLMMMMMMMMM	Ns   B7C 
C8C33C8	input_strc                t   | j         du rd S 	 t          |          }t          |          }	|                    d          }
|                     dd|t          |          |rt          |          nd |
||||	| j                   d S # t          $ r(}t          	                    d|            Y d }~d S d }~ww xY w)NFry   toolr   	r#   r   r   ry   rR   r   ro   r$   r   z0[LLMonitor] An error occurred in on_tool_start: )
r   rr   rt   rX   r   r:   r   r   r   r   )r*   r   r   r   r   r   ro   r   r#   r$   ry   r   s               r+   on_tool_startz&LLMonitorCallbackHandler.on_tool_start  s     "e++F	Q"8,,G(22J>>&))D6{{4AKc-000t!%}        	Q 	Q 	QLLOAOOPPPPPPPPP	Qs   A6B 
B7B22B7)r   r   r`   c                "   t          |          }| j        du rd S 	 |                     ddt          |          |rt          |          nd || j                   d S # t          $ r(}t
                              d|            Y d }~d S d }~ww xY w)NFr   r   r   r   r`   r   z.[LLMonitor] An error occurred in on_tool_end: )r:   r   r   r   r   r   r   )r*   r`   r   r   r   r   r   s          r+   on_tool_endz$LLMonitorCallbackHandler.on_tool_end  s     V"e++F
	O6{{4AKc-000t}        	O 	O 	OLLM!MMNNNNNNNNN	Os   >A 
B&B		BrS   c                8   | j         du rd S 	 |                    dg d          d         }d}	|pi }|                    d          }
|
|                    d          }
|dk    s|d	k    rd
}	|
d
}	|
}|d}	t          |          }t          |          }t	          |          }|                     |	d|t          |          |rt          |          nd |||||| j                   d S # t          $ r(}t          
                    d|            Y d }~d S 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   rX   rr   rt   rW   r   r:   r   r   r   r   )r*   r   rS   r   r   r   ro   r   ry   r}   r   r#   r$   rR   r   s                  r+   on_chain_startz'LLMonitorCallbackHandler.on_chain_start  s    "e++F#	R>>$(@(@(@AA!DDD~2H \22I $LL55	&&$2B*B*B$ ("8,,G(22J ((E6{{4AKc-000t!%}        	R 	R 	RLLPQPPQQQQQQQQQ	Rs   CC' '
D1DDoutputsc                "   | j         du rd S 	 t          |          }|                     ddt          |          |rt          |          nd || j                   d S # t
          $ r(}t                              d|            Y d }~d S d }~ww xY w)NFr   r   r   z/[LLMonitor] An error occurred in on_chain_end: )r   ri   r   r:   r   r   r   r   )r*   r   r   r   r   r`   r   s          r+   on_chain_endz%LLMonitorCallbackHandler.on_chain_end  s     "e++F	P"7++F6{{4AKc-000t}        	P 	P 	PLLN1NNOOOOOOOOO	Ps   AA 
B&B		Bactionc          	      <   | j         du rd S 	 |j        }t          |j                  }|                     ddt          |          |rt          |          nd ||| j                   d S # t          $ r(}t          	                    d|            Y d }~d S d }~ww xY w)NFr   r   )r   r   ry   rR   r   z2[LLMonitor] An error occurred in on_agent_action: )
r   r   rW   
tool_inputr   r:   r   r   r   r   )r*   r   r   r   r   ry   rR   r   s           r+   on_agent_actionz(LLMonitorCallbackHandler.on_agent_action4  s     "e++F	S;D !233E6{{4AKc-000t}        	S 	S 	SLLQaQQRRRRRRRRR	Ss   AA) )
B3BBfinishc                ,   | j         du rd S 	 t          |j                  }|                     ddt	          |          |rt	          |          nd || j                   d S # t          $ r(}t                              d|            Y d }~d S d }~ww xY w)NFr   r   r   z2[LLMonitor] An error occurred in on_agent_finish: )	r   ri   return_valuesr   r:   r   r   r   r   )r*   r   r   r   r   r`   r   s          r+   on_agent_finishz(LLMonitorCallbackHandler.on_agent_finishN  s     "e++F	S"6#788F6{{4AKc-000t}        	S 	S 	SLLQaQQRRRRRRRRR	Ss   AA! !
B+BBr   c          	      F   | j         du rd S 	 |                     ddt          |          |rt          |          nd t          |          t          j                    d| j                   d S # t          $ r(}t                              d|            Y d }~d S d }~ww xY w)NFr   r   ru   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++F
	R6{{4AKc-000t"%e**y7K7M7MNN}        	R 	R 	RLLPQPPQQQQQQQQQ	R   AA. .
B 8BB c          	      F   | j         du rd S 	 |                     ddt          |          |rt          |          nd t          |          t          j                    d| j                   d S # t          $ r(}t                              d|            Y d }~d S 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++F
	Q6{{4AKc-000t"%e**y7K7M7MNN}        	Q 	Q 	QLLOAOOPPPPPPPPP	Qr   c          	      F   | j         du rd S 	 |                     ddt          |          |rt          |          nd t          |          t          j                    d| j                   d S # t          $ r(}t                              d|            Y d }~d S 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++F
	P6{{4AKc-000t"%e**y7K7M7MNN}        	P 	P 	PLLN1NNOOOOOOO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      s         6 NNNMMMOOO $($(	< <c4i < sDy!< 	<
 
< < < < < <H ,0'+046Q 6Q 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 6Q 6Q 6Q| ,0'+047W 7W 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 7W 7W 7W| ,0&N &N &N&N 	&N
 T4Z(&N &N 
&N &N &N &N\ ,0'+04 Q  Q  QcN Q  Q
  Q T4Z( Q DItO$ Q S#X,- Q  Q 
 Q  Q  Q  QN ,0'+O O OO 	O
 T4Z(O DItO$O O 
O O O O< ,0'+040R 0R 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 0R 0R 0Rn ,0P P Pc3hP 	P
 T4Z(P P 
P P P P: ,0S S SS 	S
 T4Z(S S 
S S S S> ,0S S SS 	S
 T4Z(S S 
S S S S: ,0R R RR 	R
 T4Z(R R 
R R R R6 ,0Q Q QQ 	Q
 T4Z(Q Q 
Q Q Q Q6 ,0P P PP 	P
 T4Z(P P 
P P P P P 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<   rB   rW   rL   ri   rn   rr   rt   r   r   r   __all__r/   r-   r+   <module>r     sU        				      " " " " " " / / / / / / / / / / / / / /        : : : : : : : : 8 8 8 8 8 8 / / / / / / , , , , , , # # # # # #		8	$	$-':eCI&'
DAAA-E#t),-.>MMM   $! ! ! ! ! ! ! !
3 
3c 
3s 
36H 
3 
3 
3 
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 oP oP oP oP2 oP oP oPd &z
2r-   