import types from typing import Literal, Optional, Union import litellm class FireworksAIConfig: """ Reference: https://docs.fireworks.ai/api-reference/post-chatcompletions The class `FireworksAIConfig` provides configuration for the Fireworks's Chat Completions API interface. Below are the parameters: """ tools: Optional[list] = None tool_choice: Optional[Union[str, dict]] = None max_tokens: Optional[int] = None temperature: Optional[int] = None top_p: Optional[int] = None top_k: Optional[int] = None frequency_penalty: Optional[int] = None presence_penalty: Optional[int] = None n: Optional[int] = None stop: Optional[Union[str, list]] = None response_format: Optional[dict] = None user: Optional[str] = None # Non OpenAI parameters - Fireworks AI only params prompt_truncate_length: Optional[int] = None context_length_exceeded_behavior: Optional[Literal["error", "truncate"]] = None def __init__( self, tools: Optional[list] = None, tool_choice: Optional[Union[str, dict]] = None, max_tokens: Optional[int] = None, temperature: Optional[int] = None, top_p: Optional[int] = None, top_k: Optional[int] = None, frequency_penalty: Optional[int] = None, presence_penalty: Optional[int] = None, n: Optional[int] = None, stop: Optional[Union[str, list]] = None, response_format: Optional[dict] = None, user: Optional[str] = None, prompt_truncate_length: Optional[int] = None, context_length_exceeded_behavior: Optional[Literal["error", "truncate"]] = None, ) -> None: locals_ = locals().copy() for key, value in locals_.items(): if key != "self" and value is not None: setattr(self.__class__, key, value) @classmethod def get_config(cls): return { k: v for k, v in cls.__dict__.items() if not k.startswith("__") and not isinstance( v, ( types.FunctionType, types.BuiltinFunctionType, classmethod, staticmethod, ), ) and v is not None } def get_supported_openai_params(self): return [ "stream", "tools", "tool_choice", "max_tokens", "temperature", "top_p", "top_k", "frequency_penalty", "presence_penalty", "n", "stop", "response_format", "user", "prompt_truncate_length", "context_length_exceeded_behavior", ] def map_openai_params( self, non_default_params: dict, optional_params: dict, model: str, drop_params: bool, ) -> dict: supported_openai_params = self.get_supported_openai_params() for param, value in non_default_params.items(): if param == "tool_choice": if value == "required": # relevant issue: https://github.com/BerriAI/litellm/issues/4416 optional_params["tools"] = "any" if param in supported_openai_params: if value is not None: optional_params[param] = value return optional_params