o
    i                     @  s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	l
mZ dd
l
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl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! d!e!Z(d"S )#'LLMObs integration for vLLM V1 library.    )annotations)Any)Optional)PROVIDER_NAME)	TAG_MODEL)TAG_PROVIDER)LatencyMetrics)RequestData)parse_prompt_to_messages)INPUT_DOCUMENTS)INPUT_MESSAGES)INPUT_TOKENS_METRIC_KEY)METADATA)METRICS)
MODEL_NAME)MODEL_PROVIDER)OUTPUT_MESSAGES)OUTPUT_TOKENS_METRIC_KEY)OUTPUT_VALUE)	SPAN_KIND)TIME_IN_MODEL_DECODE_METRIC_KEY)"TIME_IN_MODEL_INFERENCE_METRIC_KEY) TIME_IN_MODEL_PREFILL_METRIC_KEY)TIME_IN_QUEUE_METRIC_KEY)TIME_TO_FIRST_TOKEN_METRIC_KEY)TOTAL_TOKENS_METRIC_KEY)BaseLLMIntegration)Message)Document)Spanc                   @  sx   e Zd ZdZdZh dZeeee	e
dZd$ddZd%ddZd&d'ddZ	d&d'ddZ	d&d'ddZ		d(d)d"d#ZdS )*VLLMIntegrationr   vllm>   ntop_p	lora_name
max_tokenstemperatureembedding_dimfinish_reasonnum_cached_tokens)time_to_first_tokentime_in_queuetime_in_model_prefilltime_in_model_decodetime_in_model_inferencespanr    kwargsr   returnNonec                 K  s.   | d}|r|t| |tt dS dS )zSet base tags on vLLM spans.
model_nameN)get_set_tag_strr   r   r   )selfr0   r1   r4    r8   U/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/llmobs/_integrations/vllm.py_set_base_span_tags>   s
   
z#VLLMIntegration._set_base_span_tagsdatar
   dict[str, Any]c                 C  s0   i }| j D ]}t||d}|dur|||< q|S )z#Extract metadata from request data.N)_METADATA_FIELDSgetattr)r7   r;   mdkeyvalr8   r8   r9   _build_metadataE   s   
zVLLMIntegration._build_metadataNlatency_metricsOptional[LatencyMetrics]c           	      C  sh   t |jpd}t |jpd}t|t|t|| i}|r2| j D ]\}}t||d}|dur1|||< q|S )z2Build token and latency metrics from request data.r   N)	intinput_tokensoutput_tokensr   r   r   _LLMOBS_LATENCY_METRIC_MAPitemsr>   )	r7   r;   rC   itotmetricsattrconstant_keyvaluer8   r8   r9   _build_metricsP   s   zVLLMIntegration._build_metricsc              	   C  s   t dt| |t| ||i}g }|jrt|jdg}n|jr(tt|jdg}|r.||t	< |j
}|j}|r?d| d| dnd| d|t< |S )z.Build LLMObs context for embedding operations.	embedding)text[z! embedding(s) returned with size ]z embedding(s) returned])r   r   rB   r   rP   promptr   input_strr   num_embeddingsr(   r   )r7   r;   rC   ctxdocsnum_embdimr8   r8   r9   _build_embedding_contextb   s    
 z(VLLMIntegration._build_embedding_contextc              	   C  sP   t dt| |t| ||i}|jrt|j|t< |jr&t	d|jdg|t
< |S )z/Build LLMObs context for completion operations.llm	assistant)rolecontent)r   r   rB   r   rP   rU   r   r   output_textr   r   )r7   r;   rC   rY   r8   r8   r9   _build_completion_context}   s   
z)VLLMIntegration._build_completion_context args	list[Any]responseOptional[Any]	operationrW   c           	      C  sr   | d}|du rdS | d}|dkr| ||n| ||}|tp&d|t< |tp/d|t< || dS )zSet LLMObs tags on span.request_dataNrC   rQ   rd   )	r5   r]   rc   get_tagr   r   r   r   _set_ctx_items)	r7   r0   re   r1   rg   ri   r;   rC   rY   r8   r8   r9   _llmobs_set_tags   s   
	

z VLLMIntegration._llmobs_set_tags)r0   r    r1   r   r2   r3   )r;   r
   r2   r<   )N)r;   r
   rC   rD   r2   r<   )Nrd   )r0   r    re   rf   r1   r<   rg   rh   ri   rW   r2   r3   )__name__
__module____qualname____doc___integration_namer=   r   r   r   r   r   rH   r:   rB   rP   r]   rc   rm   r8   r8   r8   r9   r!   %   s(    

r!   N))rq   
__future__r   typingr   r   (ddtrace.contrib.internal.vllm._constantsr   r   r   (ddtrace.contrib.internal.vllm.extractorsr	   r
   r   ddtrace.llmobs._constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   !ddtrace.llmobs._integrations.baser   ddtrace.llmobs.typesr   ddtrace.llmobs.utilsr   ddtrace.tracer    r!   r8   r8   r8   r9   <module>   s@    