
    Zip                        	 d dl Z n# e$ r  ed          w xY w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 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZ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l&m'Z'm(Z( d dl)m*Z*  ej+        d          Z,e G d d                      Z-e G d de-                      Z.ee-e.f         Z/e	ee/f         Z0 G d de          Z1d Z2dede	e3ef         fdZ4e G d d                      Z5dee#e6f         de5fdZ7de!de5fdZ8d e9de:fd!Z;d"ee	e3ef                  d#edee3         fd$Z<d%e9de3fd&Z=dS )'    NzEPlease install LangChain to use this feature: 'pip install langchain')	dataclass)AnyDictListOptionalSequenceUnioncast)UUID)BaseCallbackHandler)AgentActionAgentFinish)Document)	AIMessageBaseMessageFunctionMessageHumanMessageSystemMessageToolMessage)ChatGeneration	LLMResult)	BaseModel)default_client)get_model_paramswith_privacy_mode)Clientposthogc                   t    e Zd ZU eed<   	 eed<   	 ee         ed<   	 ee         ed<   	 edefd            Z	dS )SpanMetadataname
start_timeend_timeinputreturnc                 2    | j         sdS | j         | j        z
  S )Nr   )r"   r!   )selfs    Y/root/projects/butler/venv/lib/python3.11/site-packages/posthog/ai/langchain/callbacks.pylatencyzSpanMetadata.latency6   s     } 	1}t..    N)
__name__
__module____qualname__str__annotations__floatr   r   propertyr(    r)   r'   r   r   +   s|         
III7 uoC=</ / / / X/ / /r)   r   c                       e Zd ZU dZee         ed<   	 dZee         ed<   	 dZee	ee
f                  ed<   	 dZee         ed<   	 dZeee	ee
f                           ed<   dS )GenerationMetadataNprovidermodelmodel_paramsbase_urltools)r*   r+   r,   r4   r   r-   r.   r5   r6   r   r   r7   r8   r   r1   r)   r'   r3   r3   =   s         "Hhsm"""0E8C=-1L(4S>*111D"Hhsm"""9,0E8Dc3h()000&&r)   r3   c                      e Zd ZU dZeed<   	 eeee	e
ef                  ed<   	 eeee	e
ef                  ed<   	 ee         ed<   	 ee         ed<   	 eeeef                  ed<   	 eed<   	 eeef         ed	<   	 	 dLd
d
d
dd
ddee         deeee	e
ef                  deeee	e
ef                  deeeef                  dedeeeef                  fdZd
d
ddeeef         deeef         dedee         deeeef                  f
dZd
ddeeef         dedee         defdZd
ddededee         defd Zd
ddeeef         d!eee                  dedee         fd"Zd
ddeeef         d#ee         dedee         def
d$Zd
dd%ededee         ded&ef
d'Zd
dd(ededee         defd)Zd
ddededee         defd*Zd
d
ddeeeef                  d+ededee         deeeef                  ded&efd,Zd
dd-ededee         ded&ef
d.Zd
d
d/dededee         d0eee                  ded&efd1Z d
d
ddeeeef                  d2ededee         deeeef                  ded&efd3Z!d
dd4e"e#         dedee         defd5Z$d
d
d/dededee         d0eee                  ded&efd6Z%d
dd7e&dedee         ded&ef
d8Z'd
dd9e(dedee         ded&ef
d:Z)dLdedee         fd;Z*defd<Z+ded&efd=Z,	 dLdeeeef                  d>ededee         fd?Z-	 	 dMdeeef         ded!eeeeef                  ee         f         deeeef                  d@eeeef                  f
dAZ.ded&ee/         fdBZ0defdCZ1dededee         fdDZ2dedee         defdEZ3dededFe4dedee         f
dGZ5dedee         d(eeef         fdHZ6	 dLdededFe7d-eeef         dee         f
dIZ8	 dLdJededee         fdKZ9d
S )NCallbackHandlerzG
    The PostHog LLM observability callback handler for LangChain.
    _client_distinct_id	_trace_id_trace_input_trace_name_properties_runs_parent_treeNF)distinct_idtrace_id
propertiesprivacy_modegroupsclientrC   rD   rE   rF   rG   c                    |pt           }|t          d          || _        || _        || _        |pi | _        || _        |pi | _        i | _        i | _	        dS )a  
        Args:
            client: PostHog client instance.
            distinct_id: Optional distinct ID of the user to associate the trace with.
            trace_id: Optional trace ID to use for the event.
            properties: Optional additional metadata to use for the trace.
            privacy_mode: Whether to redact the input and output of the trace.
            groups: Optional additional PostHog groups to use for the trace.
        NzPostHog client is required)
r   
ValueErrorr;   r<   r=   r@   _privacy_mode_groupsrA   rB   )r&   rH   rC   rD   rE   rF   rG   posthog_clients           r'   __init__zCallbackHandler.__init__o   sn    &  1>!9:::%'!%+)|
r)   )parent_run_idmetadata
serializedinputsrun_idrO   rP   c                    |                      d|||           |                     ||            | j        ||||fi | d S )Non_chain_start)rR   _log_debug_event_set_parent_of_run_set_trace_or_span_metadata)r&   rQ   rR   rS   rO   rP   kwargss          r'   rU   zCallbackHandler.on_chain_start   so     	.fUUU666((	
 	
9?	
 	
 	
 	
 	
r)   )rO   outputsrZ   c                f    |                      d|||           |                     |||           d S )Non_chain_end)r[   rW   "_pop_run_and_capture_trace_or_span)r&   r[   rS   rO   rZ   s        r'   r]   zCallbackHandler.on_chain_end   s?     	nfmWUUU//wOOOOOr)   errorc                f    |                      d|||           |                     |||           d S )Non_chain_errorr`   r^   r&   r`   rS   rO   rZ   s        r'   rb   zCallbackHandler.on_chain_error   s@     	.USSS//uMMMMMr)   messagesc                    |                      d|||           |                     ||           d |D             } | j        |||fi | d S )Non_chat_model_start)re   c                 6    g | ]}|D ]}t          |          S r1   )_convert_message_to_dict).0rowmessages      r'   
<listcomp>z7CallbackHandler.on_chat_model_start.<locals>.<listcomp>   sC     
 
 
25QT
 
FM$W--
 
 
 
r)   rW   rX   _set_llm_metadata)r&   rQ   re   rS   rO   rZ   r#   s          r'   rg   z#CallbackHandler.on_chat_model_start   s     	!6=8 	 	
 	
 	
 	666
 
9A
 
 
 	z65CCFCCCCCr)   promptsc                    |                      d|||           |                     ||            | j        |||fi | d S )Non_llm_start)rp   rn   )r&   rQ   rp   rS   rO   rZ   s         r'   rr   zCallbackHandler.on_llm_start   s\     	nfmWUUU666z67EEfEEEEEr)   tokenr$   c                8    |                      d|||           dS )z?Run on new LLM token. Only available when streaming is enabled.on_llm_new_token)rs   N)rW   )r&   rs   rS   rO   rZ   s        r'   ru   z CallbackHandler.on_llm_new_token   s(     	0&-uUUUUUr)   responsec                h    |                      d||||           |                     |||           dS )z
        The callback works for both streaming and non-streaming runs. For streaming runs, the chain must set `stream_usage=True` in the LLM.
        
on_llm_end)rv   rZ   NrW   _pop_run_and_capture_generation)r&   rv   rS   rO   rZ   s        r'   rx   zCallbackHandler.on_llm_end   sL     	&-(6 	 	
 	
 	
 	,,V]HMMMMMr)   c                f    |                      d|||           |                     |||           d S )Non_llm_errorrc   ry   rd   s        r'   r|   zCallbackHandler.on_llm_error   s?     	nfm5QQQ,,V]EJJJJJr)   	input_strc                    |                      d|||           |                     ||            | j        ||||fi | d S )Non_tool_start)r}   rV   )r&   rQ   r}   rS   rO   rP   rZ   s          r'   r   zCallbackHandler.on_tool_start   sy     	V]i 	 	
 	
 	
 	666((	6=	
 	
<B	
 	
 	
 	
 	
r)   outputc                f    |                      d|||           |                     |||           d S )Non_tool_end)r   r^   )r&   r   rS   rO   rZ   s        r'   r   zCallbackHandler.on_tool_end  s?     	mV]6RRR//vNNNNNr)   )rO   tagsr   c                f    |                      d|||           |                     |||           d S )Non_tool_errorrc   r^   r&   r`   rS   rO   r   rZ   s         r'   r   zCallbackHandler.on_tool_error  s?     	ov}ERRR//uMMMMMr)   queryc                    |                      d|||           |                     ||            | j        ||||fi | d S )Non_retriever_start)r   rV   )r&   rQ   r   rS   rO   rP   rZ   s          r'   r   z"CallbackHandler.on_retriever_start"  sp     	2FMQVWWW666((v}	
 	
8>	
 	
 	
 	
 	
r)   	documentsc                f    |                      d|||           |                     |||           d S )Non_retriever_end)r   r^   )r&   r   rS   rO   rZ   s        r'   r   z CallbackHandler.on_retriever_end2  sJ     	 	 	
 	
 	
 	//yQQQQQr)   c                f    |                      d|||           |                     |||           dS )zRun when Retriever errors.on_retriever_errorrc   Nr^   r   s         r'   r   z"CallbackHandler.on_retriever_error?  sA     	2FMQVWWW//uMMMMMr)   actionc                    |                      d|||           |                     ||            | j        d|||fi | dS )zRun on agent action.on_agent_action)r   NrV   )r&   r   rS   rO   rZ   s        r'   r   zCallbackHandler.on_agent_actionL  s`     	/vVVV666((vv}WWPVWWWWWr)   finishc                f    |                      d|||           |                     |||           d S )Non_agent_finish)r   r^   )r&   r   rS   rO   rZ   s        r'   r   zCallbackHandler.on_agent_finishY  s@     	/vVVV//vNNNNNr)   c                 "    ||| j         |<   dS dS )zd
        Set the parent run ID for a chain run. If there is no parent, the run is the root.
        NrB   )r&   rS   rO   s      r'   rX   z"CallbackHandler._set_parent_of_rund  s%     $(5Df%%% %$r)   c                 ^    	 | j                             |           dS # t          $ r Y dS w xY w)z;
        Remove the parent run ID for a chain run.
        N)rB   popKeyError)r&   rS   s     r'   _pop_parent_of_runz"CallbackHandler._pop_parent_of_runk  sF    	!!&))))) 	 	 	DD	s    
,,c                 H    |}|| j         v r| j         |         }|| j         v |S )z3
        Finds the root ID of a chain run.
        r   )r&   rS   ids      r'   _find_root_runzCallbackHandler._find_root_runt  s9     D%%%"2&B D%%%	r)   r#   c                     |dnd}t          |fi |p|}t          ||t          j                    d           | j        |<   d S )Ntracespanr    r#   r!   r"   )_get_langchain_run_namer   timerA   )r&   rQ   r#   rS   rO   rZ   default_namerun_names           r'   rY   z+CallbackHandler._set_trace_or_span_metadata}  s\     #0"7wwV*:@@@@PL)49;;
 
 

6r)   invocation_paramsc                    t          |fi |pd}t          ||t          j                    d           }t          |t                    r2t          |          |_        |                    d          x}	r|	|_        t          |t                    r<|                    d          x}
r|
|_	        |                    d          x}r||_
        	 |d         d         }|||_        n# t          $ r Y nw xY w|| j        |<   d S )N
generationr   r8   ls_model_namels_providerrZ   openai_api_base)r   r3   r   
isinstancedictr   r6   getr8   r5   r4   r7   r   rA   )r&   rQ   rS   re   rP   r   rZ   r   r   r8   r5   r4   r7   s                r'   ro   z!CallbackHandler._set_llm_metadata  s4    +:@@@@PL'dikkD
 
 

 '.. 	)&67H&I&IJ#)--g666u )#(
 h%% 	/ _555u )#(
 #<<666x /&.
#	!(+,=>H#&.
# 	 	 	D	'
6s   C% %
C21C2c                     t          j                     }	 | j                            |          }n.# t          $ r! t                              d|            Y d S w xY w||_        |S )NzNo run metadata found for run )r   rA   r   r   logwarningr"   )r&   rS   r"   runs       r'   _pop_run_metadataz!CallbackHandler._pop_run_metadata  sr    9;;	*..((CC 	 	 	KKAAABBB44	  
s   0 'AAc                 F    | j         p|                     |          }|s|S |S N)r=   r   )r&   rS   rD   s      r'   _get_trace_idzCallbackHandler._get_trace_id  s.    >@T%8%8%@%@ 	Mr)   c                      ||| j         vr|S |S )zr
        Replace the parent run ID with the trace ID for second level runs when a custom trace ID is set.
        r   )r&   rD   rS   rO   s       r'   _get_parent_run_idz"CallbackHandler._get_parent_run_id  s"     $d>O)O)OOr)   c                 R   |                      |          }|                     |           |                     |          }|sd S t          |t                    r t
                              d| d           d S |                     |||||                     |||                     d S )NRun zB is a generation, but attempted to be captured as a trace or span.)	r   r   r   r   r3   r   r   _capture_trace_or_spanr   )r&   rS   rO   r[   rD   r   s         r'   r_   z2CallbackHandler._pop_run_and_capture_trace_or_span  s     %%f--'''$$V,, 	Fc-.. 	KKavaaa   F####HfmDD	
 	
 	
 	
 	
r)   r   c                    |dnd}|t          | j        | j        |j                  |j        |j        |d}|||d<   | j        r|                    | j                   t          |t                    rt          |          |d<   d|d<   n |t          | j        | j        |          |d<   | j        d	|d
<   | j                            | j        p|||| j                   d S )Nz	$ai_tracez$ai_span)$ai_trace_idz$ai_input_state$ai_latency$ai_span_name$ai_span_id$ai_parent_id	$ai_errorT$ai_is_errorz$ai_output_stateF$process_person_profilerC   eventrE   rG   )r   r;   rK   r#   r(   r    r@   updater   BaseException_stringify_exceptionr<   capturerL   )r&   rD   rS   r   r[   rO   
event_nameevent_propertiess           r'   r   z&CallbackHandler._capture_trace_or_span  s2    %2$9[[z
$0d0#)    ; X!
 
 $0=_- 	6##D$4555g}-- 	,@,I,I[)/3^,, 3Dd0'4 4/0 $:?67)3V'<	 	 	
 	
 	
 	
 	
r)   c                 R   |                      |          }|                     |           |                     |          }|sd S t          |t                    s t
                              d| d           d S |                     |||||                     |||                     d S )Nr   zC is not a generation, but attempted to be captured as a generation.)	r   r   r   r   r3   r   r   _capture_generationr   )r&   rS   rO   rv   rD   r   s         r'   rz   z/CallbackHandler._pop_run_and_capture_generation  s     %%f--'''$$V,, 	F#122 	KKbvbbb   F  ##HfmDD	
 	
 	
 	
 	
r)   c                 Z   |||j         ||j        |j        |j        t	          | j        | j        |j                  d|j        |j	        d}|j
        r#t	          | j        | j        |j
                  |d<   t          |t                    r*t          |          |d<   t          |          |d<   d|d<   nt          |          }|j        |d<   |j        |d	<   |j        |d
<   |j        |d<   |j        |d<   |j        d         }t          |d         t,                    rd |D             }	nd |D             }	t	          | j        | j        |	          |d<   | j        r|                    | j                   | j        d|d<   | j                            | j        p|d|| j                   d S )N   )r   r   r   r   z$ai_providerz	$ai_modelz$ai_model_parametersz	$ai_input$ai_http_statusr   z$ai_base_urlz	$ai_toolsr   r   Tr   z$ai_input_tokensz$ai_output_tokensz$ai_cache_creation_input_tokensz$ai_cache_read_input_tokensz$ai_reasoning_tokensc                 \    g | ])}t          t          t          |          j                  *S r1   )ri   r
   r   rl   rj   r   s     r'   rm   z7CallbackHandler._capture_generation.<locals>.<listcomp>G  s=       " -T.*-M-M-UVV  r)   c                 ,    g | ]}t          |          S r1   )_extract_raw_esponser   s     r'   rm   z7CallbackHandler._capture_generation.<locals>.<listcomp>L  s.       9C(44  r)   z$ai_output_choicesFr   z$ai_generationr   )r    r4   r5   r6   r   r;   rK   r#   r(   r7   r8   r   r   _get_http_statusr   _parse_usageinput_tokensoutput_tokenscache_write_tokenscache_read_tokensreasoning_tokensgenerationsr   r@   r   r<   r   rL   )
r&   rD   rS   r   r   rO   r   usagegeneration_resultcompletionss
             r'   r   z#CallbackHandler._capture_generation  s.    %! X*L$'$4*4<9KSYWW";L
 
 9 	,="	- -[) fm,, 	2B62J2J./,@,H,H[)/3^,, !((E383E/0494G01( >? ?D>U:;7<7M34 !' 22 6+B/@@  &7  
 GX   6Gd0+6 612  	6##D$4555$:?67)5X"'<	 	 	
 	
 	
 	
 	
r)   r   c           
          t                               d| dt          |          d d          dt          |          d d          d|            d S )NzEvent: z
, run_id:    z, parent_run_id: z
, kwargs: )r   debugr-   )r&   r   rS   rO   rZ   s        r'   rW   z CallbackHandler._log_debug_event`  sk     			xjxxCKKOxxcR_N`N`acbcacNdxxpvxx	
 	
 	
 	
 	
r)   r   )NN):r*   r+   r,   __doc__r   r.   r   r	   r-   intr/   r   r   r   RunMetadataStorageboolrN   rU   r]   r   rb   r   r   rg   rr   ru   r   rx   r|   r   r   listr   r   r   r   r   r   r   r   r   r   rX   r   r   rY   ro   RunMetadatar   r   r   r_   r   r   rz   r3   r   rW   r1   r)   r'   r:   r:   O   sH          OOO"5c5$!678888>c3t345555_3-?#/$sCx.))))8jtTz"""" $( ?C;?/3"+/    eCeT$9:;	
 5c5$!678 T#s(^,  c3h(   J )--1
 
 
cN
 S#X

 
  ~
 4S>*
 
 
 
* )-	P 	P 	Pc3h	P 		P
  ~	P 	P 	P 	P 	P  )-	N 	N 	N	N 		N
  ~	N 	N 	N 	N 	N" )-D D DcND tK()D
 D  ~D D D D0 )-F F FcNF cF
 F  ~F F F F F$ )-	V 	V 	V	V 		V
  ~	V 	V 
	V 	V 	V 	V  )-N N NN 	N
  ~N N N N N* )-	K 	K 	K	K 		K
  ~	K 	K 	K 	K 	K" )--1
 
 
T#s(^,
 

 
  ~
 4S>*
 
 

 
 
 
. )-	O 	O 	O	O 		O
  ~	O 	O 
	O 	O 	O 	O  )-$(
N 
N 
N
N 	
N
  ~
N tCy!
N 
N 

N 
N 
N 
N$ )--1
 
 
T#s(^,
 

 
  ~
 4S>*
 
 

 
 
 
* )-R R RH%R 	R
  ~R R R R R$ )-$(N N NN 	N
  ~N tCy!N N 
N N N N$ )-X X XX 	X
  ~X X 
X X X X$ )-	O 	O 	O	O 		O
  ~	O 	O 
	O 	O 	O 	O6 6 6htn 6 6 6 6    T d     )-
 
T#s(^,
 
 	

  ~
 
 
 
& .26:( (cN( ( T#s(^,d3i78	(
 4S>*( $DcN3( ( ( (< +1F    D    %):B4.   

+3D>
DG
 
 
 
*'
'
 '
 	'

 '
  ~'
 '
 '
 '
R

  ~
 	=01	
 
 
 
< )-E
 E
E
 E
  	E

 i./E
  ~E
 E
 E
 E
V )-		
 	
	
 	
  ~		
 	
 	
 	
 	
 	
r)   r:   c                     | j         6| j                                         dk    r| j                                         S t          | d          r| j        j        S dS )z<Extract the response from the last response of the LLM call.N rl   )textstriphasattrrl   additional_kwargs)last_responses    r'   r   r   l  s`     %-*<*B*B*D*D*J*J!'')))			*	* $66 rr)   rl   r$   c                    t          | t                    rd| j        d}nt          | t                    rd| j        d}n|t          | t                    rd| j        d}n\t          | t
                    rd| j        d}n<t          | t                    rd| j        d}n| j        t          | j                  d}| j	        r|
                    | j	                   |S )Nuser)rolecontent	assistantsystemtoolfunction)r   r   r   r   r   r   r   typer-   r   r   )rl   message_dicts     r'   ri   ri   y  s    '<(( O &7?CC	GY	'	' 	O +HH	G]	+	+ O (W_EE	G[	)	) O &7?CC	G_	-	- O *wGG 'W_9M9MNN  7G5666r)   c                   ~    e Zd ZU ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   dS )
ModelUsager   r   r   r   r   N)r*   r+   r,   r   r   r.   r1   r)   r'   r   r     sb         3-C=    %%%}$$$sm#####r)   r   r   c                 Z   t          | t                    r| j        } g d}i |D ]<\  }}|| v r3| |         }t          |t                    rt	          |          n|}||<   =d| v rWt          | d         t
                    r<| d                             d          d<   | d                             d          d<   d| v r9t          | d         t
                    r| d                             d          d<   dd	d
ddd}t          di fd|                                D             S )N))r   r#   )r   r   cache_creation_input_tokenscache_writecache_read_input_tokens
cache_read)prompt_token_countr#   )candidates_token_countr   )cached_content_token_countr  )thoughts_token_count	reasoning)inputTokenCountr#   )outputTokenCountr   )cacheCreationInputTokenCountr  )cacheReadInputTokenCountr  )prompt_tokensr#   )completion_tokensr   r   r  )input_token_countr#   )generated_token_countr   input_token_detailscache_creationr  r  output_token_detailsr	  r   r   r   r   r   )r#   r   r  r  r	  c                 F    i | ]\  }}|                     |          pd S )r   )r   )rj   
mapped_keydataclass_keyparsed_usages      r'   
<dictcomp>z&_parse_usage_model.<locals>.<dictcomp>  sB     
 
 
)
M <++J77<1
 
 
r)   r1   )	r   r   __dict__r   sumr   r   r   items)r   conversion_list	model_keytype_keycaptured_countfinal_countfield_mappingr  s          @r'   _parse_usage_modelr#    s    %##   O4 L. 	1 	1	8"9-N nd33$N####  &1L" %%*#$d+ +% ',,A&B&F&FGW&X&X]#%*+@%A%E%El%S%S\" &&:$%t, ,& %**@$A$E$Ek$R$R[!  !+)' M   
 
 
 
-:-@-@-B-B
 
 
  r)   rv   c                    ddg}t          d d d d d           }| j        ;|D ]8}| j                            |          rt          | j        |                   } n9t	          | d          r| j        D ]}d|v rt          |d                   } n|D ]}|j        r%d|j        v rt          |j        d                   } nt          |di           }t          |di           }t          |t                    r|                    dd           nd }t          |t                    r|                    dd           nd }	t          |dd           }
|p|	p|
}|rt          |          } nՌ|S )	Ntoken_usager   )r   r   r   r   r   r   usage_metadatarl   response_metadataz amazon-bedrock-invocationMetrics)
r   
llm_outputr   r#  r   r   generation_infogetattrr   r   )rv   llm_usage_keys	llm_usagekeyr   generation_chunkmessage_chunkr'  bedrock_anthropic_usagebedrock_titan_usageollama_usagechunk_usages               r'   r   r     s   #W-N&  I &! 	 	C"&&s++ .x/B3/GHH	 x'' '". &	 &	J*$$.z'/BCC	$. ! ! #3 $(8(HHH 2(89IJ! !I E '(8)R H H$+M;NPR$S$S! ""3T::%))'4888 ( ""3T::%)):D    $  '!#3T   
 ,R/BRl    2; ? ?IE r)   r`   c           	      F    t          | dt          | dd                    }|S )Nstatus_codecoder   )r*  )r`   r5  s     r'   r   r     s'     %vq0I0IJJKr)   rQ   rZ   c                     d|v r|d         |d         S | dS 	 | d         S # t           t          f$ r Y nw xY w	 | d         d         S # t           t          f$ r Y nw xY wdS )aw  Retrieve the name of a serialized LangChain runnable.

    The prioritization for the determination of the run name is as follows:
    - The value assigned to the "name" key in `kwargs`.
    - The value assigned to the "name" key in `serialized`.
    - The last entry of the value assigned to the "id" key in `serialized`.
    - "<unknown>".

    Args:
        serialized (Optional[Dict[str, Any]]): A dictionary containing the runnable's serialized data.
        **kwargs (Any): Additional keyword arguments, potentially including the 'name' override.

    Returns:
        str: The determined name of the Langchain runnable.
    r    Nr   r   )r   	TypeError)rQ   rZ   s     r'   r   r   $  s    $ F6N6f~t&!!i    $##i    4s   " 66A AA	exceptionc                 ^    t          |           }|r| j        j         d| S | j        j        S )Nz: )r-   	__class__r*   )r9  descriptions     r'   r   r   E  s<    i..K @%.??+???''r)   )>	langchainImportErrorModuleNotFoundErrorloggingr   dataclassesr   typingr   r   r   r   r   r	   r
   uuidr   langchain.callbacks.baser   langchain.schema.agentr   r   langchain_core.documentsr   langchain_core.messagesr   r   r   r   r   r   langchain_core.outputsr   r   pydanticr   r   r   posthog.ai.utilsr   r   posthog.clientr   	getLoggerr   r   r3   r   r   r:   r   r-   ri   r   r   r#  r   r   r   r   r   r   r1   r)   r'   <module>rM     s     

O  
   ! ! ! ! ! !                        8 8 8 8 8 8 ; ; ; ; ; ; ; ; - - - - - -                = < < < < < < <       " " " " " " @ @ @ @ @ @ @ @ ! ! ! ! ! !g	"" / / / / / / / /" 
' 
' 
' 
' 
' 
' 
' 
' L"445$+, Z
 Z
 Z
 Z
 Z
) Z
 Z
 Z
z
 
 
k d38n    * $ $ $ $ $ $ $ $ED!EE E E EP:9 : : : : :zM c    c3h(47c]   B(M (c ( ( ( ( ( (s    