
    qi                         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 ddlmZ e G d	 d
e
             Z G d de      Zy)zFCerebras LLM service implementation using OpenAI-compatible interface.    )	dataclass)Optional)logger)OpenAILLMInvocationParams)OpenAILLMSettings)OpenAILLMService)_warn_deprecated_paramc                       e Zd ZdZy)CerebrasLLMSettingsz Settings for CerebrasLLMService.N)__name__
__module____qualname____doc__     O/opt/pipecat/venv/lib/python3.12/site-packages/pipecat/services/cerebras/llm.pyr   r      s    *r   r   c            
       v     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
Z	d fd	Z
dedefdZ x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                    t        d      }|t        dt         d       ||_        ||j                  |       t	        |   d|||d| y)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=OpenAILLMSettings(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   )r   r	   r   apply_updatesuper__init__)selfr   r   r   r   kwargsdefault_settings	__class__s          r   r   zCerebrasLLMService.__init__%   s_    0 /^D "7,?I%*"
 ))(3a8FVaZ`ar   c                 V    t        j                  d|        t        |   ||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!   s       r   r$   z CerebrasLLMService.create_clientL   s0     	9(DEw$WhA&AAr   params_from_contextreturnc                    | j                   j                  d| j                   j                  | j                   j                  | j                   j                  | j                   j
                  d}|j                  |       |j                  | j                   j                         | j                   j                  r2|j                  dg       }d| j                   j                  dg|z   |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messagessystem)rolecontent)
r   r   r)   r*   r+   r,   updateextrasystem_instructionget)r   r%   paramsr-   s       r   build_chat_completion_paramsz/CerebrasLLMService.build_chat_completion_paramsZ   s     ^^))NN''>>55^^))%)^^%I%I
 	)*dnn**+ >>,,zz*b1H!dnn.O.OP""F: r   )NN)r   r   r   r   r   Settings__annotations__strr   r   r$   r   dictr6   __classcell__)r!   s   @r   r   r      sx     #H"" 5#26%b %b 	%b
 }%b ./%bNB#@Y #^b #r   r   N)r   dataclassesr   typingr   logurur   )pipecat.adapters.services.open_ai_adapterr    pipecat.services.openai.base_llmr   pipecat.services.openai.llmr   pipecat.services.settingsr	   r   r   r   r   r   <module>rC      sK    M !   O > 8 < 	+ 	 	b) br   