mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-14 23:21:35 +00:00
fix: address Greptile review comments for message transformation
- Fix _transform_messages signature to match parent class (add model, is_async params) - Handle list-typed content in _convert_assistant_tool_message - Handle list-typed and non-string content in _convert_tool_messages_to_user_message - Update test calls to use new signature with model parameter Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
d6ce4e2aad
commit
2fedd394eb
2 changed files with 19 additions and 7 deletions
|
|
@ -155,8 +155,8 @@ class SnowflakeConfig(SnowflakeBaseConfig, OpenAIGPTConfig):
|
|||
return f"{api_base}/cortex/inference:complete"
|
||||
|
||||
def _transform_messages(
|
||||
self, messages: List[AllMessageValues]
|
||||
) -> List[Dict[str, Any]]:
|
||||
self, messages: List[AllMessageValues], model: str, is_async: bool = False
|
||||
) -> List[AllMessageValues]:
|
||||
"""
|
||||
Transform OpenAI messages to Snowflake format.
|
||||
|
||||
|
|
@ -214,7 +214,7 @@ class SnowflakeConfig(SnowflakeBaseConfig, OpenAIGPTConfig):
|
|||
)
|
||||
)
|
||||
|
||||
return transformed
|
||||
return transformed # type: ignore
|
||||
|
||||
def _convert_assistant_tool_message(
|
||||
self, message: Dict[str, Any]
|
||||
|
|
@ -242,6 +242,11 @@ class SnowflakeConfig(SnowflakeBaseConfig, OpenAIGPTConfig):
|
|||
|
||||
# Add text content if present
|
||||
text_content = message.get("content")
|
||||
if isinstance(text_content, list):
|
||||
# Flatten multipart content to a single string
|
||||
text_content = " ".join(
|
||||
part.get("text", "") for part in text_content if isinstance(part, dict)
|
||||
)
|
||||
if text_content:
|
||||
content_list.append({"type": "text", "text": text_content})
|
||||
|
||||
|
|
@ -298,10 +303,17 @@ class SnowflakeConfig(SnowflakeBaseConfig, OpenAIGPTConfig):
|
|||
function = tool_call.get("function", {})
|
||||
function_name = function.get("name", "")
|
||||
|
||||
# Get content - could be string or None
|
||||
# Get content - could be string, list, or None
|
||||
content = tool_msg.get("content")
|
||||
if content is None:
|
||||
content = "null"
|
||||
elif isinstance(content, list):
|
||||
# Flatten OpenAI multipart tool content to a plain string
|
||||
content = " ".join(
|
||||
part.get("text", "") for part in content if isinstance(part, dict)
|
||||
)
|
||||
elif not isinstance(content, str):
|
||||
content = str(content)
|
||||
|
||||
content_list.append({
|
||||
"type": "tool_results",
|
||||
|
|
@ -426,7 +438,7 @@ class SnowflakeConfig(SnowflakeBaseConfig, OpenAIGPTConfig):
|
|||
# Transform messages from OpenAI format to Snowflake format
|
||||
# This handles role: "tool" -> role: "user" with tool_results content_list
|
||||
# and assistant messages with tool_calls -> content_list with tool_use blocks
|
||||
transformed_messages = self._transform_messages(messages)
|
||||
transformed_messages = self._transform_messages(messages, model=model)
|
||||
|
||||
return {
|
||||
"model": model,
|
||||
|
|
|
|||
|
|
@ -366,7 +366,7 @@ class TestSnowflakeToolTransformation:
|
|||
},
|
||||
]
|
||||
|
||||
transformed = config._transform_messages(messages)
|
||||
transformed = config._transform_messages(messages, model="claude-3-5-sonnet")
|
||||
|
||||
# Should have 3 messages
|
||||
assert len(transformed) == 3
|
||||
|
|
@ -427,7 +427,7 @@ class TestSnowflakeToolTransformation:
|
|||
{"role": "tool", "tool_call_id": "call_2", "content": "55°F"},
|
||||
]
|
||||
|
||||
transformed = config._transform_messages(messages)
|
||||
transformed = config._transform_messages(messages, model="claude-3-5-sonnet")
|
||||
|
||||
# Should have 3 messages (user, assistant, combined tool results)
|
||||
assert len(transformed) == 3
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue