
    j                     D   d 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
mZ ddlmZ ddlmZ ddlmZ dd	lmZ  G d
 d          Zdddddee         dee         dee         defdZdddddddddee         dee         dee         dee         dee         dee         deeeed         f                  defdZddddddddddddddddee         dee         dee         dee         dee         dee         dee         d eeeef                  dee         dee         d!eeeef                  d"eeeef                  d#ee         dee
         defd$Zd%edee         fd&Zdeeeef                  deeeef                  fd'Zded(ed)         defd*ZdS )+a  Span attribute management for Langfuse OpenTelemetry integration.

This module defines constants and functions for managing OpenTelemetry span attributes
used by Langfuse. It provides a structured approach to creating and manipulating
attributes for different span types (trace, span, generation) while ensuring consistency.

The module includes:
- Attribute name constants organized by category
- Functions to create attribute dictionaries for different entity types
- Utilities for serializing and processing attribute values
    N)datetime)AnyDictLiteralOptionalUnion)ObservationTypeGenerationLikeObservationTypeSpanLike)EventSerializer)MapValue)PromptClient)	SpanLevelc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#S )$LangfuseOtelSpanAttributeszlangfuse.trace.namezuser.idz
session.idzlangfuse.trace.tagszlangfuse.trace.publiczlangfuse.trace.metadatazlangfuse.trace.inputzlangfuse.trace.outputzlangfuse.observation.typezlangfuse.observation.metadatazlangfuse.observation.levelz#langfuse.observation.status_messagezlangfuse.observation.inputzlangfuse.observation.outputz*langfuse.observation.completion_start_timezlangfuse.observation.model.namez%langfuse.observation.model.parametersz"langfuse.observation.usage_detailsz!langfuse.observation.cost_detailsz langfuse.observation.prompt.namez#langfuse.observation.prompt.versionzlangfuse.environmentzlangfuse.releasezlangfuse.versionzlangfuse.internal.as_rootzlangfuse.experiment.idzlangfuse.experiment.namezlangfuse.experiment.descriptionzlangfuse.experiment.metadatazlangfuse.experiment.dataset.idzlangfuse.experiment.item.idz(langfuse.experiment.item.expected_outputz!langfuse.experiment.item.metadataz,langfuse.experiment.item.root_observation_idN)%__name__
__module____qualname__
TRACE_NAMETRACE_USER_IDTRACE_SESSION_ID
TRACE_TAGSTRACE_PUBLICTRACE_METADATATRACE_INPUTTRACE_OUTPUTOBSERVATION_TYPEOBSERVATION_METADATAOBSERVATION_LEVELOBSERVATION_STATUS_MESSAGEOBSERVATION_INPUTOBSERVATION_OUTPUT!OBSERVATION_COMPLETION_START_TIMEOBSERVATION_MODELOBSERVATION_MODEL_PARAMETERSOBSERVATION_USAGE_DETAILSOBSERVATION_COST_DETAILSOBSERVATION_PROMPT_NAMEOBSERVATION_PROMPT_VERSIONENVIRONMENTRELEASEVERSIONAS_ROOTEXPERIMENT_IDEXPERIMENT_NAMEEXPERIMENT_DESCRIPTIONEXPERIMENT_METADATAEXPERIMENT_DATASET_IDEXPERIMENT_ITEM_IDEXPERIMENT_ITEM_EXPECTED_OUTPUTEXPERIMENT_ITEM_METADATA#EXPERIMENT_ITEM_ROOT_OBSERVATION_ID     k/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/langfuse/_client/attributes.pyr   r      s        &JM#&J*L.N(K*L 3:4!F46 )U%9#J  DB@!F )K G G *G -M0O>8<6&P#B*X'''r7   r   )inputoutputpublicr9   r:   r;   returnc                     t           j        t          |           t           j        t          |          t           j        |i}d |                                D             S )Nc                     i | ]
\  }}|||S Nr6   .0kvs      r8   
<dictcomp>z+create_trace_attributes.<locals>.<dictcomp>W       AAATQ1=Aq===r7   )r   r   
_serializer   r   items)r9   r:   r;   
attributess       r8   create_trace_attributesrI   K   sV     	#.
50A0A"/F1C1C"/J BAZ--//AAAAr7   span)metadatar9   r:   levelstatus_messageversionobservation_typerK   rL   rM   rN   rO   eventc                 &   t           j        |t           j        |t           j        |t           j        |t           j        t          |          t           j        t          |          it          | d          }d |	                                D             S )Nobservationc                     i | ]
\  }}|||S r?   r6   r@   s      r8   rD   z*create_span_attributes.<locals>.<dictcomp>p   rE   r7   )
r   r   r   r   r+   r    rF   r!   _flatten_and_serialize_metadatarG   )rK   r9   r:   rL   rM   rN   rO   rH   s           r8   create_span_attributesrU   Z   s     	#35E"4e"=~"*G"4j6G6G"5z&7I7I *(M
B
BJ BAZ--//AAAAr7   
generation)namecompletion_start_timerK   rL   rM   rN   modelmodel_parametersr9   r:   usage_detailscost_detailspromptrO   rW   rX   rY   rZ   r[   r\   r]   c                 v   t           j        |t           j        |t           j        |t           j        |t           j        t          |          t           j        t          |	          t           j        |t           j	        |r|j
        s|j        nd t           j        |r|j
        s|j        nd t           j        t          |
          t           j        t          |          t           j        t          |          t           j        t          |          it%          |d          }d |                                D             S )NrR   c                     i | ]
\  }}|||S r?   r6   r@   s      r8   rD   z0create_generation_attributes.<locals>.<dictcomp>   rE   r7   )r   r   r   r   r+   r    rF   r!   r#   r'   is_fallbackrW   r(   rN   r%   r&   r"   r$   rT   rG   )rW   rX   rK   rL   rM   rN   rY   rZ   r9   r:   r[   r\   r]   rO   rH   s                  r8   create_generation_attributesra   s   s!   $ 	#35E"4e"=~"*G"4j6G6G"5z&7I7I"4e":= ,=FKK"=@ ,@v~~"<j>W>W";Z=U=U"Dj!G
 G
 	#?B
 B
', *(M
B
B-J2 BAZ--//AAAAr7   objc                 j    | t          | t                    r| S t          j        | t                    S )N)cls)
isinstancestrjsondumpsr   )rb   s    r8   rF   rF      s/    
{jc**{
:c////r7   c                     | d S i dt           dt          dd ffd|                                 D ]\  }} t          |          |           S )Npathvaluer<   c                     t          |t                    r-|                                D ]\  }} |  d| |           d S t          |          }||| <   d S d S )N.)re   dictrG   rF   )rj   rk   
nested_keynested_valueserialized_valueflatten_valueflattened_metadatas        r8   rr   z=_flatten_and_serialize_metadata_values.<locals>.flatten_value   s    eT"" 	,1KKMM D D(
L44
44lCCCCF%e,,''7t$$$ ('r7   )rf   r   rG   )rK   keyrk   rr   rs   s      @@r8   &_flatten_and_serialize_metadata_valuesru      s     t)+
8C 
8 
8 
8 
8 
8 
8 
8 
8 
8 nn&& ' '
Uc#hh&&&&r7   type)rR   tracec                 P   |dk    rt           j        nt           j        }i }t          | t                    st          |           ||<   n]|                                 D ]H\  }}t          |t                    st          |t                    r|nt          |          || d| <   I|S )NrR   rm   )	r   r   r   re   rn   rF   rG   rf   int)rK   rv   prefixmetadata_attributesrt   rk   s         r8   rT   rT      s    
 =   	#77'6  =?h%% &0&:&:F##"..** 	 	JC eS))'-7s-C-C'&&  6 1 1C 1 122 r7   ) __doc__rg   r   typingr   r   r   r   r   langfuse._client.constantsr	   r
   langfuse._utils.serializerr   langfuse.apir   langfuse.modelr   langfuse.typesr   r   boolrn   rI   rf   rU   ry   floatra   rF   ru   rT   r6   r7   r8   <module>r      s  
 
        6 6 6 6 6 6 6 6 6 6 6 6 6 6        7 6 6 6 6 6 ! ! ! ! ! ! ' ' ' ' ' ' $ $ $ $ $ $-Y -Y -Y -Y -Y -Y -Y -Yd   !	B B BC=B SMB TN	B
 
B B B B" # !%$(! 	B B BsmB C=B SM	B
 IB SMB c]B %ww'778B 
B B B B6 04"!%$(!6: .2/3%)@L*B *B *B
3-*B $H-*B sm	*B
 I*B SM*B c]*B C=*B tCM23*B C=*B SM*B DcN+*B 4U
+,*B \"*B <=*B  
!*B *B *B *BZ0C 0HSM 0 0 0 0tCH~&d38n   4 !78	     r7   