56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
|
package conversation
|
||
|
|
||
|
import (
|
||
|
"git.mlow.ca/mlow/lmcli/pkg/api"
|
||
|
)
|
||
|
|
||
|
// ApplySystemPrompt updates the contents of an existing system Message if it
|
||
|
// exists, or returns a new slice with the system Message prepended.
|
||
|
func ApplySystemPrompt(m []Message, system string, force bool) []Message {
|
||
|
if len(m) > 0 && m[0].Role == api.MessageRoleSystem {
|
||
|
if force {
|
||
|
m[0].Content = system
|
||
|
}
|
||
|
return m
|
||
|
} else {
|
||
|
return append([]Message{{
|
||
|
Role: api.MessageRoleSystem,
|
||
|
Content: system,
|
||
|
}}, m...)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func MessageToAPI(m Message) api.Message {
|
||
|
return api.Message{
|
||
|
Role: m.Role,
|
||
|
Content: m.Content,
|
||
|
ToolCalls: m.ToolCalls,
|
||
|
ToolResults: m.ToolResults,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func MessagesToAPI(messages []Message) []api.Message {
|
||
|
ret := make([]api.Message, 0, len(messages))
|
||
|
for _, m := range messages {
|
||
|
ret = append(ret, MessageToAPI(m))
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
func MessageFromAPI(m api.Message) Message {
|
||
|
return Message{
|
||
|
Role: m.Role,
|
||
|
Content: m.Content,
|
||
|
ToolCalls: m.ToolCalls,
|
||
|
ToolResults: m.ToolResults,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func MessagesFromAPI(messages []api.Message) []Message {
|
||
|
ret := make([]Message, 0, len(messages))
|
||
|
for _, m := range messages {
|
||
|
ret = append(ret, MessageFromAPI(m))
|
||
|
}
|
||
|
return ret
|
||
|
}
|