mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 11:14:04 +00:00
fix(anthropic.py): fix translation from /v1/messages format to openai format
This commit is contained in:
parent
6266937c75
commit
384f8f4f54
4 changed files with 105 additions and 7 deletions
|
@ -287,6 +287,9 @@ class AnthropicConfig:
|
||||||
if user_message is not None:
|
if user_message is not None:
|
||||||
new_messages.append(user_message)
|
new_messages.append(user_message)
|
||||||
|
|
||||||
|
if len(new_user_content_list) > 0:
|
||||||
|
new_messages.append({"role": "user", "content": new_user_content_list})
|
||||||
|
|
||||||
if len(tool_message_list) > 0:
|
if len(tool_message_list) > 0:
|
||||||
new_messages.extend(tool_message_list)
|
new_messages.extend(tool_message_list)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
model_list:
|
model_list:
|
||||||
- model_name: "gpt-4"
|
- model_name: "claude-3-5-sonnet-20240620"
|
||||||
litellm_params:
|
litellm_params:
|
||||||
model: "gpt-4"
|
model: "claude-3-5-sonnet-20240620"
|
||||||
api_key: "bad_key"
|
|
||||||
- model_name: "gpt-4o"
|
|
||||||
litellm_params:
|
|
||||||
model: "gpt-4o"
|
|
||||||
|
|
||||||
litellm_settings:
|
litellm_settings:
|
||||||
max_internal_user_budget: 0.001
|
max_internal_user_budget: 0.001
|
||||||
|
|
|
@ -5373,7 +5373,13 @@ async def anthropic_response(
|
||||||
litellm.adapters = [{"id": "anthropic", "adapter": anthropic_adapter}]
|
litellm.adapters = [{"id": "anthropic", "adapter": anthropic_adapter}]
|
||||||
|
|
||||||
global user_temperature, user_request_timeout, user_max_tokens, user_api_base
|
global user_temperature, user_request_timeout, user_max_tokens, user_api_base
|
||||||
data: dict = {**anthropic_data, "adapter_id": "anthropic"}
|
body = await request.body()
|
||||||
|
body_str = body.decode()
|
||||||
|
try:
|
||||||
|
request_data: dict = ast.literal_eval(body_str)
|
||||||
|
except Exception:
|
||||||
|
request_data = json.loads(body_str)
|
||||||
|
data: dict = {**request_data, "adapter_id": "anthropic"}
|
||||||
try:
|
try:
|
||||||
data["model"] = (
|
data["model"] = (
|
||||||
general_settings.get("completion_model", None) # server default
|
general_settings.get("completion_model", None) # server default
|
||||||
|
|
|
@ -183,3 +183,96 @@ async def test_anthropic_router_completion_e2e():
|
||||||
assert isinstance(response, AnthropicResponse)
|
assert isinstance(response, AnthropicResponse)
|
||||||
|
|
||||||
assert response.model == "gpt-3.5-turbo"
|
assert response.model == "gpt-3.5-turbo"
|
||||||
|
|
||||||
|
|
||||||
|
def test_anthropic_tool_calling_translation():
|
||||||
|
kwargs = {
|
||||||
|
"model": "claude-3-5-sonnet-20240620",
|
||||||
|
"messages": [
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"text": "Would development of a software platform be under ASC 350-40 or ASC 985?",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "assistant",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "tool_use",
|
||||||
|
"id": "37d6f703-cbcc-497d-95a1-2aa24a114adc",
|
||||||
|
"name": "TaskPlanningTool",
|
||||||
|
"input": {
|
||||||
|
"completed_steps": [],
|
||||||
|
"next_steps": [
|
||||||
|
{
|
||||||
|
"tool_name": "AccountingResearchTool",
|
||||||
|
"description": "Research ASC 350-40 to understand its scope and applicability to software development.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tool_name": "AccountingResearchTool",
|
||||||
|
"description": "Research ASC 985 to understand its scope and applicability to software development.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tool_name": "AccountingResearchTool",
|
||||||
|
"description": "Compare the scopes of ASC 350-40 and ASC 985 to determine which is more applicable to software platform development.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"learnings": [],
|
||||||
|
"potential_issues": [
|
||||||
|
"The distinction between the two standards might not be clear-cut for all types of software development.",
|
||||||
|
"There might be specific circumstances or details about the software platform that could affect which standard applies.",
|
||||||
|
],
|
||||||
|
"missing_info": [
|
||||||
|
"Specific details about the type of software platform being developed (e.g., for internal use or for sale).",
|
||||||
|
"Whether the entity developing the software is also the end-user or if it's being developed for external customers.",
|
||||||
|
],
|
||||||
|
"done": False,
|
||||||
|
"required_formatting": None,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "tool_result",
|
||||||
|
"tool_use_id": "eb7023b1-5ee8-43b8-b90f-ac5a23d37c31",
|
||||||
|
"content": {
|
||||||
|
"completed_steps": [],
|
||||||
|
"next_steps": [
|
||||||
|
{
|
||||||
|
"tool_name": "AccountingResearchTool",
|
||||||
|
"description": "Research ASC 350-40 to understand its scope and applicability to software development.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tool_name": "AccountingResearchTool",
|
||||||
|
"description": "Research ASC 985 to understand its scope and applicability to software development.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tool_name": "AccountingResearchTool",
|
||||||
|
"description": "Compare the scopes of ASC 350-40 and ASC 985 to determine which is more applicable to software platform development.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"formatting_step": None,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
from litellm.adapters.anthropic_adapter import anthropic_adapter
|
||||||
|
|
||||||
|
translated_params = anthropic_adapter.translate_completion_input_params(
|
||||||
|
kwargs=kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
print(translated_params["messages"])
|
||||||
|
|
||||||
|
assert len(translated_params["messages"]) > 0
|
||||||
|
assert translated_params["messages"][1]["role"] == "user"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue