
    g                    $   d dl mZ d dlmZmZ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mZ erd dlmZ d dlmZ ddlmZ dZddZddZ G d de      Z	 d dl m!Z!  G d de      Z"ddZ$ddZ%y# e#$ r eZ"Y w xY w)    )annotations)TYPE_CHECKINGAnycastN)LegacyAPIResponse)ChatCompletion)ChatCompletionChunk)
Completion)CreateEmbeddingResponse)ImagesResponse   )EndpointConfigStreamState)FinalRequestOptions)	ResponseT   )LogfireSpan)get_endpoint_configon_responseis_async_clientc                *   | j                   }| j                  }t        |t              si }|dk(  rt	        dd|it
              S |dk(  rt	        dd|it              S |dk(  rt	        dd|i	      S |d
k(  rt	        dd|i	      S t	        d||d	      S )z<Returns the endpoint config for OpenAI depending on the url.z/chat/completionsz,Chat Completion with {request_data[model]!r}request_data)message_template	span_datastream_state_clsz/completionsz'Completion with {request_data[model]!r}z/embeddingsz/Embedding Creation with {request_data[model]!r})r   r   z/images/generationsz-Image Generation with {request_data[model]!r}zOpenAI API call to {url!r})r   url)r   	json_data
isinstancedictr   OpenaiChatCompletionStreamStateOpenaiCompletionStreamState)optionsr   r   s      h/var/www/openai/venv/lib/python3.12/site-packages/logfire/_internal/integrations/llm_providers/openai.pyr   r      s    
++C!!Ii&	
!!K%y1<
 	

 
	F%y18
 	

 
	N%y1
 	
 
%	%L%y1
 	

 9'0=
 	
    c                R    | r%| j                   r| j                   d   j                  S y )Nr   )choicestext)chunks    r#   content_from_completionsr)   B   s#    }}Q$$$r$   c                  "    e Zd Zd ZddZddZy)r!   c                    g | _         y N)_contentselfs    r#   __init__z$OpenaiCompletionStreamState.__init__I   s	    #%r$   c                V    t        |      }|r| j                  j                  |       y y r,   )r)   r-   append)r/   r(   contents      r#   record_chunkz(OpenaiCompletionStreamState.record_chunkL   s&    *51MM  ) r$   c                d    dj                  | j                        t        | j                        dS )N combined_chunk_contentchunk_count)joinr-   lenr.   s    r#   get_response_dataz-OpenaiCompletionStreamState.get_response_dataQ   s'    *,''$--*@QTUYUbUbQcddr$   N)r(   r
   returnNoner=   r   __name__
__module____qualname__r0   r4   r<    r$   r#   r!   r!   H   s    &*
er$   r!   )ChatCompletionStreamStatec                  "    e Zd Zd ZddZddZy)r    c                `    t        t        j                  t        j                        | _        y )N)input_toolsresponse_format)rE   openai	NOT_GIVEN_stream_stater.   s    r#   r0   z(OpenaiChatCompletionStreamState.__init__Z   s#    !: #,, & 0 0	"Dr$   c                :    | j                   j                  |       y r,   )rL   handle_chunk)r/   r(   s     r#   r4   z,OpenaiChatCompletionStreamState.record_chunkb   s    ++E2r$   c                    	 | j                   j                  }|j                  r|j                  d   j                  nd |j
                  dS # t        $ r dddcY S w xY w)Nr6   r   r7   messageusage)rL   current_completion_snapshotAssertionErrorr&   rQ   rR   )r/   final_completions     r#   r<   z1OpenaiChatCompletionStreamState.get_response_datae   sq    H#'#5#5#Q#Q  CSBZBZ+33A6>>`d)// 	 " H 35QGGHs   A AAN)r(   r	   r=   r>   r?   r@   rD   r$   r#   r    r    Y   s    		3
	r$   r    c                h   t        | t              r&t        | j                         |       t	        d|       S t        | t
              r8|j                  d| j                  d   j                  | j                  d       | S t        | t              rE| j                  d   }|j                  d|j                  |j                  | j                  d       | S t        | t              r |j                  dd| j                  i       | S t        | t              r|j                  dd| j                  i       | S )z/Updates the span based on the type of response.r   response_datar   rP   )finish_reasonr'   rR   rR   images)r   r   r   parser   r   set_attributer&   rQ   rR   r
   rX   r'   r   r   data)responsespanfirst_choices      r#   r   r   t   s   (-.HNN$d+K**(N+ ((+33hnnM	
 O 
Hj	)''**88,BSBS^f^l^lm	
 O	 
H5	6?Whnn,EF O 
Hn	-?Xx}},EFOr$   c                    t        | t        j                        ryt        | t        j                        s
J d|         y)z3Returns whether or not the `client` class is async.Fz*Expected OpenAI or AsyncOpenAI type, got: T)
issubclassrJ   OpenAIAsyncOpenAI)clients    r#   r   r      s;    &&--(ff001h5_`f_g3hh1r$   )r"   r   r=   r   )r(   zCompletion | Noner=   z
str | None)r]   r   r^   r   r=   r   )rd   z.type[openai.OpenAI] | type[openai.AsyncOpenAI])&
__future__r   typingr   r   r   rJ   openai._legacy_responser   !openai.types.chat.chat_completionr   'openai.types.chat.chat_completion_chunkr	   openai.types.completionr
   &openai.types.create_embedding_responser   openai.types.images_responser   typesr   r   openai._modelsr   openai._typesr   mainr   __all__r   r)   r!   &openai.lib.streaming.chat._completionsrE   r    ImportErrorr   r   rD   r$   r#   <module>rt      s    " + +  5 < G . J 7 .2'##
L
e+ 
eBP+ 609  B&A#Bs   +B BB