
    qi8                         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)zFFireworks AI service implementation using OpenAI-compatible interface.    )	dataclass)Optional)logger)OpenAILLMInvocationParams)OpenAILLMSettings)OpenAILLMService)_warn_deprecated_paramc                       e Zd ZdZy)FireworksLLMSettingsz!Settings for FireworksLLMService.N)__name__
__module____qualname____doc__     P/opt/pipecat/venv/lib/python3.12/site-packages/pipecat/services/fireworks/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e   ded	ee   f fd
Z	d fd	Z
dedefdZ xZS )FireworksLLMServicezA service for interacting with Fireworks AI using the OpenAI-compatible interface.

    This service extends OpenAILLMService to connect to Fireworks' API endpoint while
    maintaining full compatibility with OpenAI's interface and functionality.
    	_settingsNz%https://api.fireworks.ai/inference/v1)modelbase_urlsettingsapi_keyr   r   r   c                    t        d      }|t        dt         d       ||_        ||j                  |       t	        |   d|||d| y)a  Initialize the Fireworks LLM service.

        Args:
            api_key: The API key for accessing Fireworks AI.
            model: The model identifier to use. Defaults to "accounts/fireworks/models/firefunction-v2".

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

            base_url: The base URL for Fireworks API. Defaults to "https://api.fireworks.ai/inference/v1".
            settings: Runtime-updatable settings. When provided alongside deprecated
                parameters, ``settings`` values take precedence.
            **kwargs: Additional keyword arguments passed to OpenAILLMService.
        z)accounts/fireworks/models/firefunction-v2)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FireworksLLMService.__init__%   s`    0 06ab "7,@'J%*"
 ))(3a8FVaZ`ar   c                 V    t        j                  d|        t        |   ||fi |S )a  Create OpenAI-compatible client for Fireworks API endpoint.

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

        Returns:
            Configured OpenAI client instance for Fireworks API.
        z#Creating Fireworks client with api )r   debugr   create_client)r   r   r   r   r!   s       r   r$   z!FireworksLLMService.create_clientL   s0     	:8*EFw$WhA&AAr   params_from_contextreturnc                    | j                   j                  d| j                   j                  | 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 Fireworks chat completion request.

        Fireworks doesn't support some OpenAI parameters like seed, max_completion_tokens,
        and stream_options.

        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frequency_penaltypresence_penaltytemperaturetop_p
max_tokensmessagessystem)rolecontent)r   r   r)   r*   r+   r,   r-   updateextrasystem_instructionget)r   r%   paramsr.   s       r   build_chat_completion_paramsz0FireworksLLMService.build_chat_completion_paramsZ   s     ^^))!%!A!A $ ? ?>>55^^))..33
 	)*dnn**+ >>,,zz*b1H!dnn.O.OP""F: r   )NN)r   r   r   r   r   Settings__annotations__strr   r   r$   r   dictr7   __classcell__)r!   s   @r   r   r      sx     $H##  $?37%b %b }	%b
 %b /0%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>rD      sK    M !   O > 8 < 	, 	 	c* cr   