
    -j                        d 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m	Z	 ddl
mZmZ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 ddlmZ ddlmZ ddlm Z  	 ddl!Z!ddl!m"Z"m#Z#m$Z$m%Z% n# e&$ r  e'd          w xY we G d d                      Z( e(ddddd           e(ddddd          gZ) e(ddddd           e(ddddd           e(dd ddd!           e(dd ddd!           e(d"dd#ddd$d%&           e(d"d d#dd!d$d%&           e(ddd#ddd%'           e(dd d#dd!d%'           e(d(d)dddd*'           e(d(d+ddd!d*'           e(d(d)d#ddd*'           e(d(d+d#dd!d*'           e(d,d-dd.d           e(d,d/dd.d!          gZ* G d0 d1          Z+d2ed3efd4Z,d5ed3efd6Z-d5ed3efd7Z.d8ed3efd9Z/d5ed3efd:Z0d;e(d5ed3efd<Z1	 	 	 d[ded=ed>ed?ee2         d@ee         dAee         d3efdBZ3d\d@ee         d3efdCZ4d\d@ee         d3efdDZ5dEed3efdFZ6d;edEed3efdGZ7d;e(dHed3efdIZ8d3e9fdJZ:dHed3e9fdKZ;d!a<d]dLZ=d;e(dMe>e         d=ed>ee         d3df
dNZ?d;e(dHed=ed3efdOZ@d;e(dHed=ed3efdPZAe,dQe(dRedSed5ed3ef
dT            ZBe,dQe(dRedSed5ed3ef
dU            ZCd]dVZD eD              e=              G dW dX          ZE G dY dZ          ZFdS )^a  If you use the OpenAI Python SDK, you can use the Langfuse drop-in replacement to get full logging by changing only the import.

```diff
- import openai
+ from langfuse.openai import openai
```

Langfuse automatically tracks:

- All prompts/completions with support for streaming, async and functions
- Latencies
- API Errors
- Model usage (tokens) and cost (USD)

The integration is fully interoperable with the `observe()` decorator and the low-level tracing SDK.

See docs for more details: https://langfuse.com/docs/integrations/openai
    N)defaultdict)	dataclass)datetime)isawaitableisclass)AnyOptionalcast)NotGiven)Version)	BaseModel)wrap_function_wrapper)
get_client)LangfuseGeneration)_get_timestamp)langfuse_logger)LangfuseMedia)AsyncAzureOpenAIAsyncOpenAIAzureOpenAIOpenAIz?Please install OpenAI to use this feature: 'pip install openai'c                   v    e Zd ZU eed<   eed<   eed<   eed<   eed<   dZee         ed<   dZee         ed<   dS )	OpenAiDefinitionmoduleobjectmethodtypesyncNmin_versionmax_version)	__name__
__module____qualname__str__annotations__boolr   r	   r         c/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/langfuse/openai.pyr   r   /   sg         KKKKKKKKK
III
JJJ!%K#%%%!%K#%%%%%r(   r   openaiChatCompletioncreatechatT)r   r   r   r   r   
Completion
completionz!openai.resources.chat.completionsCompletionszopenai.resources.completionsAsyncCompletionsFz&openai.resources.beta.chat.completionsparsez1.50.0z1.92.0)r   r   r   r   r   r   r    )r   r   r   r   r   r   zopenai.resources.responses	Responsesz1.66.0AsyncResponseszopenai.resources.embeddings
Embeddings	embeddingAsyncEmbeddingsc                       e Zd Z	 	 	 	 	 	 ddee         dee         dee         dee         dee         dee         ded	dfd
Zd	efdZd	efdZdS )OpenAiArgsExtractorNmetadatanamelangfuse_promptlangfuse_public_keytrace_idparent_observation_idkwargsreturnc                 V   i | _         d|vr|nYi |pi dt          |d                   r5t          |d         t                    r|d                                         n|d         i| j         d<   || j         d<   || j         d<   || j         d<   || j         d<   || j         d<   || _        d S )Nresponse_formatr:   r;   r=   r<   r>   r?   )argsr   
issubclassr   model_json_schemar@   )selfr:   r;   r<   r=   r>   r?   r@   s           r)   __init__zOpenAiArgsExtractor.__init__   s     	 !.. H>r!6"3455$/v&78)DD$/6*;#<#N#N#P#P#P -.  		* !	&+>	'('6	#$ (	*-B	)*r(   c                 "    i | j         | j        S N)rD   r@   rG   s    r)   get_langfuse_argsz%OpenAiArgsExtractor.get_langfuse_args   s    +$)+t{++r(   c                     | j                             dd          rS| j                            dd           i n| j        d         | j         d<   | j         d                             dd            | j         S )NstoreFr:   rC   )r@   getrD   poprK   s    r)   get_openai_argsz#OpenAiArgsExtractor.get_openai_args   st     ;??7E** 	AimmJ55=49ZCX K
# K
#''(94@@@{r(   )NNNNNN)	r!   r"   r#   r	   r   r$   rH   rL   rQ   r'   r(   r)   r9   r9      s         #'" -1"&/3 3- sm "
	 &c] 3-  (}  
   @,3 , , , ,      r(   r9   funcrA   c                 0     dt           dt           f fd}|S )Nopen_ai_definitionsrA   c           
      ^     dt           dt           dt           dt           dt           f
 fd}|S )NwrappedinstancerD   r@   rA   c                       | ||          S rJ   r'   )rV   rW   rD   r@   rR   rT   s       r)   wrapperz:_langfuse_wrapper.<locals>._with_langfuse.<locals>.wrapper   s    4+WdFCCCr(   r   )rT   rY   rR   s   ` r)   _with_langfusez)_langfuse_wrapper.<locals>._with_langfuse   s]    	DS 	DC 	Ds 	DC 	DC 	D 	D 	D 	D 	D 	D 	D r(   rZ   )rR   r[   s   ` r)   _langfuse_wrapperr\      s7    C C       r(   r@   c                 L   |                      dd           }|                      dd           }t          |t                    rd }t          |t                    rd }||S |d|iS t          |t                    r
d|dd|dgS t          |t                    rd|dg|S ||dS )Ninputinstructionssystem)rolecontentuser)r_   r^   )rO   
isinstancer   r$   list)r@   input_valuer_   s      r)   _extract_responses_promptrg      s    **Wd++K::nd33L+x(( ,)) --+s## 
,7744
 	

 +t$$ K!l;;JkJJ(;???r(   c                    i }|                      d          |                    d| d         i           |                      d          |                    d| d         i           |                      d          |                    d| d         i           |r7|                    dd |                      dg           D             i           |S d |                      dg           D             S )zfExtracts the user input from prompts. Returns an array of messages or dict with messages and functions	functionsNfunction_calltoolsmessagesc                 ,    g | ]}t          |          S r'   _process_message.0messages     r)   
<listcomp>z(_extract_chat_prompt.<locals>.<listcomp>&  s.       29$W--  r(   c                 ,    g | ]}t          |          S r'   rn   rp   s     r)   rs   z(_extract_chat_prompt.<locals>.<listcomp>.  s!    TTTg ))TTTr(   )rO   update)r@   prompts     r)   _extract_chat_promptrw     s   Fzz+*{F;$78999zz/"".(?@AAAzz'&ww0111 U  =CZZ
TV=W=W  	
 	
 	
  UTJPR9S9STTTTr(   rr   c                    t          | t                    s| S i | }|                    dd           }t          |t                    s|S g }|D ]}|                    d          dk    r|                    di                               dd           }|                    di                               dd          }|1d| d| }|                    dt          |	          |d
d           |                    |           ||d<   |S )Nrb   r   input_audiodataformatwavdata:audio/;base64,base64_data_uri)rz   r{   )r   ry   )rd   dictrO   re   appendr   )rr   processed_messagerb   processed_contentcontent_partaudio_base64r{   r   s           r)   ro   ro   1  sN   gt$$ #7##It44Ggt$$ !   3 3F##}44'++M2>>BB64PPL!%%mR88<<XuMMF'"N"N"N"N"N!(( -$1/$R$R$R&,( (    $$\2222#4i r(   c                 l   d|                      dd          i}d}|                      d          |                    d| d         i           |                      d          |                    d| d         i           |                      d          \| d         j        }d|v rK|d         Cd|                     dd	           d
|                     dd           }t          |          |d<   |                    d|                      dd          i           ||                    d|i           |S )z*Extracts the llm output from the response.ra   Nrj   
tool_callsaudiorz   r}   r{   r|   r~   r   rb   )rO   ru   __dict__r   )r@   responser   r   s       r)   _extract_chat_responser   V  sM    	

64((H Ezz/"".&*ABCCCzz,+vl';<===zz'&w(U??uV}8iEIIh,F,FiiPUPYPYZ`bfPgPgiiO)/JJJE&MOOvzz)T22	
   %()))Or(   resourcec                    | j         dk    rdnd}|                    d|          }||}|$t          |t                    st	          d          |                    dd           }|$t          |t                    st	          d          |                    dd           }|$t          |t                    st	          d	          |                    d
d           }|$t          |t                    st	          d          |                    dd           }|$t          |t                    st	          d          |                    dd           }|=t          |t
                    rt          d |D                       st	          d          |                    dd           }	|	$t          |	t                    st	          d          |	|t          d          |                    di           }
|
Vt          |
t                    sAt          |
t                    s,t          |
t                    r|
                                }
ni }
|                    dd           pd }d }| j         dk    r|                    dd           }nb| j        dk    s| j        dk    rt          |          }n<| j         dk    rt          |          }n!| j         dk    r|                    dd           }t          |                    dd          t                    s|                    dd          nd}t          |                    dt          d                    t                    s#|                    dt          d                    nt          d          }t          |                    d t          d                    t                    s|                    d d           nd }t          |                    d!d          t                    s|                    d!d          nd}t          |                    d"d#          t                    s|                    d"d#          nd#}t          |                    d$d#          t                    s|                    d$d#          nd#}t          |                    d%d           t                    s|                    d%d           nd }t          |                    d&d          t                    s|                    d&d          nd}| j         dk    rt          |                    d'd           t                    s|                    d'd           nd }t          |                    d(d)          t                    s|                    d(d)          nd)}i }|||d'<   |d)k    r||d(<   nN|||||d*}||                    dd            ||d <   | t          |t"                    r|dk    r||d&<   |||d%<   |                    d+d           }||
|||	||||pd |d,
S )-Nr6   zOpenAI-embeddingzOpenAI-generationr;   zname must be a stringr=   z$langfuse_public_key must be a stringr>   ztrace_id must be a string
session_idzsession_id must be a stringuser_idzuser_id must be a stringtagsc              3   @   K   | ]}t          |t                    V  d S rJ   )rd   r$   )rq   tags     r)   	<genexpr>z1_get_langfuse_data_from_kwargs.<locals>.<genexpr>  s,      -S-Ssjc.B.B-S-S-S-S-S-Sr(   ztags must be a list of stringsr?   z&parent_observation_id must be a stringz1parent_observation_id requires trace_id to be setr:   modelr/   rv   r3   r4   r-   r^   temperature   
max_tokensinfmax_completion_tokenstop_pfrequency_penaltyr   presence_penaltyseedn
dimensionsencoding_formatfloat)r   r   r   r   r   r<   )
r;   r:   r=   r>   r?   r   r^   model_parametersr   rv   )r   rO   rd   r$   	TypeErrorre   all
ValueErrorr   r   r   
model_dumpr   rg   rw   r   rP   int)r   r@   default_namer;   r=   r>   r   r   r   r?   r:   r   rv   parsed_temperatureparsed_max_tokensparsed_max_completion_tokensparsed_top_pparsed_frequency_penaltyparsed_presence_penaltyparsed_seedparsed_nparsed_dimensionsparsed_encoding_formatmodelParametersr<   s                            r)   _get_langfuse_data_from_kwargsr   w  sx   &m{::@S  ::fl++D|
4 5 5/000 **%:DAA&z:Ms/S/S&>???zz*d++HJx$=$=3444L$//JjS&A&A5666jjD))G:gs#;#;2333::fd##DtT"" *--S-Sd-S-S-S*S*S  8999"JJ'>EE(<QSV1W1W(@AAA(X-=LMMMzz*b))H8X.. 	8T** 	 h	** 	**,,HHHJJw%%-EF}$$Hd++	K	'	'8?>N+N+N*622	&	 	 %f--	+	%	%GT** &**]A66AA	

=!$$$  &**\5<<@@(KK	

<u...5\\  &**%<eEllKKXVV	

*D111 ! &**Wa00(;;	

7A  &**%8!<<hGG	

&***  &**%7;;XFF	

%q)))  &**VT22H==	

64     *4FJJsA4F4F)Q)QXvzz#q!!!WXH}## fjjt<<hGGFJJ|T*** 	 fjj):GDDhOOFJJ('222 	 (,=OL)!W,,1GO-. .+!!9 7
 
 (3d3337SO34Jx$=$=(Q,,#+OC "&1OF#jj!2D99O 2!6+$!  r(   
generationcompletion_start_timer   usager:   c                     | |d}|||d<   |||d<   |$t          |          |d<   t          |          |d<    |j        di | d S )N)outputr   r   r:   usage_detailscost_detailsr'   )_parse_usage_parse_costru   )r/   r   r   r   r   r:   ru   s          r)   _create_langfuse_updater     s     !6 F w%z".u"5"5!,U!3!3~Jr(   c                    | d S t          | t                    r|                                 n| j                                        }dD ]_}||v rY||         Qt          ||         t                    r||         n||         j        }d |                                D             ||<   `t          |          dk    rd|v rd|v r
d|d         iS |S )N)prompt_tokens_detailscompletion_tokens_detailsinput_tokens_detailsoutput_tokens_detailsc                     i | ]
\  }}|||S rJ   r'   )rq   kvs      r)   
<dictcomp>z _parse_usage.<locals>.<dictcomp>C  s&     * * *A1r(      prompt_tokenstotal_tokensr^   )rd   r   copyr   itemslen)r   
usage_dicttokens_detailstokens_details_dicts       r)   r   r   1  s   }!+E4!8!8Sen>Q>Q>S>SJ   Z''J~,F,R j8$??9
>**/8  
* *!4!:!:!<!<* * *J~&
 	J1z))j(( O455r(   c                     | d S t          | d          r5t          t          | d          t                    rdt          | d          iS d S )Ncosttotal)hasattrrd   getattrr   )r   s    r)   r   r   R  sU    } uf 1*WUF-C-CU"K"K 1//004r(   chunksc                    d\  }}}i }| D ]}|j         }|                    dd           x}r|                    dd           pt          |dd           }|j         }|                    d          }|                                D ]_\  }	}
|	dvr|
||	<   |	dk    rK|
}t	          |t
                    s|}.t          |          dk    r|}Dt          |          dk    r|d         }`||||fS )	NNNNr   r   r   )
created_atr   r   r   textr   r   r   )r   rO   r   r   rd   re   r   )r   r/   r   r   r:   	raw_chunkchunkraw_responser   keyvalr   s               r)   '_extract_streamed_response_api_responser   ^  s   /JuH / /	" 99Z666< 	/IIgt,,Tgt0T0TE#,HLL))E$NN,, / /SPPP$'HSM(?? F%fd33 /%+

Vq%+

V))%+AY
:uh//r(   c           
      Z   | j         dk    rt          d           ndd\  }}}|D ]V}t                      r|j        }|p|                    dd           pd }|                    dd           }||}|                    dg           }|D ]}t                      r|j        }| j         dk    r|                    dd           }	|                    d	d           }
|
|
}t                      r	|	|	j        }	|	i }	|	                    d
d           |	d
         d
<   |	                    dd           Bd         |	                    dd           nd         |	                    dd           z   d<   n|	                    dd           d         }|	                    dd           }|s(t          |dd          t          |dd          dd<   n|d         pt          |dd           |d<   |dxx         t          |dd          z  cc<   nI|	                    dd           2t          |	                    d                    dk    rd         }t          |	                    dd           d         dd           }|s(t          |dd          t          |dd          dgd<   nt          |dd           7|                    t          |dd           t          |dd           d           nf|d         d         pt          |dd           |d         d<   |d         d         d|d         d<   |d         dxx         t          |dd          z  cc<   | j         dk    r|                    dd          z  Xdt          ffd}|| j         dk    r
 |            n||d	|ind fS )Nr-   c                      d S rJ   r'   r'   r(   r)   <lambda>z3_extract_streamed_openai_response.<locals>.<lambda>{  s    $ r(    r   r   r   choicesdeltafinish_reasonra   rb   rj   r;   	arguments)r;   r   r   r   functionr/   r   rA   c                  x     d         p1 d         o
d d         dp d         odd  d         D             dpd S )Nrb   rj   	assistant)ra   rj   r   c                     g | ]}d |iS )r   r'   )rq   rz   s     r)   rs   zT_extract_streamed_openai_response.<locals>.get_response_for_chat.<locals>.<listcomp>  s*     # # #/3T*# # #r(   )ra   r   r'   )r/   s   r)   get_response_for_chatz@_extract_streamed_openai_response.<locals>.get_response_for_chat  s    y! ?+ '%/%@  <( '# #7A,7O# # # $ '	
r(   )	r   r   _is_openai_v1r   rO   r   r   r   r   )r   r   r   r   r   r   chunk_usager   choicer   choice_finish_reasoncurrtool_call_chunkr   r/   s                 @r)   !_extract_streamed_openai_responser   z  s   3;=F3J3Jk,,///PRJ"2E5- [5 [5?? 	#NE97D119Tii.."E))Ir** P	5 P	5F )}&&

7D11'-zz/4'H'H$'3$8M ?? +u'8!NE=E99VT**6).vJv&99Y--9 &i08 		)T222'	2UYYy$5O5OO y))
 YY55A%o6D&+ii&F&FO 
W$+OVR$H$H)0+r)R)R7 7
?33 (,F| (w+VT8 8V [)))W_kSU-V-VV)))) IIlD11=EIIl3344q88%l3D&-		,55a8*d' 'O    )0(L(L-4_kSU-V-V 4
<00 !&$??K(/(N(N-4$3[$." ."     ,08F+; ,w+VT@ @R(  8K0846DH[1R---+["2 2 --- },,fjj444
aP	5d
3 
 
 
 
 
 
0 	#+=F#:#:
,9,E-((4	 r(   r   c                    |dS |                     dd           pd }d }| j        dk    r^|                     dg           }t          |          dk    r3|d         }t                      r|j        n|                     dd           }n| j        dk    s| j        d	k    rc|                     d
i           }t          |t                    s|}nZt          |          dk    r|}nCt          |          dk    r|d         }n&| j        dk    r|                     dg           }t          |          dk    ret          |          dk    rd |D             }n|d         }t                      rt          |j	        j
                  n|                     dd           }n| j        dk    r|                     dg           }t          |          dk    rX|d         }t          |d          r|j        n|                     dg           }	|	rt          |	          ndt          |          d}t          |                     dd                     }
|||
fS )N)Nz(<NoneType response returned from OpenAI>Nr   r/   r   r   r   r   r3   r4   r   r   r-   c                     g | ]?}t                      rt          |j        j                  n|                    d d          @S )rr   N)r   r   rr   r   rO   )rq   r   s     r)   rs   z<_get_langfuse_data_from_default_response.<locals>.<listcomp>  sW         %5*6>+BCCCIt44  r(   rr   r6   rz   )r   countr   )rO   r   r   r   r   r   rd   re   r   rr   r   r   r6   r   )r   r   r   r/   r   r   r   rz   first_embeddingembedding_vectorr   s              r)   (_get_langfuse_data_from_default_responser     so    EELL$''/4EJ}$$,,y"--w<<!R[F(5UVZZPT=U=UJ	K	'	'8?>N+N+Nh++&$'' 	#JJ[[1__JJ[[AJ	&	 	 ,,y"--w<<!7||a  #*	  

 ! %5*6>+BCCCIt44  
+	%	%||FB''t99q=="1gO ?K88:))$((b99  8HNc"2333QT J
 gt4455E:u%%r(   c                  V    t          t          j                  t          d          k    S )Nz1.0.0)r   r*   __version__r'   r(   r)   r   r   ;  s     6%&&''*:*:::r(   c                 
   t          | t          j                  pit          | t          j                  pOt	                      ot          | t
          j                  p't	                      ot          | t
          j                  S rJ   )rd   typesGeneratorTypeAsyncGeneratorTyper   r*   StreamAsyncStream)r   s    r)   _is_streaming_responser  ?  sl    8U011 	Jh 899	JOOC
8V] C C	J OOH
8V5G H H	r(   c                  @   t                      sd S t          st          j        j        t          j        j        dt          dt          ffd} dt          dt          ffd}t          t          j        d|            t          t          j        d|           dad S d S )NrG   rA   c              3      K   	  |           E d {V  t          | dd           }| |             d S d S # t          | dd           }| |             w w xY wN_langfuse_finalize_oncer   )rG   finalize_onceoriginal_iters     r)   traced_iterz;_install_openai_stream_iteration_hooks.<locals>.traced_iterU  s      $(=......... '.G N N ,!MOOOOO -, !(.G N N ,!MOOOO -s	   7  Ac                   K   	  |           2 3 d {V }|W V  6 	 t          | dd           }| |             d {V  d S d S # t          | dd           }| |             d {V  w w xY wr  r
  )rG   itemr  original_aiters      r)   traced_aiterz<_install_openai_stream_iteration_hooks.<locals>.traced_aiter]  s      *"0."6"6       $JJJJJ #7"6 !(.G N N ,'-//))))))))) -, !(.G N N ,'-//)))))))) -s   A A &A,__iter__	__aiter__T)	r   "_openai_stream_iter_hook_installedr*   r  r  r  r  r   setattr)r  r  r  r  s     @@r)   &_install_openai_stream_iteration_hooksr  K  s     ?? - 2.+5	$c 	$c 	$ 	$ 	$ 	$ 	$ 	$	*S 	*S 	* 	* 	* 	* 	* 	* 	z;777"K>>>-1***/2 2r(   r   c                 "   	 | j         dk    s| j         dk    rt          |          nt          | |          \  }}}}t          ||||||           n# t          $ r Y nw xY w|                                 d S # |                                 w xY w)Nr3   r4   )r   r   r:   )r   r   r   r   	Exceptionend)r   r   r   r   r   r/   r   r:   s           r)   _finalize_stream_responser  k  s     +--DT1T1T 4E:::28UCC 	+z5( 	 !	
 	
 	
 	
 	
     	
s*   AA A8 
AA8 AA8 8Bc                    	
 t          |d          st           |          S g 	|j        
d d|j        d	 fd|_        dt
          f	
fd}dt
          ffd} |            |_        ||_        |S )	N	_iteratorr   r   r   FrA   c                  :    rd S dt                      d S NT)r   r   r   r   r  r   r   is_finalizedr   r   s   r)   r  z0_instrument_openai_stream.<locals>.finalize_once  sB     	F!!"7		
 	
 	
 	
 	
 	
r(   c               3      K   	 D ]+}                      |            t                      | V  ,	               d S #               w xY wrJ   r   r   r  r   r  r   raw_iterators    r)   traced_iteratorz2_instrument_openai_stream.<locals>.traced_iterator  sp      		$  T"""(0,:,<,<)



 MOOOOOMMOOOOs   .A   Ac                  L    	                             S #               w xY wrJ   r'   closer  s   r)   traced_closez/_instrument_openai_stream.<locals>.traced_close  s.    	577MOOOOMMOOOOs   	 #rA   N)r   LangfuseResponseGeneratorSyncr  r*  r	  r   )r   r   r   r'  r+  r*  r   r  r"  r   r&  s   ` `  @@@@@@r)   _instrument_openai_streamr.    s    8[)) 
,!
 
 
 	
 E%L04LNE
 
 
 
 
 
 
 
 
 
 (5H$S         #        )**H!HNOr(   c                 6   	
 t          |d          st           |          S g 	|j        
d d|j        d		 fd|_        dt
          f	
fd}dt
          ffddt
          ffd} |            |_        |_        ||_        |S )
Nr  r  FrA   c                  >   K   rd S dt                      d S r  r   r!  s   r)   r  z6_instrument_openai_async_stream.<locals>.finalize_once  sF       	F!!"7		
 	
 	
 	
 	
 	
r(   c                    K   	 2 3 d {V }                      |            t                      | W V  26 	               d {V  d S #               d {V  w xY wrJ   r$  r%  s    r)   r'  z8_instrument_openai_async_stream.<locals>.traced_iterator  s      		"*       dT"""(0,:,<,<)




 +l  -//!!!!!!!!!--//!!!!!!!!s   A 9-A Ac                  v   K   	                d {V 	               d {V  S #               d {V  w xY wrJ   r'   r)  s   r)   r+  z5_instrument_openai_async_stream.<locals>.traced_close  si      	"====== -//!!!!!!!!--//!!!!!!!!s   & 8c                  (   K                  d {V S rJ   r'   )r+  s   r)   traced_aclosez6_instrument_openai_async_stream.<locals>.traced_aclose  s%      !\^^#######r(   r,  )r   LangfuseResponseGeneratorAsyncr  r*  r	  r   aclose)r   r   r   r'  r4  r*  r   r  r"  r   r&  r+  s   ` `  @@@@@@@r)   _instrument_openai_async_streamr7    sD    8[)) 
-!
 
 
 	
 E%L04LNE
 
 
 
 
 
 
 
 
 
 (5H$"3 " " " " " " " " "" " " " " " " "$ $ $ $ $ $ $ )**H!HN#HOOr(   open_ai_resourcerV   rD   c                 8   t          |i |}|                                }t          | |          }t          |d                   }| j        dk    rdnd}|                    ||d         |                    dd           |                    dd           |                    dd           t          t          |                    d	d                     t          t          |                    d
d                     d|                    dd           |                    dd                     }		  |di |	                                }
t                      r,t          |
t          j                  rt          | |
|	          S t          |
          rt!          | |
|	          S t#          | t                      r	|
o|
j        n|
          \  }}}|	                    |||t)          |
d          rt+          |
j                  nd                                            |
S # t0          $ ro}t3          j        |           |                    dd           pd }|	                    t          |          d|dddd                                           |d }~ww xY w)Nr=   
public_keyr6   r   r;   r^   r:   r   r>   r?   r>   parent_span_idr   rv   )as_typer;   r^   r:   r   trace_contextr   rv   r  r   )r   r   r   r   ERRORr   r^   r   r   status_messagelevelr   r   r'   )r9   rL   r   r   r   start_observationrO   r
   r$   rQ   r   rd   r*   r  r.  r  r-  r   r   ru   r   r   r   r  r  loggerwarningr8  rV   rD   r@   arg_extractorlangfuse_argslangfuse_datalangfuse_clientobservation_typer   openai_responser   r/   r   exs                  r)   _wraprP    s    (888M!3355M23C]SSM M:O,PQQQO (,;;  !22 6".."":t44&**+=tDDS-"3"3J"E"EFF"]&&'>EE 
 
 ..  400 3  J ,!'DDM$A$A$C$CDD?? 	z/6=II 	,)(%   
 $O44 	0)(%    (P  ??%=_%=$	( ($E:u !#?G44[)>???    ceee 
 
 
r

7D))1Tr77#$A>>	 	 	
 	

 #%%%
s'   /AH   H  $A;H   
J*A*JJc                 J  K   t          |i |}|                                }t          | |          }t          |d                   }| j        dk    rdnd}|                    ||d         |                    dd           |                    dd           t          t          |                    dd                     t          t          |                    d	d                     d
|                    dd           |                    dd           |                    dd                     }		  |di |	                                 d {V }
t                      r,t          |
t          j                  rt          | |
|	          S t          |
          rt!          | |
|	          S t#          | t                      r	|
o|
j        n|
          \  }}}|	                    ||||t)          |
d          rt+          |
j                  nd                                            |
S # t0          $ ro}t3          j        |           |                    dd           pd }|	                    t          |          d|dddd                                           |d }~ww xY w)Nr=   r:  r6   r   r;   r^   r:   r>   r?   r<  r   r   rv   )r>  r;   r^   r:   r?  r   r   rv   r  r   )r   r   r   r   r   r@  r   rA  rB  r'   )r9   rL   r   r   r   rE  rO   r
   r$   rQ   r   rd   r*   r  r7  r  r5  r   r   ru   r   r   r   r  r  rF  rG  rH  s                  r)   _wrap_asyncrR  N  s
      (888M!3355M23C]SSM M:O,PQQQO (,;;  !22 6".."":t44S-"3"3J"E"EFF"]&&'>EE 
 
 '**+=tDD..  400 3  J , ' J J-*G*G*I*I J JJJJJJJ?? 	z/6;MNN 	2)(%   
 $O44 	1)(%    (P  ??%=_%=$	( ($E:u !#?G44[)>???    ceee 
 
 
r

7D))1Tr77#$A>>	 	 	
 	

 #%%%
s'   1AH)  H) ,A<H) )
J"3A*JJ"c                     t                      rt          nt          } | D ]}|j        0t	          t
          j                  t	          |j                  k     r9|j        0t	          t
          j                  t	          |j                  k    rpt          |j	        |j
         d|j         |j        rt          |          nt          |                     d S )N.)r   OPENAI_METHODS_V1OPENAI_METHODS_V0r   r   r*   r   r    r   r   r   r   r   rP  rR  )	resourcesr   s     r)   register_tracingrX    s    %2__K!!:KI 
 
+8J0K0Kg O
 O
 1
 1
 +8J0K0Kw P
 P
 1
 1
 O2222'}GE(OOO+h2G2G	
 	
 	
 	

 
r(   c                   r    e Zd ZdedededdfdZdefdZdefdZdefd	Zd
edededdfdZddZ	ddZ
dS )r-  r   r   r   rA   Nc                Z    g | _         || _        || _        || _        d | _        d| _        d S NFr   r   r   r   r   _is_finalizedrG   r   r   r   s       r)   rH   z&LangfuseResponseGeneratorSync.__init__  6     !#
  $9=""r(   c              #      K   	 | j         D ]:}| j                            |           | j        t	                      | _        |V  ;	 |                                  d S # |                                  w xY wrJ   r   r   r   r   r   	_finalizerG   is     r)   r  z&LangfuseResponseGeneratorSync.__iter__  s      		]  
!!!$$$-51?1A1AD. NNDNNs   AA A3c                     	 | j                                         }| j                            |           | j        t                      | _        |S # t          $ r |                                   w xY wrJ   )r   __next__r   r   r   r   StopIterationrb  rG   r  s     r)   rf  z&LangfuseResponseGeneratorSync.__next__  sz    	=))++DJd###)1-;-=-=*K 	 	 	NN	s   AA  A1c                 *    |                                  S rJ   )r  rK   s    r)   	__enter__z'LangfuseResponseGeneratorSync.__enter__  s    }}r(   exc_type	exc_value	tracebackc                 .    |                                   d S rJ   )r*  rG   rk  rl  rm  s       r)   __exit__z&LangfuseResponseGeneratorSync.__exit__  s    

r(   c                     t          | j        dd           }	 t          |          r
 |             |                                  d S # |                                  w xY w)Nr*  )r   r   callablerb  )rG   r*  s     r)   r*  z#LangfuseResponseGeneratorSync.close  s_    w55	 NNDNNs   A Ac                 t    | j         rd S d| _         t          | j        | j        | j        | j                   d S r  r]  r  r   r   r   r   rK   s    r)   rb  z'LangfuseResponseGeneratorSync._finalize  sP     	F!!]*"&"<		
 	
 	
 	
 	
 	
r(   r,  )r!   r"   r#   r   rH   r  rf  rj  rp  r*  rb  r'   r(   r)   r-  r-    s        # # 	#
 # 
# # # #
# 
 
 
 
#    3              

 

 

 

 

 

r(   r-  c                   z    e Zd ZdedededdfdZdefdZdefdZdefd	Zd
edededdfdZddZ	ddZ
ddZdS )r5  r   r   r   rA   Nc                Z    g | _         || _        || _        || _        d | _        d| _        d S r[  r\  r^  s       r)   rH   z'LangfuseResponseGeneratorAsync.__init__  r_  r(   c                  K   	 | j         2 3 d {V }| j                            |           | j        t	                      | _        |W V  A6 	 |                                  d {V  d S # |                                  d {V  w xY wrJ   ra  rc  s     r)   r  z(LangfuseResponseGeneratorAsync.__aiter__  s      		#=       a
!!!$$$-51?1A1AD. )= .."""""""""""$..""""""""""s   A* A<A* *Bc                   K   	 | j                                          d {V }| j                            |           | j        t                      | _        |S # t          $ r |                                  d {V   w xY wrJ   )r   	__anext__r   r   r   r   StopAsyncIterationrb  rh  s     r)   ry  z(LangfuseResponseGeneratorAsync.__anext__  s      	0022222222DJd###)1-;-=-=*K! 	 	 	.."""""""""	s   AA &A?c                 .   K   |                                  S rJ   )r  rK   s    r)   
__aenter__z)LangfuseResponseGeneratorAsync.__aenter__&  s      ~~r(   rk  rl  rm  c                 >   K   |                                   d {V  d S rJ   )r6  ro  s       r)   	__aexit__z(LangfuseResponseGeneratorAsync.__aexit__)  s,      kkmmr(   c                 x   K   | j         rd S d| _         t          | j        | j        | j        | j                   d S r  rt  rK   s    r)   rb  z(LangfuseResponseGeneratorAsync._finalize,  sT       	F!!]*"&"<		
 	
 	
 	
 	
 	
r(   c                   K   t          | j        dd          }t          | j        dd          }	 t          |          r" |            }t          |          r| d{V  n0t          |          r! |            }t          |          r| d{V  |                                  d{V  dS # |                                  d{V  w xY w)Close the response and release the connection.

        Automatically called if the response body is read to completion.
        r*  Nr6  r   r   rr  r   rb  )rG   r*  r6  results       r)   r*  z$LangfuseResponseGeneratorAsync.close8  s      
 w55$77
	# !v&& ! LLLLLLL&!! !v&& ! LLLLLLL.."""""""""""$..""""""""""   A!B- -C	c                   K   t          | j        dd          }t          | j        dd          }	 t          |          r" |            }t          |          r| d{V  n0t          |          r! |            }t          |          r| d{V  |                                  d{V  dS # |                                  d{V  w xY w)r  r6  Nr*  r  )rG   r6  r*  r  s       r)   r6  z%LangfuseResponseGeneratorAsync.acloseL  s      
 $77w55
	# !v&& ! LLLLLLL% !v&& ! LLLLLLL.."""""""""""$..""""""""""r  r,  )r!   r"   r#   r   rH   r  ry  r|  r~  rb  r*  r6  r'   r(   r)   r5  r5    s       # # 	#
 # 
# # # #
# 
# 
# 
# 
#     #           PT    

 

 

 

# # # #(# # # # # #r(   r5  r   rJ   r,  )G__doc__r   collectionsr   dataclassesr   r   inspectr   r   typingr   r	   r
   openai._typesr   packaging.versionr   pydanticr   wraptr   langfuse._client.get_clientr   langfuse._client.spanr   langfuse._utilsr   langfuse.loggerr   rF  langfuse.mediar   r*   r   r   r   r   ImportErrorModuleNotFoundErrorr   rV  rU  r9   r\   rg   rw   ro   r   r   r$   r   r   r   r   r   r   r&   r   r  r  r  re   r  r.  r7  rP  rR  rX  r-  r5  r'   r(   r)   <module>r     s	   &  # # # # # # ! ! ! ! ! !       ( ( ( ( ( ( ( ( & & & & & & & & & & " " " " " " % % % % % %       ' ' ' ' ' ' 2 2 2 2 2 2 4 4 4 4 4 4 * * * * * * 5 5 5 5 5 5 ( ( ( ( ( (MMMIIIIIIIIIIIII   

I   & & & & & & & &       & 2   -   2!   -!   7   7!   2   2!   +   +   +   +   ,   ,   Mm `0 0 0 0 0 0 0 0fC C    @c @c @ @ @ @8U U U U U U8"c "c " " " "J3 3    B^-= ^s ^s ^ ^ ^ ^J  "    "    C=	 
 C=  sm  	       2      B	 	x} 	 	 	 	 	0C 0C 0 0 0 08} }S }S } } } }@>&>&*->&>& >& >& >&B;t ; ; ; ;S T     &+ "2 2 2 2@ 9 #	
 $H- 
   888 8 #	8
 	8 8 8 8v<< < #	<
 	< < < <~ I&I14I<?IILII I I IX I&I14I<?IILII I I IX
 
 
 
*      & & ( ( (D
 D
 D
 D
 D
 D
 D
 D
Nc# c# c# c# c# c# c# c# c# c#s   "A3 3B