o
    ưi.                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ G dd	 d	eZdS )
    N)uuid)ListOptional)verbose_logger)CustomBatchLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProvider)StandardLoggingPayloadc                       s   e Zd Z			d fdd	Zdd Zdd Zd	d
 Zdd Zdd Zdd Z	de
fddZdd Zdd Zdd Zdd Z  ZS )LiteralAILoggerNhttps://cloud.getliteral.aic                    s   t dp|| _d|pt ddd| _|r|| jd< ttjd| _t | _	t dd }t
 | _t jd
i || j|r@t|nd d	 d S )NZLITERAL_API_URLzapplication/jsonZLITERAL_API_KEYlitellm)zContent-Typez	x-api-keyzx-client-namezx-env)Zllm_providerZLITERAL_BATCH_SIZE)
flush_lock
batch_size )osgetenvliteralai_api_urlheadersr   r	   ZLoggingCallbackasync_httpx_clientr   sync_http_handlerasyncioLockr   super__init__int)selfZliteralai_api_keyr   envkwargsr   	__class__r   V/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/literal_ai.pyr      s&   


zLiteralAILogger.__init__c                 C   s   z2t d|| | ||||}| j| t dt| j| j t| j| jkr0|   W d S W d S  tyA   t 	d Y d S w )Nz7Literal AI Layer Logging - kwargs: %s, response_obj: %s2Literal AI logging: queue length %s, batch size %sz5Literal AI Layer Error - error logging success event.)
r   debug_prepare_log_data	log_queueappendlenr   _send_batch	Exception	exceptionr   r   response_obj
start_timeend_timedatar   r   r!   log_success_event0   s*   
z!LiteralAILogger.log_success_eventc                 C   s   t d z+| ||||}| j| t dt| j| j t| j| jkr.|   W d S W d S  t	y?   t 
d Y d S w )N!Literal AI Failure Event Logging!r"   z5Literal AI Layer Error - error logging failure event.)r   infor$   r%   r&   r#   r'   r   r(   r)   r*   r+   r   r   r!   log_failure_eventE   s"   

z!LiteralAILogger.log_failure_eventc                 C   s   | j sd S | j d}| | j }| | j }z1| jj|||d| jd}|jdkr:t	d|j d|j
  W d S tdt| j  d W d S  tyW   td	 Y d S w )
N/api/graphqlquery	variablesurljsonr   ,  Literal AI Error:  - 	Batch of  runs successfully createdLiteral AI Layer Error)r%   r   _steps_query_builder_steps_variables_builderr   postr   status_coder   errortextr#   r'   r)   r*   )r   r9   r6   r7   responser   r   r!   r(   V   s.   
	

zLiteralAILogger._send_batchc                    s   z5t d|| | ||||}| j| t dt| j| j t| j| jkr4|  I d H  W d S W d S  tyE   t 	d Y d S w )Nz=Literal AI Async Layer Logging - kwargs: %s, response_obj: %sr"   z;Literal AI Layer Error - error logging async success event.)
r   r#   r$   r%   r&   r'   r   flush_queuer)   r*   r+   r   r   r!   async_log_success_eventr   s,   
z'LiteralAILogger.async_log_success_eventc                    s   t d z.| ||||}| j| t dt| j| j t| j| jkr2|  I d H  W d S W d S  t	yC   t 
d Y d S w )Nr1   r"   z;Literal AI Layer Error - error logging async failure event.)r   r2   r$   r%   r&   r#   r'   r   rH   r)   r*   r+   r   r   r!   async_log_failure_event   s$   

z'LiteralAILogger.async_log_failure_eventc              
      s   | j sd S | j d}| | j }| | j }z4| jj|||d| jdI d H }|jdkr>t	d|j d|j
  W d S tdt| j  d W d S  tjyo } ztd	|jj d|jj
  W Y d }~d S d }~w ty}   td
 Y d S w )Nr4   r5   r8   r;   r<   r=   r>   r?   zLiteral AI HTTP Error: r@   )r%   r   rA   rB   r   rC   r   rD   r   rE   rF   r#   r'   httpxZHTTPStatusErrorr*   rG   r)   )r   r9   r6   r7   rG   er   r   r!   async_send_batch   s:   


z LiteralAILogger.async_send_batchreturnc                 C   s  | dd }|d u rtd|d }| di  di }|d }|d }	|d }
g }t|
tr7d|
v r7|
d }|r?|d	 d
 nd }d }d }|	rut|	trut|	d	 tru|	D ]}t|dd  }rt| d}| d}| d|d< d|d< qU|dd }| dtt	 |d | dd| dd | dd | dd d d d| d| dd t|t|||d |d |d ||| dd | dd|| 
 ||	||d!d"}|S )#NZstandard_logging_objectz+standard_logging_object not found in kwargsmetadataZlitellm_paramsZmodel_parametersmessagesrG   choicesr   messageZ__literal_prompt__	prompt_idr7   r   TZ	templatedtoolsZstep_idZ	error_strmodel Zliteralai_thread_idZliteralai_parent_idZliteralai_root_run_idZllmtagsZliteralai_tagsZprompt_tokensZcompletion_tokensZtotal_tokensZcustom_llm_providerr   )ZinputTokenCountZoutputTokenCountZ
tokenCountZpromptIdr7   providerrU   durationsettingsrP   ZmessageCompletionrT   )idrE   nameZthreadIdZparentIdZ	rootRunIdinputoutputtyperW   Z	startTimeZendTimerO   Z
generation)get
ValueError
isinstancedictlistgetattrpopstrr   uuid4total_seconds)r   r   r,   r-   r.   Zlogging_payloadZclean_metadatarO   rZ   rP   rG   rQ   Zmessage_completionrS   r7   rR   Zliteral_promptrT   stepr   r   r!   r$      sj   








z!LiteralAILogger._prepare_log_datac                 C   s   d}t t|D ][}|dg d| d| d| d| d| d| d| d	| d
| d| d| d| d| d| d| d| d7 }q|S )NrV   z$id_z : String!
            $threadId_z : String
            $rootRunId_z: String
            $type_z": StepType
            $startTime_z : DateTime
            $endTime_z: DateTime
            $error_z: String
            $input_z: Json
            $output_z: Json
            $metadata_z: Json
            $parentId_z: String
            $name_z: String
            $tags_z$: [String!]
            $generation_z-: GenerationPayloadInput
            $scores_z0: [ScorePayloadInput!]
            $attachments_z(: [AttachmentPayloadInput!]
            ranger'   joinr   steps	generatedr[   r   r   r!   _steps_query_variables_builder   sD   	
z.LiteralAILogger._steps_query_variables_builderc                 C   s   d}t t|D ]`}|dg d| d| d| d| d| d| d| d	| d
| d| d| d| d| d| d| d| d| d7 }q|S )NrV   z
        stepz": ingestStep(
            id: $id_z!
            threadId: $threadId_z#
            rootRunId: $rootRunId_z#
            startTime: $startTime_z
            endTime: $endTime_z
            type: $type_z
            error: $error_z
            input: $input_z
            output: $output_z!
            metadata: $metadata_z!
            parentId: $parentId_z
            name: $name_z
            tags: $tags_z%
            generation: $generation_z
            scores: $scores_z'
            attachments: $attachments_z>
        ) {
            ok
            message
        }
    rk   rn   r   r   r!   _steps_ingest_steps_builder  sL   	
z+LiteralAILogger._steps_ingest_steps_builderc                 C   s   d|  | d| | dS )Nz
        mutation AddStep(z) {
        z
        }
        )rq   rr   )r   ro   r   r   r!   rA   '  s
   z$LiteralAILogger._steps_query_builderc                 C   s:   dd }i }t t|D ]}|| }|||| q|S )Nc                 S   s4   i }|   D ]\}}|d ur||| d| < q|S )N_)items)eventr[   resultkeyvaluer   r   r!   serialize_step/  s   z@LiteralAILogger._steps_variables_builder.<locals>.serialize_step)rl   r'   update)r   ro   ry   r7   irj   r   r   r!   rB   .  s   
z(LiteralAILogger._steps_variables_builder)Nr   N)__name__
__module____qualname__r   r0   r3   r(   rI   rJ   rM   rc   r$   rq   rr   rA   rB   __classcell__r   r   r   r!   r      s      =r   )r   r   Zlitellm._uuidr   typingr   r   rK   Zlitellm._loggingr   Z(litellm.integrations.custom_batch_loggerr   Z&litellm.llms.custom_httpx.http_handlerr   r   r	   Zlitellm.types.utilsr
   r   r   r   r   r!   <module>   s   