o
    ưi%!                     @   sF   d dl Z d dlZd dlZd dlmZ d dlmZmZ G dd dZdS )    N)verbose_logger)should_use_helicone_mockcreate_mock_helicone_clientc                   @   sF   e Zd Zg dZdd Zdd Zedededefd	d
Zdd Z	dS )HeliconeLogger)
Zgptclaudegeminiz	command-rzcommand-r-pluszcommand-lightzcommand-mediumzcommand-medium-betazcommand-xlarge-nightlyzcommand-nightlyc                 C   sd   t  | _| jrt  td d| _td| _tdpd| _	| j	
dr0| j	d d | _	d S d S )Nz8[HELICONE MOCK] Helicone logger initialized in mock modezhttps://api.openai.com/v1ZHELICONE_API_KEYZHELICONE_API_BASEzhttps://api.hconeai.com/)r   is_mock_moder   r   infoprovider_urlosgetenvkeyapi_baseendswith)self r   T/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/helicone.py__init__   s   
zHeliconeLogger.__init__c              
   C   s6  ddl m}m} | }|D ],}d|v r/|d dkr$|| |d  7 }q|| |d  7 }q|| |d  7 }q|| 7 }|d d }|d }g }	d|v ro|d ro|d D ]}
|	d	|
d
 |
d d |
d d d qWnd|v r|d rd|d dg}	|d
 dd||	|d d |d d |d d dd}|S )Nr   )	AI_PROMPTHUMAN_PROMPTroleusercontentchoicesmessageZ
tool_callsZtool_useidfunctionname	arguments)typer   r   inputtext)r!   r#   Z	assistantZfinish_reasonusageZprompt_tokensZcompletion_tokens)Zinput_tokensZoutput_tokens)r   r!   r   modelr   Zstop_reasonZstop_sequencer$   )Z	anthropicr   r   append)r   r%   messagesresponse_objr   r   promptr   choicer   Z	tool_callZclaude_response_objr   r   r   claude_mapping*   sH   


	

zHeliconeLogger.claude_mappinglitellm_paramsmetadatareturnc                 C   sz   | du r|S |  ddu r|S |du ri }|  di  di p i }|D ]}|dr1| |||< q#d|v r;|d |S )aP  
        Adds metadata from proxy request headers to Helicone logging if keys start with "helicone_"
        and overwrites litellm_params.metadata if already included.

        For example if you want to add custom property to your request, send
        `headers: { ..., helicone-property-something: 1234 }` via proxy request.
        NZproxy_server_requestheadersZ	helicone_Zlitellm_parent_otel_span)get
startswithpop)r,   r-   proxy_headersZ
header_keyr   r   r   add_metadata_from_headerY   s   	

z'HeliconeLogger.add_metadata_from_headerc                    s^  z|d   | di }| dd}	| dd  | di p"i }
| ||
}
|	dkp1 d}t fd	d
| jD s@|rB nd  |d}t|tjsUt|tjrY|	 }d v rg|sg| j
 ||d}|ddidd}| j}| j d}d v r|s| j d}d}n|r| j d}d}nd v r| j d}d}d| j dd}t| }t| | d }t| }t| | d }dd| j i}||
 |||d|||d ||d d!d"}tjj|||d#}|jdkr| jr|d$ W d S |d% W d S |d&|j  |d'|j  W d S  ty.   |d(t   Y d S w ))Nz5Helicone Logging - Enters logging function for model r,   custom_llm_provider Zlitellm_call_idr-   Z	vertex_aiz
vertex_ai/c                 3   s    | ]}| v V  qd S )Nr   ).0Zaccepted_modelr%   r   r   	<genexpr>   s
    
z-HeliconeLogger.log_success.<locals>.<genexpr>zgpt-3.5-turbo)r%   r'   r   )r%   r'   r(   zopenai-versionz
2020-10-01   )jsonr/   statusz/oai/v1/logz/anthropic/v1/logz%https://api.anthropic.com/v1/messagesz/custom/v1/logz$https://aiplatform.googleapis.com/v1r   z0https://generativelanguage.googleapis.com/v1betazBearer zapplication/json)AuthorizationzContent-Typei  zHelicone-Auth)urlr;   meta)secondsZmilliseconds)Z	startTimeZendTime)ZproviderRequestproviderResponseZtiming)r/   r;   z7[HELICONE MOCK] Helicone Logging - Successfully mocked!zHelicone Logging - Success!zBHelicone Logging - Error Request was not successful. Status Code: zHelicone Logging - Error zHelicone Logging Error - )r0   r4   r1   anyhelicone_model_list
isinstancelitellmZEmbeddingResponseZModelResponser;   r+   r   r   r   int	timestampupdateZmodule_level_clientpoststatus_coder
   r#   	Exception	traceback
format_exc)r   r%   r'   r(   
start_timeend_timeZprint_verbosekwargsr,   r5   r-   Zis_vertex_aiZprovider_requestrA   r   r>   r/   Zstart_time_secondsZstart_time_millisecondsZend_time_secondsZend_time_millisecondsr?   dataresponser   r8   r   log_successz   s   



zHeliconeLogger.log_successN)
__name__
__module____qualname__rC   r   r+   staticmethoddictr4   rS   r   r   r   r   r      s    / r   )	r   rL   rE   Zlitellm._loggingr   Z)litellm.integrations.helicone_mock_clientr   r   r   r   r   r   r   <module>   s   