o
    i#<                     @  s0  d dl mZ d dlZd dl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mZmZmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d d	l!m"Z" d d
l#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z= erd dl#m>Z> d dl?m@Z@ d dlAmBZBmCZC G dd dZDe
G dd dZEedeee+ ZFe
G dd deeF ZGe
G dd deGe eZHe
G d d! d!eGee+  ee+ ZId4d(d)ZJd5d,d-ZKd6d.d/ZLd7d2d3ZMdS )8    )annotationsN)abstractmethod)nullcontext)	dataclass)TracebackType)TYPE_CHECKINGAnyGenericTypeVar)AgentSpanDataCustomSpanDataFunctionSpanDataGenerationSpanDataGuardrailSpanDataHandoffSpanDataMCPListToolsSpanDataModelSettingsSpanSpanDataSpeechGroupSpanDataSpeechSpanDataTraceTranscriptionSpanData)OpenAIResponsesModel)ResponseSpanDataresponse_span)Scope)NoOpSpan	SpanError	TSpanData)	NoOpTrace)NonRecordingSpanuse_span)Self)logfire_format)inputs_to_eventsresponses_output_events)NOOP_SCRUBBER)handle_internal_errorslog_internal_errortruncate_string)TraceProvider)Response)LogfireLogfireSpanc                   @  sP   e Zd Zd#ddZ		d$d%ddZ			d&d'ddZd(ddZed)d!d"ZdS )*LogfireTraceProviderWrapperwrappedr+   logfire_instancer-   c                 C  s   || _ |jdd| _d S )Nopenai_agents)custom_scope_suffix)r0   with_settingsr1   )selfr0   r1    r6   r/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/_internal/integrations/openai_agents.py__init__2   s   z$LogfireTraceProviderWrapper.__init__NFnamestrtrace_id
str | Nonedisabledboolkwargsr   returnr   c                 K  sz   d }z)| j j|f||d|}t|tr|W S t| jjd||d|}t||W S  ty<   t	  |p9t  Y S w )N)r;   r=   OpenAI Agents trace: {name})r9   agent_trace_id)rA   )
r0   create_trace
isinstancer    LogfireSpanHelperr1   spanLogfireTraceWrapper	Exceptionr)   )r5   r9   r;   r=   r?   tracehelperr6   r6   r7   rC   6   s   
z(LogfireTraceProviderWrapper.create_trace	span_datar   span_idparentTrace | Span[Any] | NoneSpan[TSpanData]c           
      C  sb  d }z| j ||||}t|tr|W S i }t|trd}n]t|tr&d}nUt|tr.d}nMt|trAd}t }d|v r@|d7 }n:t|t	rId}n2t|t
rQd}n*t|trYd	}n"t|trad
}nt|trid}nt|trqd}n
t|tryd}nd}| jj|fi t|||ddgt|t i}t||}	t||	W S  ty   t  |pt| Y S w )NzAgent run: {name!r}zFunction: {name}z-Chat completion with {gen_ai.request.model!r}zResponses APIgen_ai.request.modelz with {gen_ai.request.model!r}zGuardrail {name!r} {triggered=}u$   Handoff: {from_agent} → {to_agent}zCustom span: {name}u   Text → Speech groupu   Text → Speechu-   Speech → Text with {gen_ai.request.model!r}z$MCP: list tools from server {server}zOpenAI agents: {type} span_tagsLLM)r0   create_spanrD   r   r   r   r   r   get_magic_response_attributesr   r   r   r   r   r   r   r1   rF   attributes_from_span_datarE   LogfireSpanWrapperrH   r)   )
r5   rK   rL   rM   r=   rF   extra_attributesmsg_templatelogfire_spanrJ   r6   r6   r7   rS   J   s`   












z'LogfireTraceProviderWrapper.create_spanitemc                 C     t | j|S Ngetattrr0   r5   rZ   r6   r6   r7   __getattr__      z'LogfireTraceProviderWrapper.__getattr__Nonec           	      C  s   z
ddl m}m} W nH tyR   d}ttj|}t|| r!Y d S | ||}tj	
 D ]#\}}|drNzt||d |u rCt||| W q+ tyM   Y q+w q+Y d S w | }t|| r]d S | ||}|| d S )Nr   )get_trace_providerset_trace_providerGLOBAL_TRACE_PROVIDERagents)agents.tracingrc   rd   ImportErrorr^   rf   tracingrD   sysmodulesitems
startswithsetattrrH   )	clsr1   rc   rd   r9   originalwrappermodule_namemodr6   r6   r7   install   s2   




z#LogfireTraceProviderWrapper.install)r0   r+   r1   r-   )NF)
r9   r:   r;   r<   r=   r>   r?   r   r@   r   )NNF)
rK   r   rL   r<   rM   rN   r=   r>   r@   rO   )rZ   r   r@   r   )r1   r-   r@   rb   )	__name__
__module____qualname__r8   rC   rS   r`   classmethodrt   r6   r6   r6   r7   r/   1   s    

6r/   c                   @  sR   e Zd ZU ded< dZded< ddd	ZdddZdddZdd ZdddZ	dS )rE   r.   rF   NrN   rM   mark_as_currentr>   c                 C  st   t  }t| jtr| jjj  }rtt|}| | j	  W d    n1 s*w   Y  |r8| j
  d S d S r\   )r   rD   rM   LogfireWrapperBasespan_helperrF   get_span_contextr"   r!   _start_attach)r5   ry   cmspan_contextr6   r6   r7   start   s   zLogfireSpanHelper.startreset_currentc                 C  s   | j   | | d S r\   )rF   _endmaybe_detachr5   r   r6   r6   r7   end   s   
zLogfireSpanHelper.endc                 C  s   |r	| j   d S d S r\   )rF   _detachr   r6   r6   r7   r      s   zLogfireSpanHelper.maybe_detachc                 C  s   |  d d S )NT)r   r5   r6   r6   r7   	__enter__   s   zLogfireSpanHelper.__enter__exc_typetype[BaseException]exc_valBaseExceptionexc_tbr   c                 C  s"   | j ||| | |tu d S r\   )rF   __exit__r   GeneratorExitr5   r   r   r   r6   r6   r7   r      s   zLogfireSpanHelper.__exit__)ry   r>   )r   r>   )r   r   r   r   r   r   )
ru   rv   rw   __annotations__rM   r   r   r   r   r   r6   r6   r6   r7   rE      s   
 


rE   Tc                   @  s   e Zd ZU ded< ded< dZded< d'd(ddZd'd)ddZd*ddZd+ddZe	dd Z
e	dd  Ze	d!d" Zd,d%d&ZdS )-rz   r   r0   rE   r{   Nz"contextvars.Token[T | None] | NonetokenFry   r>   r@   rb   c                 C  s"   | j | |r|   | j S r\   )r{   r   attachr0   )r5   ry   r6   r6   r7   r      s   
zLogfireWrapperBase.startr   c                 C  s*   |    | j| |r|   | j S r\   )	on_endingr{   r   detachr0   finishr   r6   r6   r7   r      s
   
zLogfireWrapperBase.finishr#   c                 C  s    | j   | j  |   | S r\   )r{   r   r0   r   r   r   r6   r6   r7   r      s   

zLogfireWrapperBase.__enter__r   r   r   r   r   r   c                 C  s:   |    | j||| | j  |tur|   d S d S r\   )r   r{   r   r0   r   r   r   r   r6   r6   r7   r      s   
zLogfireWrapperBase.__exit__c                 C     d S r\   r6   r   r6   r6   r7   r         zLogfireWrapperBase.on_endingc                 C  r   r\   r6   r   r6   r6   r7   r      r   zLogfireWrapperBase.attachc                 C  r   r\   r6   r   r6   r6   r7   r      r   zLogfireWrapperBase.detachrZ   r:   c                 C  r[   r\   r]   r_   r6   r6   r7   r`      ra   zLogfireWrapperBase.__getattr__)F)ry   r>   r@   rb   )r   r>   r@   rb   )r@   r#   )r   r   r   r   r   r   r@   rb   )rZ   r:   )ru   rv   rw   r   r   r   r   r   r   r   r   r   r   r`   r6   r6   r6   r7   rz      s   
 




rz   c                   @  sN   e Zd Zedd Zdd Zdd Zedd	d
ZedddZ	dddZ
dS )rG   c                 C  sF   | j j}| s
d S t| jd}t| dd  }r||d< || d S )N)rB   group_id)r{   rF   is_recordingdictr;   r^   set_attributes)r5   rY   	new_attrsr   r6   r6   r7   r      s   zLogfireTraceWrapper.on_endingc                 C     t | | _d S r\   )r   set_current_tracer   r   r6   r6   r7   r         zLogfireTraceWrapper.attachc                 C      | j rt| j  d | _ d S d S r\   )r   r   reset_current_tracer   r6   r6   r7   r         
zLogfireTraceWrapper.detachr@   r:   c                 C     | j jS r\   r0   r;   r   r6   r6   r7   r;        zLogfireTraceWrapper.trace_idc                 C  r   r\   )r0   r9   r   r6   r6   r7   r9     r   zLogfireTraceWrapper.namedict[str, Any] | Nonec                 C  
   | j  S r\   r0   exportr   r6   r6   r7   r   	     
zLogfireTraceWrapper.exportNr@   r:   r@   r   )ru   rv   rw   r(   r   r   r   propertyr;   r9   r   r6   r6   r6   r7   rG      s    
	rG   c                   @  s   e Zd Zdd Zdd Zedd Zed#d	d
Zed#ddZ	ed$ddZ
ed%ddZd&ddZed'ddZd(ddZed%ddZed%d d!Zd"S ))rV   c                 C  r   r\   )r   set_current_spanr   r   r6   r6   r7   r     r   zLogfireSpanWrapper.attachc                 C  r   r\   )r   r   reset_current_spanr   r6   r6   r7   r     r   zLogfireSpanWrapper.detachc                 C  s   | j j}| s
d S |j}|sJ | j}t||}| j }r'||d< |d || t	|t
|jp3i t}|rC|d|d  7 }n+t|trX|jrX|dt|jdd 7 }nt|ttfrn|jrn|dt|jdd 7 }||_d S )Nerrorz	 failed: messagez: d   )
max_length)r{   rF   r   message_templaterK   rU   r   	set_levelr   r$   r   
attributesr'   rD   r   outputr*   r   r   inputr   )r5   rY   templaterK   r   r   r   r6   r6   r7   r     s&   




zLogfireSpanWrapper.on_endingr@   r:   c                 C  r   r\   r   r   r6   r6   r7   r;   .  r   zLogfireSpanWrapper.trace_idc                 C  r   r\   )r0   rL   r   r6   r6   r7   rL   2  r   zLogfireSpanWrapper.span_idr   c                 C  r   r\   )r0   rK   r   r6   r6   r7   rK   6  r   zLogfireSpanWrapper.span_datar<   c                 C  r   r\   )r0   	parent_idr   r6   r6   r7   r   :  r   zLogfireSpanWrapper.parent_idr   r   rb   c                 C  sR   t  \}}}|r#|d dkr#|d pi dt|kr#| jj| | j|S )Nr   zError running tool (non-fatal)datar   )	rj   exc_infogetr:   r{   rF   record_exceptionr0   	set_error)r5   r   _typexc_tbr6   r6   r7   r   >  s   zLogfireSpanWrapper.set_errorSpanError | Nonec                 C  r   r\   )r0   r   r   r6   r6   r7   r   H  r   zLogfireSpanWrapper.errorr   c                 C  r   r\   r   r   r6   r6   r7   r   L  r   zLogfireSpanWrapper.exportc                 C  r   r\   )r0   
started_atr   r6   r6   r7   r   O  r   zLogfireSpanWrapper.started_atc                 C  r   r\   )r0   ended_atr   r6   r6   r7   r   S  r   zLogfireSpanWrapper.ended_atNr   )r@   r   )r@   r<   )r   r   r@   rb   )r@   r   r   )ru   rv   rw   r   r   r(   r   r   r;   rL   rK   r   r   r   r   r   r   r6   r6   r6   r7   rV     s*    



rV   rK   r   rX   r:   r@   dict[str, Any]c                 C  s  z|   }d|vr|d| jkr|d= d|d< t|dtr+|d |d< |d< t| tri| jr;|t	| j | j
rC| j
|d< t|  }rM||d	< t| jd
d  }rft|dd rf|j|d< |j|d< |W S t| trtt| j
ptg t| jpzg  | jd|d< | j }r|d |d< |d |d< |W S t| trd|v rdd |d  D |d< |W S t| trd|v rdd |d  D |d< |W S  ty   t  i  Y S w )Nz{type}typeopenaigen_ai.systemmodelrP   gen_ai.response.model	raw_inputeventsusagetotal_tokenszgen_ai.usage.input_tokenszgen_ai.usage.output_tokens)messagesr   request_datainput_tokensoutput_tokensr   c                 S     i | ]\}}|d kr||qS r   r6   .0kvr6   r6   r7   
<dictcomp>s      z-attributes_from_span_data.<locals>.<dictcomp>r   c                 S  r   r   r6   r   r6   r6   r7   r   v  r   )r   r   r   rD   r:   popr   responseupdateget_basic_response_attributesr   get_response_span_eventsr^   r   r   r   r   listr   r   r   r   rl   r   rH   r)   )rK   rX   r   r   r   r6   r6   r7   rU   X  sL   








rU   r   r,   c                 C  s   t | dd | dddS )Nr   r   chat)r   r   r   zgen_ai.operation.name)r^   )r   r6   r6   r7   r   }  s
   
r   c                  C  s   zHt  } | r| jtjkr| j} | r| jtjks| r| j} ni W S | s%J i }| jd}t|t	r6||d< | jd}t|t
rF|j|d< |W S  tyV   t  i  Y S w )Nmodel_settingsr5   rP   )inspectcurrentframef_coder   __code__f_backf_localsr   rD   r   r   r   rH   r)   )frameresultr   r   r6   r6   r7   rT     s*   


rT   rF   r   c                 C  s>   | j }| j}t|dd }t||pg }|r|t|pg 7 }|S )Ninstructions)r   r   r^   r%   r&   )rF   r   inputsr   r   r6   r6   r7   r     s   r   )rK   r   rX   r:   r@   r   )r   r,   )r@   r   )rF   r   )N
__future__r   contextvarsr   rj   abcr   
contextlibr   dataclassesr   typesr   typingr   r   r	   r
   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   agents.models.openai_responsesr   rg   r   r   agents.tracing.scoper   agents.tracing.spansr   r   r   agents.tracing.tracesr    opentelemetry.tracer!   r"   typing_extensionsr#   logfire._internal.formatterr$   3logfire._internal.integrations.llm_providers.openair%   r&   logfire._internal.scrubbingr'   logfire._internal.utilsr(   r)   r*   r+   openai.types.responsesr,   logfirer-   r.   r/   rE   r   rz   rG   rV   rU   r   rT   r   r6   r6   r6   r7   <module>   sP    @l, 
J
%
	