mirror of
https://github.com/likelovewant/ollama-for-amd.git
synced 2025-12-21 22:33:56 +00:00
openai: fix tool call ID mapping (#12988)
This commit is contained in:
@@ -218,6 +218,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Role: "assistant",
|
Role: "assistant",
|
||||||
ToolCalls: []api.ToolCall{
|
ToolCalls: []api.ToolCall{
|
||||||
{
|
{
|
||||||
|
ID: "id",
|
||||||
Function: api.ToolCallFunction{
|
Function: api.ToolCallFunction{
|
||||||
Name: "get_current_weather",
|
Name: "get_current_weather",
|
||||||
Arguments: map[string]any{
|
Arguments: map[string]any{
|
||||||
@@ -257,6 +258,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Content: "Let's see what the weather is like in Paris",
|
Content: "Let's see what the weather is like in Paris",
|
||||||
ToolCalls: []api.ToolCall{
|
ToolCalls: []api.ToolCall{
|
||||||
{
|
{
|
||||||
|
ID: "id",
|
||||||
Function: api.ToolCallFunction{
|
Function: api.ToolCallFunction{
|
||||||
Name: "get_current_weather",
|
Name: "get_current_weather",
|
||||||
Arguments: map[string]any{
|
Arguments: map[string]any{
|
||||||
@@ -295,6 +297,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Role: "assistant",
|
Role: "assistant",
|
||||||
ToolCalls: []api.ToolCall{
|
ToolCalls: []api.ToolCall{
|
||||||
{
|
{
|
||||||
|
ID: "id",
|
||||||
Function: api.ToolCallFunction{
|
Function: api.ToolCallFunction{
|
||||||
Name: "get_current_weather",
|
Name: "get_current_weather",
|
||||||
Arguments: map[string]any{
|
Arguments: map[string]any{
|
||||||
@@ -334,6 +337,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Thinking: "Let's see what the weather is like in Paris",
|
Thinking: "Let's see what the weather is like in Paris",
|
||||||
ToolCalls: []api.ToolCall{
|
ToolCalls: []api.ToolCall{
|
||||||
{
|
{
|
||||||
|
ID: "id",
|
||||||
Function: api.ToolCallFunction{
|
Function: api.ToolCallFunction{
|
||||||
Name: "get_current_weather",
|
Name: "get_current_weather",
|
||||||
Arguments: map[string]any{
|
Arguments: map[string]any{
|
||||||
@@ -373,6 +377,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Role: "assistant",
|
Role: "assistant",
|
||||||
ToolCalls: []api.ToolCall{
|
ToolCalls: []api.ToolCall{
|
||||||
{
|
{
|
||||||
|
ID: "id_abc",
|
||||||
Function: api.ToolCallFunction{
|
Function: api.ToolCallFunction{
|
||||||
Name: "get_current_weather",
|
Name: "get_current_weather",
|
||||||
Arguments: map[string]any{
|
Arguments: map[string]any{
|
||||||
@@ -387,6 +392,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Role: "tool",
|
Role: "tool",
|
||||||
Content: "The weather in Paris is 20 degrees Celsius",
|
Content: "The weather in Paris is 20 degrees Celsius",
|
||||||
ToolName: "get_current_weather",
|
ToolName: "get_current_weather",
|
||||||
|
ToolCallID: "id_abc",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Options: map[string]any{
|
Options: map[string]any{
|
||||||
@@ -417,6 +423,7 @@ func TestChatMiddleware(t *testing.T) {
|
|||||||
Role: "assistant",
|
Role: "assistant",
|
||||||
ToolCalls: []api.ToolCall{
|
ToolCalls: []api.ToolCall{
|
||||||
{
|
{
|
||||||
|
ID: "id",
|
||||||
Function: api.ToolCallFunction{
|
Function: api.ToolCallFunction{
|
||||||
Name: "get_current_weather",
|
Name: "get_current_weather",
|
||||||
Arguments: map[string]any{
|
Arguments: map[string]any{
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ func FromChatRequest(r ChatCompletionRequest) (*api.ChatRequest, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
messages = append(messages, api.Message{Role: msg.Role, Content: content, Thinking: msg.Reasoning, ToolCalls: toolCalls, ToolName: toolName})
|
messages = append(messages, api.Message{Role: msg.Role, Content: content, Thinking: msg.Reasoning, ToolCalls: toolCalls, ToolName: toolName, ToolCallID: msg.ToolCallID})
|
||||||
case []any:
|
case []any:
|
||||||
for _, c := range content {
|
for _, c := range content {
|
||||||
data, ok := c.(map[string]any)
|
data, ok := c.(map[string]any)
|
||||||
@@ -501,9 +501,8 @@ func FromChatRequest(r ChatCompletionRequest) (*api.ChatRequest, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
messages[len(messages)-1].ToolCalls = toolCalls
|
messages[len(messages)-1].ToolCalls = toolCalls
|
||||||
if toolName != "" {
|
|
||||||
messages[len(messages)-1].ToolName = toolName
|
messages[len(messages)-1].ToolName = toolName
|
||||||
}
|
messages[len(messages)-1].ToolCallID = msg.ToolCallID
|
||||||
messages[len(messages)-1].Thinking = msg.Reasoning
|
messages[len(messages)-1].Thinking = msg.Reasoning
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -512,15 +511,11 @@ func FromChatRequest(r ChatCompletionRequest) (*api.ChatRequest, error) {
|
|||||||
return nil, fmt.Errorf("invalid message content type: %T", content)
|
return nil, fmt.Errorf("invalid message content type: %T", content)
|
||||||
}
|
}
|
||||||
|
|
||||||
toolCalls := make([]api.ToolCall, len(msg.ToolCalls))
|
toolCalls, err := FromCompletionToolCall(msg.ToolCalls)
|
||||||
for i, tc := range msg.ToolCalls {
|
|
||||||
toolCalls[i].Function.Name = tc.Function.Name
|
|
||||||
err := json.Unmarshal([]byte(tc.Function.Arguments), &toolCalls[i].Function.Arguments)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("invalid tool call arguments")
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
messages = append(messages, api.Message{Role: msg.Role, Thinking: msg.Reasoning, ToolCalls: toolCalls, ToolCallID: msg.ToolCallID})
|
||||||
messages = append(messages, api.Message{Role: msg.Role, Thinking: msg.Reasoning, ToolCalls: toolCalls})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,6 +626,7 @@ func nameFromToolCallID(messages []Message, toolCallID string) string {
|
|||||||
func FromCompletionToolCall(toolCalls []ToolCall) ([]api.ToolCall, error) {
|
func FromCompletionToolCall(toolCalls []ToolCall) ([]api.ToolCall, error) {
|
||||||
apiToolCalls := make([]api.ToolCall, len(toolCalls))
|
apiToolCalls := make([]api.ToolCall, len(toolCalls))
|
||||||
for i, tc := range toolCalls {
|
for i, tc := range toolCalls {
|
||||||
|
apiToolCalls[i].ID = tc.ID
|
||||||
apiToolCalls[i].Function.Name = tc.Function.Name
|
apiToolCalls[i].Function.Name = tc.Function.Name
|
||||||
err := json.Unmarshal([]byte(tc.Function.Arguments), &apiToolCalls[i].Function.Arguments)
|
err := json.Unmarshal([]byte(tc.Function.Arguments), &apiToolCalls[i].Function.Arguments)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user