o
    i                  
   @   s   d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZ zd dlmZmZ d dlmZmZmZmZmZ d d	lmZ W n ey_ Z zed
edZ[ww d dlm Z  d dl!m"Z" G dd de"Z#dS )    )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                
   @   s   e Zd ZddededB fddZedee de	de
eef e
eef B d	efd
dZedeeB ee B dB d	ee fddZededB dee d	ee fddZeded	efddZdeeB ee B dB d	efddZdS )OpenAISamplingHandlerNdefault_modelclientc                 C   s   |pt  | _|| _d S N)r   r   r   )selfr   r    r   s/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/fastmcp/experimental/sampling/handlers/openai.py__init__#   s   
zOpenAISamplingHandler.__init__messagesparamscontextreturnc                    sP   | j |j|d}| |j}| jjjj|||jpt	|j
|jp t	d}| |S )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%   responser   r   r   __call__'   s   	

zOpenAISamplingHandler.__call__model_preferencesc                 c   sz    | d u rd S t | tr| ttv r| V  t | tr| E d H  t | tr9| j }s+d S |D ]}|j }s5q-|V  q-d S d S r   )
isinstancestrr   r   listr   hintsname)r6   r:   hintr;   r   r   r   _iter_models_from_preferencesB   s$   




z3OpenAISamplingHandler._iter_models_from_preferencesr$   c                 C   s   g }| r| td| d t|tr| td|d t|trZ|D ]7}t|tr3| td|d q"t|jts=td|j	dkrN| td|jj
d q"| td|jj
d q"|S )Nsystem)rolecontentuserzOnly text content is supported	assistant)appendr   r7   r8   r   r9   r@   r   
ValueErrorr?   textr   )r$   r    r3   messager   r   r   r)   [   sR   



z1OpenAISamplingHandler._convert_to_openai_messageschat_completionc                 C   sL   t | jdkrtd| jd }|jj }r"ttd|dd| jdS td)Nr   zNo response for completionrE   )typerE   rB   )r@   r?   r%   z&No content in response from completion)lenchoicesrD   rF   r@   r
   r   r%   )rG   first_choicer@   r   r   r   r2      s   

z?OpenAISamplingHandler._chat_completion_to_create_message_resultc                 C   s.   |  |D ]}|ttv r|}|  S q| jS r   )r=   r   r   r   )r   r6   model_optionchosen_modelr   r   r   r+      s   z4OpenAISamplingHandler._select_model_from_preferencesr   )__name__
__module____qualname__r   r   r   r   r9   r   SamplingParamsr   r   r   r   r
   r5   staticmethodr   r8   r   r=   r   r   r)   r   r2   r+   r   r   r   r   r   "   sN    

4r   )$collections.abcr   r   typingr   mcpr   r   mcp.shared.contextr   r   	mcp.typesr	   rQ   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   r   r   r   r   <module>   s*    