o
    ưi                     @   s   d Z zZddlZddlZddlZddlmZmZmZmZm	Z	 ddl
mZ ejdkr1ddlmZmZ nddlmZmZ eeZe	dedZe	d	ZG d
d deeef ZG dd dZW n eyg   dZ Y nw ddlZG dd dZdS )T    N)AnyDictListOptionalTypeVar)
trace_tree)      )LiteralProtocolK)boundVc                   @   sL   e Zd ZU ed ed< dedefddZddedee dee fd	d
Z	dS )OpenAIResponse)chat.completionedittext_completionobjectkeyreturnc                 C      d S N )selfr   r   r   Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/weights_biases.py__getitem__      zOpenAIResponse.__getitem__Ndefaultc                 C   r   r   r   )r   r   r   r   r   r   get   r   zOpenAIResponse.getr   )
__name__
__module____qualname__r
   __annotations__r   r   r   r   r   r   r   r   r   r      s   
 $r   c                   @   s  e Zd Zdeeef dededee	j
 fddZedeeef dedee	j dede	j
f
dd	Zdeeef dedede	j
fd
dZdeeef dedede	j
fddZdeeef dedede	j
fddZdeeef dededee dede	j
fddZdS )OpenAIRequestResponseResolverrequestresponsetime_elapsedr   c              
   C   s   z7|d dkr|  |||W S |d dkr| |||W S |d dkr+| |||W S td|d   W d S  tyR } ztd|  W Y d }~d S d }~ww )Nr   r   r   r   z Unknown OpenAI response object: z$Failed to resolve request/response: )_resolve_edit_resolve_completion_resolve_chat_completionloggerdebug	Exceptionwarning)r   r$   r%   r&   er   r   r   __call__   s    z&OpenAIRequestResponseResolver.__call__resultsc                 C   s   t t|d d }|t t|d  }tj|dd d|d  d|d t|||tjj|d}| |dd}tj||d	S )
aj  Converts the request, response, and results into a trace tree.

            params:
                request: The request dictionary
                response: The response object
                results: A list of results object
                time_elapsed: The time elapsed in seconds
            returns:
                A wandb trace tree object.
            createdi  modelZopenai_r   )name
attributesstart_time_msend_time_msZ	span_kindr0   )r$   r%   _kind)Z	root_spanZ
model_dict)	introundr   Spanr   dictZSpanKindZLLMWBTraceTree)r$   r%   r0   r&   r6   r7   spanZ	model_objr   r   r   results_to_trace_tree4   s   $z3OpenAIRequestResponseResolver.results_to_trace_treec                 C   s@   d|d  d|d  d}dd |d D }| j |||||d	S )
z<Resolves the request and response objects for `openai.Edit`.z

**Instruction**: Zinstructionz

**Input**: input
c                 S      g | ]
}d |d  dqS )z

**Edited**: textrA   r   .0choicer   r   r   
<listcomp>]   s    z?OpenAIRequestResponseResolver._resolve_edit.<locals>.<listcomp>choicesr$   r%   request_strrH   r&   !_request_response_result_to_tracer   r$   r%   r&   rJ   rH   r   r   r   r'   R   s   z+OpenAIRequestResponseResolver._resolve_editc                 C   s6   d|d  d}dd |d D }| j |||||dS )BResolves the request and response objects for `openai.Completion`.z

**Prompt**: promptrA   c                 S   rB   )z

**Completion**: rC   rA   r   rD   r   r   r   rG   q   s    zEOpenAIRequestResponseResolver._resolve_completion.<locals>.<listcomp>rH   rI   rK   rM   r   r   r   r(   i   s   z1OpenAIRequestResponseResolver._resolve_completionc                 C   sd   t  }|d D ]}|d|d  d|d  d q| }dd |d	 D }| j|||||d
S )rN   messages

**role**: contentrA   c                 S   s.   g | ]}d |d d  d|d d  dqS )rQ   messagerR   rS   rT   rA   r   rD   r   r   r   rG      s     zJOpenAIRequestResponseResolver._resolve_chat_completion.<locals>.<listcomp>rH   rI   )ioStringIOwritegetvaluerL   )r   r$   r%   r&   rO   rU   rJ   rH   r   r   r   r)   ~   s   "z6OpenAIRequestResponseResolver._resolve_chat_completionrJ   rH   c                    s&    fdd|D }|  ||||}|S )rN   c                    s"   g | ]}t jd  id|idqS )r$   r%   )ZinputsZoutputs)r   ResultrD   rJ   r   r   rG      s    zSOpenAIRequestResponseResolver._request_response_result_to_trace.<locals>.<listcomp>)r?   )r   r$   r%   rJ   rH   r&   r0   tracer   r[   r   rL      s
   
	z?OpenAIRequestResponseResolver._request_response_result_to_traceN)r   r    r!   r   strr   r   floatr   r   r=   r/   staticmethodr   rZ   r?   r'   r(   r)   rL   r   r   r   r   r#      s|    









r#   Fc                   @   s   e Zd Zdd Zdd ZdS )WeightsBiasesLoggerc                 C   s8   zW n t y   t dw tdu rt dt | _d S )NzP[91m wandb not installed, try running 'pip install wandb' to fix this error[0mF)r,   imported_openAIResponser#   resolver)r   r   r   r   __init__   s   zWeightsBiasesLogger.__init__c           	      C   s   dd l }z>|d|  | }|| | ||||  }|d ur.|d ur.|d|i |d ur@|  |d|  W d S W d S  tyU   |dt   Y d S w )Nr   z0W&B Logging - Enters logging function for model r\   z-W&B Logging Logging - final response object: zW&B Logging Layer Error - )	wandbinitrb   total_secondslogfinishr,   	traceback
format_exc)	r   kwargsZresponse_obj
start_timeend_timeZprint_verboserd   runr\   r   r   r   	log_event   s(   
zWeightsBiasesLogger.log_eventN)r   r    r!   rc   ro   r   r   r   r   r`      s    r`   )ra   rV   loggingsystypingr   r   r   r   r   Zwandb.sdk.data_typesr   version_infor
   r   Ztyping_extensions	getLoggerr   r*   r]   r   r   r   r#   r,   ri   r`   r   r   r   r   <module>   s*    


 