server: lowercase roles for compatibility with clients (#5695)
This commit is contained in:
parent
b9f5e16c80
commit
9e35d9bbee
2 changed files with 37 additions and 2 deletions
12
api/types.go
12
api/types.go
|
@ -110,6 +110,18 @@ type Message struct {
|
||||||
Images []ImageData `json:"images,omitempty"`
|
Images []ImageData `json:"images,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Message) UnmarshalJSON(b []byte) error {
|
||||||
|
type Alias Message
|
||||||
|
var a Alias
|
||||||
|
if err := json.Unmarshal(b, &a); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*m = Message(a)
|
||||||
|
m.Role = strings.ToLower(m.Role)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// ChatResponse is the response returned by [Client.Chat]. Its fields are
|
// ChatResponse is the response returned by [Client.Chat]. Its fields are
|
||||||
// similar to [GenerateResponse].
|
// similar to [GenerateResponse].
|
||||||
type ChatResponse struct {
|
type ChatResponse struct {
|
||||||
|
|
|
@ -208,3 +208,26 @@ func TestUseMmapFormatParams(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMessage_UnmarshalJSON(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
input string
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{`{"role": "USER", "content": "Hello!"}`, "user"},
|
||||||
|
{`{"role": "System", "content": "Initialization complete."}`, "system"},
|
||||||
|
{`{"role": "assistant", "content": "How can I help you?"}`, "assistant"},
|
||||||
|
{`{"role": "TOOl", "content": "Access granted."}`, "tool"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
var msg Message
|
||||||
|
if err := json.Unmarshal([]byte(test.input), &msg); err != nil {
|
||||||
|
t.Errorf("Unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.Role != test.expected {
|
||||||
|
t.Errorf("role not lowercased: got %v, expected %v", msg.Role, test.expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue