o
    i*                     @   s   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G d
d deZdS )    )AnyN)TracingProcessor)Span)Trace)
get_logger)format_trace_id)OaiSpanAdapter)OaiTraceAdapterc                       s   e Zd Z fddZdee ddfddZdeddfd	d
ZdeddfddZ	dee ddfddZ
dddZdddZ  ZS )LLMObsTraceProcessorc                    s   t    || _d S N)super__init___integration)selfintegration	__class__ d/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/openai_agents/processor.pyr      s   

zLLMObsTraceProcessor.__init__spanreturnNc                 C   s6   t tddsdS t|}|jsdS | jj|dd dS )z[Called when a span starts.

        Args:
            span: The span that started.
        _datadog_patchFNT)oai_spansubmit_to_llmobs)getattragentsr   llmobs_span_kindr   trace)r   r   r   r   r   r   on_span_start   s   z"LLMObsTraceProcessor.on_span_startr   c                 C   s(   t tddsdS | jjt|dd dS )z^Called when a trace starts.

        Args:
            trace: The trace that started.
        r   FNT)	oai_tracer   )r   r   r   r   r	   )r   r   r   r   r   on_trace_start$   s   z#LLMObsTraceProcessor.on_trace_startc                 C   st   t tddsdS t|}| jj|j}|std|j dS | j	|g d|i | jj
t|jd |  dS )zcCalled when a trace is finished.

        Args:
            trace: The trace that started.
        r   FNz(No LLMObs span found for openai trace %sr   )r   r   r	   r   oai_to_llmobs_spangettrace_idloggerwarningllmobs_set_tagsllmobs_tracespopr   finish)r   r   trace_adaptertrace_root_spanr   r   r   on_trace_end/   s   z!LLMObsTraceProcessor.on_trace_endc                 C   sP   t tddsdS t|}| jj|j}|sdS | j|g d|i |  dS )zCalled when a span is finished. Should not block or raise exceptions.

        Args:
            span: The span that finished.
        r   FNr   )	r   r   r   r   r!   r"   span_idr&   r)   )r   r   span_adapterllmobs_spanr   r   r   on_span_endE   s   z LLMObsTraceProcessor.on_span_endc                 C   s   d S r   r   r   r   r   r   force_flushU   s   z LLMObsTraceProcessor.force_flushc                 C   s   | j   d S r   )r   clear_stater1   r   r   r   shutdownX   s   zLLMObsTraceProcessor.shutdown)r   N)__name__
__module____qualname__r   OaiSpanr   r   OaiTracer    r,   r0   r2   r4   __classcell__r   r   r   r   r
      s    
r
   )typingr   r   "agents.tracing.processor_interfacer   agents.tracing.spansr   r8   agents.tracing.tracesr   r9   ddtrace.internal.loggerr   ddtrace.internal.utils.formatsr   "ddtrace.llmobs._integrations.utilsr   r	   r5   r$   r
   r   r   r   r   <module>   s    