Merge branch 'ollama:main' into main

This commit is contained in:
likelovewant
2024-07-19 11:22:39 +08:00
committed by GitHub
3 changed files with 10 additions and 6 deletions

View File

@@ -119,7 +119,7 @@ func (t Tools) String() string {
// of images. // of images.
type Message struct { type Message struct {
Role string `json:"role"` Role string `json:"role"`
Content string `json:"content,omitempty"` Content string `json:"content"`
Images []ImageData `json:"images,omitempty"` Images []ImageData `json:"images,omitempty"`
ToolCalls []ToolCall `json:"tool_calls,omitempty"` ToolCalls []ToolCall `json:"tool_calls,omitempty"`
} }

View File

@@ -348,7 +348,7 @@ func (m *Model) parseToolCalls(s string) ([]api.ToolCall, bool) {
for offset := 0; offset < len(s); { for offset := 0; offset < len(s); {
var obj map[string]any var obj map[string]any
decoder := json.NewDecoder(strings.NewReader(s[offset:])) decoder := json.NewDecoder(strings.NewReader(s[offset:]))
if err := decoder.Decode(&obj); errors.Is(err, io.EOF) { if err := decoder.Decode(&obj); errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
break break
} else if syntax := &(json.SyntaxError{}); errors.As(err, &syntax) { } else if syntax := &(json.SyntaxError{}); errors.As(err, &syntax) {
// skip over any syntax errors // skip over any syntax errors
@@ -357,6 +357,7 @@ func (m *Model) parseToolCalls(s string) ([]api.ToolCall, bool) {
// skip over any unmarshalable types // skip over any unmarshalable types
offset += int(unmarshalType.Offset) offset += int(unmarshalType.Offset)
} else if err != nil { } else if err != nil {
slog.Error("parseToolCalls", "error", err)
return nil, false return nil, false
} else { } else {
offset += int(decoder.InputOffset()) offset += int(decoder.InputOffset())

View File

@@ -1290,7 +1290,7 @@ func (s *Server) ChatHandler(c *gin.Context) {
} }
caps := []Capability{CapabilityCompletion} caps := []Capability{CapabilityCompletion}
if req.Tools != nil { if len(req.Tools) > 0 {
caps = append(caps, CapabilityTools) caps = append(caps, CapabilityTools)
} }
@@ -1385,9 +1385,12 @@ func (s *Server) ChatHandler(c *gin.Context) {
} }
resp.Message.Content = sb.String() resp.Message.Content = sb.String()
if toolCalls, ok := m.parseToolCalls(sb.String()); ok {
resp.Message.ToolCalls = toolCalls if len(req.Tools) > 0 {
resp.Message.Content = "" if toolCalls, ok := m.parseToolCalls(sb.String()); ok {
resp.Message.ToolCalls = toolCalls
resp.Message.Content = ""
}
} }
c.JSON(http.StatusOK, resp) c.JSON(http.StatusOK, resp)