o
    iz                     @   sv   d 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 eG dd	 d	e
jZG d
d deZdS )zFCerebras LLM service implementation using OpenAI-compatible interface.    )	dataclass)Optional)logger)OpenAILLMInvocationParams)BaseOpenAILLMService)OpenAILLMServicec                   @   s   e Zd ZdZdS )CerebrasLLMSettingsz Settings for CerebrasLLMService.N)__name__
__module____qualname____doc__ r   r   Q/home/ubuntu/.local/lib/python3.10/site-packages/pipecat/services/cerebras/llm.pyr      s    r   c                
       sr   e Zd ZU dZeZeed< dddddededee d	ee f fd
dZ	d fdd	Z
dedefddZ  ZS )CerebrasLLMServicezA service for interacting with Cerebras's API using the OpenAI-compatible interface.

    This service extends OpenAILLMService to connect to Cerebras's API endpoint while
    maintaining full compatibility with OpenAI's interface and functionality.
    	_settingszhttps://api.cerebras.ai/v1N)base_urlmodelsettingsapi_keyr   r   r   c                   sV   | j dd}|dur| dd ||_|dur|| t jd|||d| dS )a  Initialize the Cerebras LLM service.

        Args:
            api_key: The API key for accessing Cerebras's API.
            base_url: The base URL for Cerebras API. Defaults to "https://api.cerebras.ai/v1".
            model: The model identifier to use. Defaults to "gpt-oss-120b".

                .. deprecated:: 0.0.105
                    Use ``settings=CerebrasLLMService.Settings(model=...)`` instead.

            settings: Runtime-updatable settings. When provided alongside deprecated
                parameters, ``settings`` values take precedence.
            **kwargs: Additional keyword arguments passed to OpenAILLMService.
        zgpt-oss-120b)r   Nr   )r   r   r   r   )Settings"_warn_init_param_moved_to_settingsr   apply_updatesuper__init__)selfr   r   r   r   kwargsdefault_settings	__class__r   r   r   $   s   
zCerebrasLLMService.__init__c                    s&   t d|  t j||fi |S )a  Create OpenAI-compatible client for Cerebras API endpoint.

        Args:
            api_key: The API key for authentication. If None, uses instance key.
            base_url: The base URL for the API. If None, uses instance URL.
            **kwargs: Additional arguments passed to the client constructor.

        Returns:
            An OpenAI-compatible client configured for Cerebras API.
        z"Creating Cerebras client with api )r   debugr   create_client)r   r   r   r   r   r   r   r    K   s   z CerebrasLLMService.create_clientparams_from_contextreturnc                 C   s   | j jd| j j| j j| j j| j jd}|| || j j | j jrH|	dg }|r<|d 	ddkr<t
|  d d| j jdg| |d< |S )	a   Build parameters for Cerebras chat completion request.

        Cerebras supports a subset of OpenAI parameters, focusing on core
        completion settings without advanced features like frequency/presence penalties.

        Args:
            params_from_context: Parameters, derived from the LLM context, to
                use for the chat completion. Contains messages, tools, and tool
                choice.

        Returns:
            Dictionary of parameters for the chat completion request.
        T)r   streamseedtemperaturetop_pmax_completion_tokensmessagesr   rolesystemzc: Both system_instruction and an initial system message in context are set. This may be unintended.)r)   content)r   r   r$   r%   r&   r'   updateextrasystem_instructiongetr   warning)r   r!   paramsr(   r   r   r   build_chat_completion_paramsY   s(   

z/CerebrasLLMService.build_chat_completion_params)NN)r	   r
   r   r   r   r   __annotations__strr   r   r    r   dictr2   __classcell__r   r   r   r   r      s$   
 'r   N)r   dataclassesr   typingr   logurur   )pipecat.adapters.services.open_ai_adapterr    pipecat.services.openai.base_llmr   pipecat.services.openai.llmr   r   r   r   r   r   r   r   <module>   s   