o
    i.                     @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ eeZdd ZdedefddZdd Zdd Zdd ZedZedZedZedZedZedZ ed Z!dS )!    )wraps)isasyncgenfunction)iscoroutinefunction)isgeneratorfunction)	signatureN)Callable)Optional)OrderedDict)
get_logger)LLMObs)OUTPUT_VALUE)!SPAN_START_WHILE_DISABLED_WARNINGc                 C   s*   |}|d u rd}| }|d u r|j }||fS )Ncustom)__name__)name
model_namefunctraced_model_name	span_name r   M/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/llmobs/decorators.py_get_llmobs_span_options   s   r   argsreturnc                 C   s   dd |   D S )Nc                 S   s   i | ]\}}|d kr||qS )selfr   ).0argvaluer   r   r   
<dictcomp>!   s    z$_get_span_inputs.<locals>.<dictcomp>)items)r   r   r   r   _get_span_inputs    s   r    c              
   C  s
  z~z^| |i |}| d I d H }	 z|V }| |I d H }W n= ty0   | I d H  Y n/ tyI } z||I d H  W Y d }~nd }~w ty] } z	||I d H   d }~ww qW n ttfyj     tyx   |jt    w W |	  d S |	  w )N)
asendGeneratorExitacloseStopAsyncIterationathrow	Exceptionset_exc_infosysexc_infofinish)r   spanr   kwargsgennext_valier   r   r   yield_from_async_gen$   s<   r1   c                    sP   	 	 	 	 	 	 d	dt t dt t dt t dt t dt t dt t f fdd}|S )
Noriginal_funcr   model_providerr   
session_idml_appc                    s.    fdd}| rt | r|| S |S )Nc                    s   t  st r)t  fdd}t  fdd}n t  fdd}t  fdd}t sQt rS|S |S )Nc                     s^   t jstt  | i |S t \}}tt t j}|||dd}t || |S NT)r   r3   r   r4   r5   
_decorator)	r   enabledlogwarningr   r   getattrllmr1   r   r,   r   r   traced_operationr+   r   r5   r   r3   r   operation_kindr4   r   r   generator_wrapperJ   s   
zM_model_decorator.<locals>.decorator.<locals>.inner.<locals>.generator_wrapperc                     s   t jstt  | i |I d H S t \}}tt t j}|||dd  | i |I d H W  d    S 1 sAw   Y  d S r6   r   r8   r9   r:   r   r   r;   r<   r   r,   r   r   r>   r?   r   r   wrapper[   s    
$zC_model_decorator.<locals>.decorator.<locals>.inner.<locals>.wrapperc               	   ?   s    t jstt  | i |E d H  d S t \}}tt t j}|||dd}z,z | i |E d H  W n tt	fyE     t
yS   |jt    w W |  d S |  w r6   )r   r8   r9   r:   r   r   r;   r<   StopIterationr"   r&   r'   r(   r)   r*   r=   r?   r   r   rA   n   s0   
c                     s   t jstt  | i |S t \}}tt t j}|||dd  | i |W  d    S 1 s:w   Y  d S r6   rB   rC   r?   r   r   rD      s   
$r   r   r   r   r   rA   rD   )r5   r   r3   r   r@   r4   r   r   innerG   s   z2_model_decorator.<locals>.decorator.<locals>.innercallable)r2   r   r3   r   r4   r5   rI   r@   )r5   r   r3   r   r4   r   	decorator?   s   Tz#_model_decorator.<locals>.decorator)NNNNNN)r   r   strr@   rM   r   rL   r   _model_decorator>   s(   `rP   c                    sB   	 	 	 	 	d	dt t dt t dt t dt t dtf
 fdd}|S )
NTr2   r   r4   r5   _automatic_io_annotationc                    s,    fdd}| rt | r|| S |S )Nc                    s   t  st r't  fdd}t  fdd}nt  fdd}t  fdd}t sMt rO|S |S )Nc                     s   t jstt | i |S td \}}tt t j}||dd}t}|j	| i |} rA|j
rAt j|t|j
d t|| |S NTr   r4   r5   r7   r+   
input_data)r   r8   r9   r:   r   r   r;   workflowr   bind_partial	argumentsannotater    r1   r   r,   _r   r>   r+   func_signature
bound_argsrQ   r   r5   r   r@   r4   r   r   rA      s   

zN_llmobs_decorator.<locals>.decorator.<locals>.inner.<locals>.generator_wrapperc            	         s   t jstt | i |I d H S td \}}tt t j}||ddG}t}|j	| i |} rF|j
rFt j|t|j
d | i |I d H } rh|d urhdkrh|td u rht j||d |W  d    S 1 stw   Y  d S NTrS   rT   	retrieval)r+   output_datar   r8   r9   r:   r   r   r;   rV   r   rW   rX   rY   r    _get_ctx_itemr   	r   r,   r[   r   r>   r+   r\   r]   respr^   r   r   rD      s.   

$zD_llmobs_decorator.<locals>.decorator.<locals>.inner.<locals>.wrapperc               	   ?   s    t jstt | i |E d H  d S td \}}tt t j}||dd}t}|j	| i |} rG|j
rGt j|t|j
d z0z| i |E d H  W n ttfy^     tyl   |jt    w W |rv|  d S d S |r|  w w rR   )r   r8   r9   r:   r   r   r;   rV   r   rW   rX   rY   r    rE   r"   r&   r'   r(   r)   r*   rZ   r^   r   r   rA      s2   


c            	         s   t jstt | i |S td \}}tt t j}||ddD}t}|j	| i |} rB|j
rBt j|t|j
d | i |} ra|d uradkra|td u rat j||d |W  d    S 1 smw   Y  d S r_   rb   rd   r^   r   r   rD      s,   

$rF   rG   )rQ   r5   r   r@   r4   rH   r   rI      s   z3_llmobs_decorator.<locals>.decorator.<locals>.innerrJ   )r2   r   r4   r5   rQ   rI   rL   )rQ   r5   r   r4   r   rM      s   ]z$_llmobs_decorator.<locals>.decorator)NNNNT)r   r   rN   boolrO   r   rL   r   _llmobs_decorator   s"   hrg   r<   	embeddingrV   tasktoolr`   agent)"	functoolsr   inspectr   r   r   r   r(   typingr   r   r	   ddtrace.internal.loggerr
   ddtrace.llmobsr   ddtrace.llmobs._constantsr   r   r   r9   r   dictr    r1   rP   rg   r<   rh   rV   ri   rj   r`   rk   r   r   r   r   <module>   s4    dl