
    j*                         d dl Z d dl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 erd dlmZ  G d	 d
e      ZdddefdZddZdddee   fdZy)    N)TYPE_CHECKINGAnyDictOptionalType)override)verbose_logger)BaseLLMObsOTELAttributessafe_set_attribute)
safe_dumps)StandardLoggingPayload)Spanc                   V    e Zd Zeedddeeef   fd              Zeedd              Z	y)ArizeOTELAttributesspanr   kwargsc           	         ddl m}m} |j                  d      }|r|d   }t	        | |j
                  |j                  dd             t        |      D ]m  \  }}|j                   d| }t	        | | d|j                   |j                  d             t	        | | d|j                   |j                  dd             o y y )	Nr   MessageAttributesSpanAttributesmessagescontent .role)
*litellm.integrations._types.open_inferencer   r   getr   INPUT_VALUE	enumerateLLM_INPUT_MESSAGESMESSAGE_ROLEMESSAGE_CONTENT)	r   r   r   r   r   last_messageidxmsgprefixs	            z/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/integrations/arize/_utils.pyset_messagesz ArizeOTELAttributes.set_messages   s    	

 ::j) #B<L**  B/ &h/S*==>auE"VHA&7&D&D%EFPV #ha 1 A ABCGGIr* 0     c           	         ddl m}m} t        |j	                  dg             D ]  \  }}|j	                  di       }t        | |j                  |j	                  dd             |j                   d| }t        | | d|j                   |j	                  d             t        | | d|j                   |j	                  dd              y	)
z
        Sets output message attributes on the span from the LLM response.

        Args:
            span: The OpenTelemetry span to set attributes on
            response_obj: The response object containing choices with messages
        r   r   choicesmessager   r   r   r   N)
r   r   r   r    r   r   OUTPUT_VALUELLM_OUTPUT_MESSAGESr"   r#   )r   response_objr   r   r%   choiceresponse_messager'   s           r(   set_response_output_messagesz0ArizeOTELAttributes.set_response_output_messages6   s    	

 %\%5%5i%DEKC%zz)R8++ $$Y3 '::;1SEBF(!-::;< $$V,
 (!-==>? $$Y3 Fr*   Nr   r   )
__name__
__module____qualname__staticmethodr   r   strr   r)   r3    r*   r(   r   r      sO    6 4S>   @     r*   r   r   r   optional_paramsc           
         ddl m}m}m} |j	                  d      }|rt        |      D ]  \  }}|j	                  d      }|s|j                   d| }	t        | |	 d|j                   |j	                  d             t        | |	 d|j                   |j	                  d             t        | |	 d|j                   t        j                  |j	                  d                    |j	                  d	      }
|
rPt        |
      D ]A  \  }}|j                   d| }	t        | |	 d|j                   |j	                  d             C y
y
)z8Helper to set tool and function call attributes on span.r   )r   r   ToolCallAttributestoolsfunctionr   namedescription
parameters	functionsN)r   r   r   r=   r   r    	LLM_TOOLSr   	TOOL_NAMETOOL_DESCRIPTIONTOOL_PARAMETERSjsondumpsMESSAGE_TOOL_CALLSTOOL_CALL_FUNCTION_NAME)r   r;   r   r   r=   r>   r%   toolr?   r'   rC   s              r(   _set_tool_attributesrM   [   s_     (E"5)ICxx
+H&0013%8F.":":!;<hll6>R (!N;;<=]+
 (!N::;<

8<<56 *&  ##K0I&y1MC)<<=QseDF(!.FFGHV$ 2 r*   c           	      .   ddl m}m} t        |d      syt	        |j                  dg             D ]  \  }}|j                  di       }t        | |j                  |j                  dd             |j                   d	| }t        | | d	|j                   |j                  d
             t        | | d	|j                   |j                  dd              |j                  dg       }|r4t	        |      D ]%  \  }	}
|j                   d	|	 }t        |
d      s%|
j                  }|dk(  rQt        |
d      rE|
j                  D ]5  }t        |d      st        | | d	|j                   |j                         7 |dk(  st        |
d      sd}|
j                  }|r t!        |      dkD  r|d   }t#        |dd      }t#        |
d
d      }t        | |j                  |       t        | | d	|j                   |       t        | | d	|j                   |       ( |xr |j                  d      }|rt        | |j$                  |j                  d             |j                  d      xs |j                  d      }|rt        | |j&                  |       |j                  d      xs |j                  d      }|rt        | |j(                  |       |j                  di       j                  d      }|rt        | |j*                  |       yyy)zAHelper to set response output and token usage attributes on span.r   r   r   Nr,   r-   r   r   r   r   outputtype	reasoningsummarytext	assistantusagetotal_tokenscompletion_tokensoutput_tokensprompt_tokensinput_tokensoutput_tokens_detailsreasoning_tokens)r   r   r   hasattrr    r   r   r.   r/   r"   r#   rP   rR   MESSAGE_REASONING_SUMMARYrS   r   lengetattrLLM_TOKEN_COUNT_TOTALLLM_TOKEN_COUNT_COMPLETIONLLM_TOKEN_COUNT_PROMPT,LLM_TOKEN_COUNT_COMPLETION_DETAILS_REASONING)r   r0   r   r   r%   r1   r2   r'   output_itemsiitem	item_typerR   message_contentcontent_listfirst_contentmessage_rolerU   rW   rY   r\   s                        r(   _set_response_attributesrm      s   
 <' !1!1)R!@AV!::i4''  B/	

 #667q>ha)6678  (	

 	ha)99:;  B/	
 B&  ##Hb1L .GAt&::;1QC@FtV$ II	+i0H#'<<"7F3. $#)(!,=,W,W+X Y ' $0 )+i0H&(O#'<<L#L(9A(=(4Q*1-*L#*4#EL&t^-H-H/Z&txq9J9Z9Z8[-\^mn&txq9J9W9W8X-Y[gh+ /. 6\--g6E4!E!EuyyQ_G`a!II&9:Xeii>Xt^%N%NPab		/2Oeii6Ot^%J%JMZ 99%<bAEEFXYt^%`%`brs  r*   
attributesc           
         ddl m}m} 	 |j                  di       }|j                  di       }|j                  d      }|t	        d      |r|j                  d      nd}	|	 t        | |j                  t        |	             |j                  d	      r&t        | |j                  |j                  d	             t        | d
|d          t        | |j                  |j                  dd             |j                  d      rt        | d|j                  d             |j                  d      rt        | d|j                  d             |j                  d      rt        | d|j                  d             t        | dt        |j                  dd                   |j                  d      rt        | d|j                  d             |r-|j                  d      rt        | d|j                  d             |r-|j                  d	      rt        | d|j                  d	             t        | |j                  |j                  j                         |j                  | |       t        | |       |r|j                  d      nd}
|
r[t        | |j                   t        |
             |
j                  d      r*|
j                  d      }|t        | |j"                  |       t%        | |       y# t&        $ rD}t)        j*                  d|        t-        | d       r| j/                  |       Y d}~yY d}~yd}~ww xY w)!zc
    Populates span with OpenInference-compliant LLM attributes for Arize and Phoenix tracing.
    r   )OpenInferenceSpanKindValuesr   r;   litellm_paramsstandard_logging_objectNz+standard_logging_object not found in kwargsmetadatamodelzllm.request.type	call_typecustom_llm_providerUnknown
max_tokenszllm.request.max_tokenstemperaturezllm.request.temperaturetop_pzllm.request.top_pzllm.is_streamingstreamFuserzllm.useridzllm.response.idzllm.response.model)r   r;   model_parameters)r   r0   z=[Arize/Phoenix] Failed to set OpenInference span attributes: record_exception)r   rp   r   r   
ValueErrorr   METADATAr   LLM_MODEL_NAMELLM_PROVIDERr9   OPENINFERENCE_SPAN_KINDLLMvaluer)   rM   LLM_INVOCATION_PARAMETERSUSER_IDrm   	Exceptionr	   errorr]   r   )r   r   r0   rn   rp   r   r;   rq   standard_logging_payloadrs   model_paramsuser_ides                r(   set_attributesr      s   
@% **%6;$4b9EKZZ%F
  $+JKK ( %((4 	
 t^%<%<j>RS::gt^%B%BFJJwDWX4!35Mk5Z[4!<!<n>P>PQfhq>rs|,t%=?R?RS_?`a}-t%>@S@STa@bcw't%8/:M:Mg:VW4!3S9L9LXW\9]5^_v&tZ1D1DV1LML,,T2t%68H8H8NOL,,W5t%9<;K;KG;TU4!G!GIdIhIhInInof-$H ( %(();< 	
 t^%M%MzZfOgh'&**62&&t^-C-CWM dF %KA3O	
 4+,!!!$$ -	%s   K(K3 3	M <5L;;M r4   )rH   typingr   r   r   r   r   typing_extensionsr   litellm._loggingr	   Elitellm.integrations.opentelemetry_utils.base_otel_llm_obs_attributesr
   r   *litellm.litellm_core_utils.safe_json_dumpsr   litellm.types.utilsr   opentelemetry.tracer   r   dictrM   rm   r   r:   r*   r(   <module>r      sr     ; ; & + B 6(F2 FR%v % %PAtHK%
K%489Q4RK%r*   