
    .h?5                       d dl mZ d dlZd dl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 	 d dlZn# e$ rZ ed          edZ[ww xY wd dlmZmZ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'm(Z(m)Z) ddl*m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA  G d de6          ZB G d d           ZCdS )!    )annotationsN)AsyncIterator)AnyLiteralcastoverload)ModelBehaviorErrorz`litellm` is required to use the LitellmModel. You can install it via the optional dependency group: `pip install 'openai-agents[litellm]'`.)	NOT_GIVENAsyncStreamNotGiven)ChatCompletionChunkChatCompletionMessageToolCall)
AnnotationAnnotationURLCitationChatCompletionMessage)Function)Response   )_debug)AgentOutputSchemaBase)Handoff)ModelResponseTResponseInputItemTResponseStreamEvent)logger)ModelSettings)	Converter)HEADERS)ChatCmplStreamHandler)FAKE_RESPONSES_ID)ModelModelTracing)Tool)generation_span)GenerationSpanData)Span)Usagec                  t    e Zd ZdZ	 	 d,d-dZd.dZd/dZed0d!            Zed1d$            Z	 d2d3d(Zd4d+Z	dS )5LitellmModelzThis class enables using any model via LiteLLM. LiteLLM allows you to acess OpenAPI,
    Anthropic, Gemini, Mistral, and many other models.
    See supported models here: [litellm models](https://docs.litellm.ai/docs/providers).
    Nmodelstrbase_url
str | Noneapi_keyc                0    || _         || _        || _        d S N)r*   r,   r.   )selfr*   r,   r.   s       c/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/extensions/models/litellm_model.py__init__zLitellmModel.__init__6   s     
     system_instructionsinputstr | list[TResponseInputItem]model_settingsr   tools
list[Tool]output_schemaAgentOutputSchemaBase | Nonehandoffslist[Handoff]tracingr"   previous_response_idreturnr   c	                  K   t          t          | j                  |                                t          | j        pd          ddz  |                                          5 }	|                     |||||||	|d	  	         d {V }
t          |
j        d         t          j
        j        j                  sJ t          j        rt          j        d           nNt          j        d	t#          j        |
j        d         j                                        d
           d           t+          |
d          r?|
j        }|
j        r"t/          d|j        |j        |j                  nt/                      }n"t/                      }t          j        d           |                                r/|
j        d         j                                        g|	j        _        |j        |j         d|	j        _        tC          j"        tF          $                    |
j        d         j                            }tK          ||d           cd d d            S # 1 swxY w Y   d S )N litellmr,   
model_implr*   model_configdisabledFstreamr   zReceived model responsez
LLM resp:
   indent
usage   )requestsinput_tokensoutput_tokenstotal_tokensz*No usage information returned from LitellmrS   rT   )outputrP   response_id)&r$   r+   r*   to_json_dictr,   is_disabled_fetch_response
isinstancechoicesrD   typesutilsChoicesr   DONT_LOG_MODEL_DATAr   debugjsondumpsmessage
model_dumphasattrrP   r'   prompt_tokenscompletion_tokensrU   warninginclude_data	span_datarW   rS   rT   r   message_to_output_itemsLitellmConverterconvert_message_to_openair   )r1   r5   r6   r8   r9   r;   r=   r?   r@   span_generationresponseresponse_usagerP   itemss                 r2   get_responsezLitellmModel.get_response@   s      dj//'4466t}2339MMN((**	
 
 
 :	
 !11# 2 
 
 
 
 
 
 
 
H h.q17=3F3NOOOOO) 67777d$*X-=a-@-H-S-S-U-U^_"`"`"`ddd   x)) M!)  ~!E!"%3%A&4&F%3%@	      KLLL##%% ^4<4DQ4G4O4Z4Z4\4\3])0 % 2!&!4/ /O%+
 5 ::8;KA;N;VWW E !   m:	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	 :	s   %GIII#AsyncIterator[TResponseStreamEvent]c              ~  K   t          t          | j                  |                                t          | j        pd          ddz  |                                          5 }	|                     |||||||	|d	  	         d {V \  }
}d }t          j        |
|          2 3 d {V }|W V  |j	        dk    r|j
        }6 |                                r!|r|                                g|	j        _        |r*|j        r#|j        j        |j        j        d|	j        _        d d d            d S # 1 swxY w Y   d S )	NrC   rD   rE   rG   TrJ   zresponse.completedrV   )r$   r+   r*   rY   r,   rZ   r[   r   handle_streamtyperq   rk   rf   rl   rW   rP   rS   rT   )r1   r5   r6   r8   r9   r;   r=   r?   r@   rp   rq   rK   final_responsechunks                 r2   stream_responsezLitellmModel.stream_response   s      dj//'4466t}2339MMN((**	
 
 
  	
 %)%9%9# &: 
& 
& 
  
  
  
  
  
 Hf /3N4B8VTT 4 4 4 4 4 4 4e:!555%*^N	  U ##%% Q. Q4B4M4M4O4O3P)0 ."6 $2$8$E%3%9%G3 3)/; 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	s   %?D2$C*A;D22D69D6spanSpan[GenerationSpanData]rK   Literal[True]1tuple[Response, AsyncStream[ChatCompletionChunk]]c
                
   K   d S r0    
r1   r5   r6   r8   r9   r;   r=   r|   r?   rK   s
             r2   r[   zLitellmModel._fetch_response   s       =@Cr4   Literal[False]!litellm.types.utils.ModelResponsec
                
   K   d S r0   r   r   s
             r2   r[   zLitellmModel._fetch_response   s       -0Cr4   FboolUlitellm.types.utils.ModelResponse | tuple[Response, AsyncStream[ChatCompletionChunk]]c
                  K   t          j        |          }
|r|
                    d|dd           |                                r|
|j        _        |j        r|rt          |          dk    rdn|j        du rdnd }t          j        |j	                  }t          j
        |          }|rd |D             ng }|D ])}|                    t          j        |                     *t          j        rt          j        d           nTt          j        d| j         d	t%          j        |
d
           dt%          j        |d
           d|	 d| d| d	           |j        r|j        j        nd }d }|	r|j        	d|j        i}i }|j        r
|j        |d<   |j        r
|j        |d<   t3          j        d(i d| j        d|
d|pd d|j        d|j        d|j        d|j        d|j        d|                      |          d|                      |          d|d|	d|d |d!i tB          |j"        pi d"| j#        d#| j$        | d {V }tK          |t2          j&        j'        j(                  r|S tS          tT          tW          j+                    | j        d$g |tX          k    rt[          t\          d%         |          nd&|j        |j        g |pd|j        '          }||fS ))Nr   system)contentroleTFc                6    g | ]}t          j        |          S r   )r   tool_to_openai.0tools     r2   
<listcomp>z0LitellmModel._fetch_response.<locals>.<listcomp>   s#    LLLd93D99LLLr4   zCalling LLMzCalling Litellm model: rO   rL   rM   z
Tools:
z	
Stream: z
Tool choice: z
Response format: include_usageextra_querymetadatar*   messagesr9   temperaturetop_pfrequency_penaltypresence_penalty
max_tokenstool_choiceresponse_formatparallel_tool_callsrK   stream_optionsreasoning_effortextra_headersr.   r,   rq   )autorequirednoner   )id
created_atr*   objectrW   r   r   r   r9   r   	reasoningr   )/r   items_to_messagesinsertrk   rl   r6   r   lenconvert_tool_choicer   convert_response_formatappendconvert_handoff_toolr   ra   r   rb   r*   rc   rd   r   effortr   r   r   rD   acompletionr   r   r   r   r   _remove_not_givenr   r   r.   r,   r\   r^   r_   r   r   r    timer
   r   r   )r1   r5   r6   r8   r9   r;   r=   r|   r?   rK   converted_messagesr   r   r   converted_toolshandoffr   r   extra_kwargsretrq   s                        r2   r[   zLitellmModel._fetch_response   sF      '8?? 	%%2$    !! 	6#5DN  16;@CE

Q D 1U::  	  3N4NOO#;MJJPU]LLeLLLL[] 	L 	LG""9#A'#J#JKKKK% 
	L''''L8$* 8 8:0;;;8 8:oa@@@8 8 "8 8 !,	8 8
 %48 8 8   ?M>V`>3::\` 	Mn2>-~/KLN% 	E*8*DL'" 	?'5'>L$' 
 
 
**
''
 ")T
 '22	

 !&&
 ->>
 ,<<
 &00
 ..{;;;
 !22?CCC
 !4 3
 6
 *>
 .-
 NWM)E)KMM
  LL!
" ]]%
 
 
 
 
 
 
 
* c7=.<== 	J y{{*i'' W%?@+NNN &&2 3 <u$.
 
 
 }r4   valuer   c                4    t          |t                    rd S |S r0   )r\   r   )r1   r   s     r2   r   zLitellmModel._remove_not_given:  s    eX&& 	4r4   )NN)r*   r+   r,   r-   r.   r-   )r5   r-   r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r?   r"   r@   r-   rA   r   )r5   r-   r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r?   r"   r@   r-   rA   ru   )r5   r-   r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r|   r}   r?   r"   rK   r~   rA   r   )r5   r-   r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r|   r}   r?   r"   rK   r   rA   r   )F)r5   r-   r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r|   r}   r?   r"   rK   r   rA   r   )r   r   rA   r   )
__name__
__module____qualname____doc__r3   rt   r{   r   r[   r   r   r4   r2   r)   r)   0   s           $"	    E E E EN, , , ,\ @ @ @ X@ 0 0 0 X0. g g g g gR     r4   r)   c                  V    e Zd Zedd            Zedd            Zedd            ZdS )rn   re   litellm.types.utils.MessagerA   r   c           
     \   |j         dk    rt          d|j                    |j        rd |j        D             nd }|                    dd           }|r|                    dd           nd }t	          |j        |d|                     |          |                    dd           |          S )N	assistantzUnsupported role: c                B    g | ]}t                               |          S r   )rn   convert_tool_call_to_openair   s     r2   r   z>LitellmConverter.convert_message_to_openai.<locals>.<listcomp>I  s'    ___D99$??___r4   provider_specific_fieldsrefusalaudio)r   r   r   r   r   
tool_calls)r   r	   r   getr   r   convert_annotations_to_openai)clsre   r   r   r   s        r2   ro   z*LitellmConverter.convert_message_to_openaiA  s     <;&&$%H',%H%HIII !__GL^____ 	 $+;;/I4#P#P =U_$((D999[_ 	 %O99'BB++gt,,!
 
 
 	
r4   list[Annotation] | Nonec                N    |                     dd           }|sd S d |D             S )Nr   c                    g | ]T}t          d t          |d          d         |d          d         |d          d         |d          d                             US )url_citationstart_index	end_indexurltitle)r   r   r   r   )rx   r   )r   r   )r   
annotations     r2   r   zBLitellmConverter.convert_annotations_to_openai.<locals>.<listcomp>f  s     
 
 
  #2 *> := I(8E">259$^4W=	    
 
 
r4   )r   )r   re   r   s      r2   r   z.LitellmConverter.convert_annotations_to_openai\  sT     X_WbWb4X
 X
  	4
 
 *
 
 
 	
r4   	tool_call1litellm.types.utils.ChatCompletionMessageToolCallr   c                z    t          |j        dt          |j        j        pd|j        j                            S )NfunctionrC   )name	arguments)r   rx   r   )r   r   r   r   r   r   )r   r   s     r2   r   z,LitellmConverter.convert_tool_call_to_openais  sK     -|',2i>P>Z  
 
 
 	
r4   N)re   r   rA   r   )re   r   rA   r   )r   r   rA   r   )r   r   r   classmethodro   r   r   r   r4   r2   rn   rn   @  sr        
 
 
 [
4 
 
 
 [
, 	
 	
 	
 [	
 	
 	
r4   rn   )D
__future__r   rc   r   collections.abcr   typingr   r   r   r   litellm.typesrD   agents.exceptionsr	   ImportError_eopenair
   r   r   openai.types.chatr   r   )openai.types.chat.chat_completion_messager   r   r   3openai.types.chat.chat_completion_message_tool_callr   openai.types.responsesr   rC   r   agent_outputr   r=   r   rs   r   r   r   r   r8   r   models.chatcmpl_converterr   models.chatcmpl_helpersr   models.chatcmpl_stream_handlerr   models.fake_idr    models.interfacer!   r"   r   r#   r?   r$   tracing.span_datar%   tracing.spansr&   rP   r'   r)   rn   r   r4   r2   <module>r      s   " " " " " "   ) ) ) ) ) ) / / / / / / / / / / / /     0 0 0 0 0 0NNNN   
+	D   4 3 3 3 3 3 3 3 3 3 P P P P P P P P         
 I H H H H H + + + + + +       1 1 1 1 1 1       L L L L L L L L L L       + + + + + + 2 2 2 2 2 2 . . . . . . C C C C C C / / / / / / 3 3 3 3 3 3 3 3       & & & & & & 3 3 3 3 3 3 ! ! ! ! ! !      M M M M M5 M M M`=
 =
 =
 =
 =
 =
 =
 =
 =
 =
s   1 AAA