mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-27 19:54:13 +00:00
* fix(health.md): add rerank model health check information * build(model_prices_and_context_window.json): add gemini 2.0 for google ai studio - pricing + commercial rate limits * build(model_prices_and_context_window.json): add gemini-2.0 supports audio output = true * docs(team_model_add.md): clarify allowing teams to add models is an enterprise feature * fix(o1_transformation.py): add support for 'n', 'response_format' and 'stop' params for o1 and 'stream_options' param for o1-mini * build(model_prices_and_context_window.json): add 'supports_system_message' to supporting openai models needed as o1-preview, and o1-mini models don't support 'system message * fix(o1_transformation.py): translate system message based on if o1 model supports it * fix(o1_transformation.py): return 'stream' param support if o1-mini/o1-preview o1 currently doesn't support streaming, but the other model versions do Fixes https://github.com/BerriAI/litellm/issues/7292 * fix(o1_transformation.py): return tool calling/response_format in supported params if model map says so Fixes https://github.com/BerriAI/litellm/issues/7292 * fix: fix linting errors * fix: update '_transform_messages' * fix(o1_transformation.py): fix provider passed for supported param checks * test(base_llm_unit_tests.py): skip test if api takes >5s to respond * fix(utils.py): return false in 'supports_factory' if can't find value * fix(o1_transformation.py): always return stream + stream_options as supported params + handle stream options being passed in for azure o1 * feat(openai.py): support stream faking natively in openai handler Allows o1 calls to be faked for just the "o1" model, allows native streaming for o1-mini, o1-preview Fixes https://github.com/BerriAI/litellm/issues/7292 * fix(openai.py): use inference param instead of original optional param
105 lines
3.3 KiB
Python
105 lines
3.3 KiB
Python
"""
|
|
Translates from OpenAI's `/v1/chat/completions` to Databricks' `/chat/completions`
|
|
"""
|
|
|
|
import types
|
|
from typing import List, Optional, Union
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from litellm.litellm_core_utils.prompt_templates.common_utils import (
|
|
handle_messages_with_content_list_to_str_conversion,
|
|
strip_name_from_messages,
|
|
)
|
|
from litellm.types.llms.openai import AllMessageValues
|
|
from litellm.types.utils import ProviderField
|
|
|
|
from ...openai_like.chat.transformation import OpenAILikeChatConfig
|
|
|
|
|
|
class DatabricksConfig(OpenAILikeChatConfig):
|
|
"""
|
|
Reference: https://docs.databricks.com/en/machine-learning/foundation-models/api-reference.html#chat-request
|
|
"""
|
|
|
|
max_tokens: Optional[int] = None
|
|
temperature: Optional[int] = None
|
|
top_p: Optional[int] = None
|
|
top_k: Optional[int] = None
|
|
stop: Optional[Union[List[str], str]] = None
|
|
n: Optional[int] = None
|
|
|
|
def __init__(
|
|
self,
|
|
max_tokens: Optional[int] = None,
|
|
temperature: Optional[int] = None,
|
|
top_p: Optional[int] = None,
|
|
top_k: Optional[int] = None,
|
|
stop: Optional[Union[List[str], str]] = None,
|
|
n: Optional[int] = None,
|
|
) -> None:
|
|
locals_ = locals()
|
|
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 super().get_config()
|
|
|
|
def get_required_params(self) -> List[ProviderField]:
|
|
"""For a given provider, return it's required fields with a description"""
|
|
return [
|
|
ProviderField(
|
|
field_name="api_key",
|
|
field_type="string",
|
|
field_description="Your Databricks API Key.",
|
|
field_value="dapi...",
|
|
),
|
|
ProviderField(
|
|
field_name="api_base",
|
|
field_type="string",
|
|
field_description="Your Databricks API Base.",
|
|
field_value="https://adb-..",
|
|
),
|
|
]
|
|
|
|
def get_supported_openai_params(self, model: Optional[str] = None) -> list:
|
|
return [
|
|
"stream",
|
|
"stop",
|
|
"temperature",
|
|
"top_p",
|
|
"max_tokens",
|
|
"max_completion_tokens",
|
|
"n",
|
|
"response_format",
|
|
]
|
|
|
|
def _should_fake_stream(self, optional_params: dict) -> bool:
|
|
"""
|
|
Databricks doesn't support 'response_format' while streaming
|
|
"""
|
|
if optional_params.get("response_format") is not None:
|
|
return True
|
|
|
|
return False
|
|
|
|
def _transform_messages(
|
|
self, messages: List[AllMessageValues], model: str
|
|
) -> List[AllMessageValues]:
|
|
"""
|
|
Databricks does not support:
|
|
- content in list format.
|
|
- 'name' in user message.
|
|
"""
|
|
new_messages = []
|
|
for idx, message in enumerate(messages):
|
|
if isinstance(message, BaseModel):
|
|
_message = message.model_dump(exclude_none=True)
|
|
else:
|
|
_message = message
|
|
new_messages.append(_message)
|
|
new_messages = handle_messages_with_content_list_to_str_conversion(new_messages)
|
|
new_messages = strip_name_from_messages(new_messages)
|
|
return super()._transform_messages(messages=new_messages, model=model)
|