
    k7i                         S SK JrJr  S SKJr  S SKJrJr  S SKJ	r	J
r
  S SKJr  S SKJrJrJrJr   S SKJrJr  S SKJrJrJrJrJr  S S	KJr  S SKJ r   S SK!J"r"   " S S\"5      r#g! \ a  r\" S
5      \eSrCff = f)    )IteratorSequence)get_args)ClientSessionServerSession)LifespanContextTRequestContext)CreateMessageRequestParams)CreateMessageResultModelPreferencesSamplingMessageTextContent)	NOT_GIVENOpenAI)ChatCompletion#ChatCompletionAssistantMessageParamChatCompletionMessageParam ChatCompletionSystemMessageParamChatCompletionUserMessageParam)	ChatModelzvThe `openai` package is not installed. Please install `fastmcp[openai]` or add `openai` to your dependencies manually.N)override)BaseLLMSamplingHandlerc            
       &   \ rS rSrSS\S\S-  4S jjr\S\\	   S\
S\\\4   \\\4   -  S	\4S
 j5       r\S\\-  \\   -  S-  S	\\   4S j5       r\S\S-  S\\	   S	\\   4S j5       r\S\S	\4S j5       rS\\-  \\   -  S-  S	\4S jrSrg)OpenAISamplingHandler"   Ndefault_modelclientc                 @    U=(       d
    [        5       U l        Xl        g N)r   r   r   )selfr   r   s      g/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/experimental/sampling/handlers/openai.py__init__OpenAISamplingHandler.__init__#   s    $0(5    messagesparamscontextreturnc                 h  #    U R                  UR                  US9nU R                  UR                  5      nU R                  R
                  R                  R                  UUUR                  =(       d    [        UR                  UR                  =(       d    [        S9nU R                  U5      $ 7f)N)system_promptr%   )modelr%   temperature
max_tokensstop)_convert_to_openai_messagessystemPrompt_select_model_from_preferencesmodelPreferencesr   chatcompletionscreater,   r   	maxTokensstopSequences)_chat_completion_to_create_message_result)r    r%   r&   r'   openai_messagesr+   responses          r!   __call__OpenAISamplingHandler.__call__'   s      ,,$11! -  	  >>v?V?VW;;##//66$**7i''%%2 7 
 ==hGGs   B0B2model_preferencesc              #   F  #    U c  g [        U [        5      (       a  U [        [        5      ;   a  U v   [        U [        5      (       a
  U  S h  vN   [        U [
        5      (       a7  U R                  =n(       d  g U H  nUR                  =n(       d  M  Uv   M     g g  NQ7fr   )
isinstancestrr   r   listr   hintsname)r=   rB   hintrC   s       r!   _iter_models_from_preferences3OpenAISamplingHandler._iter_models_from_preferencesB   s      $'--2CxH
 3
 $#'..(((')9::.444E4 $		))
	 	 ; )s   AB!BAB!r*   c                 n   / nU (       a  UR                  [        SU S95        [        U[        5      (       a  UR                  [	        SUS95        [        U[
        5      (       a  U H  n[        U[        5      (       a  UR                  [	        SUS95        M3  [        UR                  [        5      (       d  [        S5      eUR                  S:X  a/  UR                  [	        SUR                  R                  S95        M  UR                  [        SUR                  R                  S95        M     U$ )Nsystem)rolecontentuserzOnly text content is supported	assistant)appendr   r?   r@   r   rA   rJ   r   
ValueErrorrI   textr   )r*   r%   r9   messages       r!   r/   1OpenAISamplingHandler._convert_to_openai_messages[   s    =?""0!) h$$"".$ h%%#gs++#**6!'$+ !'//;??$%EFF<<6)#**6!'$+OO$8$8 $**;!,$+OO$8$8+ $8 r$   chat_completionc                     [        U R                  5      S:X  a  [        S5      eU R                  S   nUR                  R                  =n(       a  [        [        SUS9SU R                  S9$ [        S5      e)Nr   zNo response for completionrO   )typerO   rL   )rJ   rI   r+   z&No content in response from completion)lenchoicesrN   rP   rJ   r   r   r+   )rR   first_choicerJ   s      r!   r8   ?OpenAISamplingHandler._chat_completion_to_create_message_result   s{     &&'1,9::&..q1"**22272&#g> %++  ABBr$   c                 |    U R                  U5       H  nU[        [        5      ;   d  M  UnUs  $    U R                  $ r   )rE   r   r   r   )r    r=   model_optionchosen_models       r!   r1   4OpenAISamplingHandler._select_model_from_preferences   sA     !>>?PQLx	22*6## R
 !!!r$   )r   r   r   )__name__
__module____qualname____firstlineno__r   r   r"   r   rA   r   SamplingParamsr	   r   r   r   r   r;   staticmethodr   r@   r   rE   r   r   r/   r   r8   r1   __static_attributes__ r$   r!   r   r   "   sC   6i 6$ 6 H'H H  /? ?@
(88
9:	H 
H H4 +c1DI=D	# 0 2Tz2-5o-F2	(	)2 2h C'C	C C""!1C!7$s)!Cd!J"	"r$   r   )$collections.abcr   r   typingr   mcpr   r   mcp.shared.contextr   r	   	mcp.typesr
   ra   r   r   r   r   openair   r   openai.types.chatr   r   r   r   r   openai.types.shared.chat_modelr   ImportErroretyping_extensionsr   +fastmcp.experimental.sampling.handlers.baser   r   rd   r$   r!   <module>rq      st    .  , ? B (  9 ' NH"2 H"  
 	As   A& &A:,	A55A: