o
    پij                     @  sR   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 eG dd dZdS )    )annotations)AnyDictListMappingOptionalfinal)PromptTokensDetails	UsageInfoc                   @  sV   e Zd ZdZedddZe			ddddZe		ddddZe	d d!ddZdS )"UsageProcessorz>Stateless helpers that turn raw token counts into a UsageInfo.countintreturnOptional[PromptTokensDetails]c                 C  s   | dkr	t | dS dS )zAReturn PromptTokensDetails only when count > 0 (keeps JSON slim).r   )cached_tokensN)r	   )r    r   a/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/entrypoints/openai/usage_processor.py_details_if_cached   s   z!UsageProcessor._details_if_cached   F	responsesList[Dict[str, Any]]	n_choicesenable_cache_reportboolr
   c                   sx   t dd  D }t  fddtdt |D }d }|r4t  fddtdt |D }t|}tj|||dS )Nc                 s  s    | ]	}|d  d V  qdS )	meta_infocompletion_tokensNr   ).0rr   r   r   	<genexpr>   s    z:UsageProcessor.calculate_response_usage.<locals>.<genexpr>c                 3  s     | ]} | d  d V  qdS )r   prompt_tokensNr   r   ir   r   r   r      s
    
r   c                 3  s$    | ]} | d   ddV  qdS )r   r   r   N)getr    r"   r   r   r       s
    
r   r   r   )sumrangelenr   r   calculate_token_usage)r   r   r   r   r   cached_detailscached_totalr   r"   r   calculate_response_usage   s   
z'UsageProcessor.calculate_response_usager   Mapping[int, int]r   r   c                   s^   t  fdd|  D }t | }|r%tt  fdd| D nd }tj|||dS )Nc                 3  $    | ]\}}|  d kr|V  qdS r   Nr   r   idxtokr   r   r   r   5   s    z;UsageProcessor.calculate_streaming_usage.<locals>.<genexpr>c                 3  r-   r.   r   r/   r2   r   r   r   <   s   " r$   )r%   itemsvaluesr   r   r(   )r   r   r   r   r   total_prompt_tokenstotal_completion_tokensr)   r   r2   r   calculate_streaming_usage,   s   	z(UsageProcessor.calculate_streaming_usageNc                 C  s   t | || | |dS )z!Calculate token usage information)r   r   total_tokensprompt_tokens_details)r
   r$   r   r   r   r(   H   s   z$UsageProcessor.calculate_token_usage)r   r   r   r   )r   F)r   r   r   r   r   r   r   r
   )F)r   r,   r   r,   r   r,   r   r   r   r   r   r
   )N)r   r   r   r   r   r   r   r
   )	__name__
__module____qualname____doc__staticmethodr   r+   r7   r(   r   r   r   r   r      s    r   N)
__future__r   typingr   r   r   r   r   r   &sglang.srt.entrypoints.openai.protocolr	   r
   r   r   r   r   r   <module>   s
     