
    ͞h                         % S r SSKrSSKJrJrJr  SSKJr  SSKJ	r	  SSK
Jr  \R                  " \5      r\	" SSS9r\	\\      \S'   \	" S	SS9r\	\\      \S	'    " S
 S5      rS rS\S\4S jrg)z9
LangSmith context manager for tracking user information
    N)OptionalDictAnywraps)
ContextVar)LangChainTracercurrent_user_id)defaultcurrent_user_emailc                   6    \ rS rSrSrS\S\4S jrS rS rSr	g	)
LangSmithUserContext   z+Context manager for LangSmith user trackinguser_id
user_emailc                 8    Xl         X l        S U l        S U l        g N)r   r   _user_id_token_user_email_token)selfr   r   s      ;D:\Projects\AI-TestCaseGenerator\utils\langsmith_context.py__init__LangSmithUserContext.__init__   s    $"!%    c                     [         R                  U R                  5      U l        [        R                  U R
                  5      U l        U $ r   )r
   setr   r   r   r   r   )r   s    r   	__enter__LangSmithUserContext.__enter__   s5    -11$,,?!3!7!7!Hr   c                     [         R                  U R                  5        [        R                  U R                  5        g r   )r
   resetr   r   r   )r   exc_typeexc_valexc_tbs       r   __exit__LangSmithUserContext.__exit__   s*    d112  !7!78r   )r   r   r   r   N)
__name__
__module____qualname____firstlineno____doc__strr   r   r$   __static_attributes__ r   r   r   r      s"    5& & &
9r   r   c                 0   ^  [        T 5      U 4S j5       nU$ )z7Decorator to ensure user context is passed to LangSmithc                  Z  > [         R                  5       n[        R                  5       nU(       a  U(       d  [        R	                  S5        T" U 0 UD6$ SU;   aJ  US   (       a@  US    H7  n[        US5      (       d  M  0 UR                  =(       d    0 EUUS.EUl        M9     T" U 0 UD6$ )Nz,No user context found for LangSmith tracking	callbacksmetadatar   r   )r
   getr   loggerwarninghasattrr1   )argskwargsr   r   callbackfuncs        r   wrapper"with_user_context.<locals>.wrapper$   s     "%%''++-
jNNIJ((( & VK%8";/8Z00)#,,2)#*&0)H% 0 T$V$$r   r   )r:   r;   s   ` r   with_user_contextr=   "   s     
4[% %( Nr   project_namereturnc                 Z    [        U S9n[        R                  5       n[        R                  5       nU(       a=  U(       a6  [	        US5      (       d  0 Ul        UR
                  R                  UUS.5        U$ ! [         a'  n[        R                  S[        U5       35        e SnAff = f)z3Create a LangSmith tracer with user context support)r>   r1   r2   z!Error creating LangSmith tracer: N)r	   r
   r3   r   r6   r1   update	Exceptionr4   errorr+   )r>   tracerr   r   es        r   create_langsmith_tracerrF   ;   s     l; "%%''++-
z6:.."$OO"""($ 
  8QABs   A6A9 9
B*"B%%B*)r*   loggingtypingr   r   r   	functoolsr   contextvarsr   %langchain.callbacks.tracers.langchainr	   	getLoggerr&   r4   r
   r+   __annotations__r   r   r=   rF   r-   r   r   <module>rN      s     & &  " A			8	$ .88ISW-XHSM* X0:;OY]0^ Jx}- ^9 9$2# / r   