
    AHj!                     L    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      Zy)    N)verbose_logger)should_use_helicone_mockcreate_mock_helicone_clientc                   D    e Zd Zg dZd Zd Zedededefd       Zd Z	y	)
HeliconeLogger)
gptclaudegeminiz	command-rzcommand-r-pluszcommand-lightzcommand-mediumzcommand-medium-betazcommand-xlarge-nightlyzcommand-nightlyc                 V   t               | _        | j                  rt                t        j                  d       d| _        t        j                  d      | _        t        j                  d      xs d| _	        | j                  j                  d      r| j                  d d | _	        y y )Nz8[HELICONE MOCK] Helicone logger initialized in mock modezhttps://api.openai.com/v1HELICONE_API_KEYHELICONE_API_BASEzhttps://api.hconeai.com/)r   is_mock_moder   r   infoprovider_urlosgetenvkeyapi_baseendswith)selfs    U/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/integrations/helicone.py__init__zHeliconeLogger.__init__   s    46')J 899/0		"56S:S==!!#& MM#2.DM '    c           
         ddl m}m} | }|D ]4  }d|v r"|d   dk(  r|| |d    z  }|| |d    z  })|| |d    z  }6 || z  }|d   d   }|d   }g }	d|v r5|d   r0|d   D ]'  }
|	j                  d	|
d
   |
d   d   |
d   d   d       ) n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message
tool_callstool_useidfunctionname	arguments)typer&   r(   inputtext)r*   r,   	assistantfinish_reasonusageprompt_tokenscompletion_tokens)input_tokensoutput_tokens)r&   r*   r   modelr!   stop_reasonstop_sequencer/   )	anthropicr   r   append)r   r4   messagesresponse_objr   r   promptr#   choicer!   	tool_callclaude_response_objs               r   claude_mappingzHeliconeLogger.claude_mapping,   st   5 > 	@G 6?f,wy/A.BCCFGI,>+?@@F\N79+=*>??	@ 	YK i(+#7"w|'<$\2 	 *'o )* 5f =!*:!6{!C	 '!gi&8 &	0BCDG t$!/2! ,W 5o F!-g!67J!K
 #"r   litellm_paramsmetadatareturnc                    | |S | j                  d      |S |i }| j                  di       j                  di       xs i }|D ](  }|j                  d      s|j                  |      ||<   * d|v r|j                  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.
        proxy_server_requestheaders	helicone_litellm_parent_otel_span)get
startswithpop)r@   rA   proxy_headers
header_keys       r   add_metadata_from_headerz'HeliconeLogger.add_metadata_from_header[   s     !O45=OH 5r:>>y"MSQS 	 ( 	EJ$$[1'4'8'8'D$	E &1LL34r   c                    	  |d        |j                  di       }|j                  dd      }	|j                  dd        |j                  di       xs i }
| j                  ||
      }
|	dk(  xs j                  d      }t        fd	| j                  D              s|rnd
|d}t        |t        j                        st        |t        j                        r|j                         }dv r|s| j                  ||      }|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        |j                               }t        |j                         |z
  dz        }t        |j                               }t        |j                         |z
  dz        }dd| j                   i}|j!                  |
       |||d|||d||dd d!}t        j"                  j%                  |||"      }|j&                  dk(  r| j(                  r	 |d#       y  |d$       y  |d%|j&                           |d&|j*                          y # t,        $ r   |d't/        j0                                 Y y w xY w)(Nz5Helicone Logging - Enters logging function for model r@   custom_llm_provider litellm_call_idrA   	vertex_aiz
vertex_ai/c              3   &   K   | ]  }|v  
 y w)N ).0accepted_modelr4   s     r   	<genexpr>z-HeliconeLogger.log_success.<locals>.<genexpr>   s      & #e+s   zgpt-3.5-turbo)r4   r9   r	   )r4   r9   r:   zopenai-versionz
2020-10-01   )jsonrE   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)urlrY   meta)secondsmilliseconds)	startTimeendTime)providerRequestproviderResponsetiming)rE   rY   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 - )rH   rM   rI   anyhelicone_model_list
isinstancelitellmEmbeddingResponseModelResponserY   r?   r   r   r   int	timestampupdatemodule_level_clientpoststatus_coder   r,   	Exception	traceback
format_exc)r   r4   r9   r:   
start_timeend_timeprint_verbosekwargsr@   rO   rA   is_vertex_aiprovider_requestrc   r   r\   rE   start_time_secondsstart_time_millisecondsend_time_secondsend_time_millisecondsr]   dataresponses    `                      r   log_successzHeliconeLogger.log_success|   sL   d	GwO $ZZ(8"=N"0"4"45JB"OJJ($/%))*b9?RH44^XNH /+= AQAQBL  *.*B*B     %  */HE,(A(ABjg33G  ,0025 #22(  3  
 %,l;   ,,L]]O;/C5 '89F~6EU"~6Q#*488*!5 2G "%Z%9%9%;!<&)%%'*<<D'#  #8#5#5#78$'##%(88D@%! $wtxxj%9:DKK! (, $
 %5 $6(?"
 $4(= 	D$ 2277WSW7XH##s*$$!Q ""?@XYaYmYmXno  9(--IJ 	5i6J6J6L5MNO	s   I(J  ,J  5*J   &K	K	N)
__name__
__module____qualname__rf   r   r?   staticmethoddictrM   r   rT   r   r   r   r      sE    /-#^   $  @hr   r   )	r   rr   rh   litellm._loggingr   )litellm.integrations.helicone_mock_clientr   r   r   rT   r   r   <module>r      s$    
   +V Vr   