2024-08-16 15:43:27 -04:00
|
|
|
package common
|
|
|
|
|
2024-09-15 15:09:45 +02:00
|
|
|
import goopenai "github.com/sashabaranov/go-openai"
|
|
|
|
|
2024-08-16 15:43:27 -04:00
|
|
|
type Message struct {
|
|
|
|
Role string `json:"role"`
|
|
|
|
Content string `json:"content"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type ChatRequest struct {
|
2024-09-03 15:13:03 +02:00
|
|
|
ContextName string
|
|
|
|
SessionName string
|
|
|
|
PatternName string
|
|
|
|
PatternVariables map[string]string
|
|
|
|
Message string
|
2024-09-13 16:41:54 +08:00
|
|
|
Language string
|
2024-08-16 15:43:27 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
type ChatOptions struct {
|
|
|
|
Model string
|
|
|
|
Temperature float64
|
|
|
|
TopP float64
|
|
|
|
PresencePenalty float64
|
|
|
|
FrequencyPenalty float64
|
2024-09-15 20:38:19 +02:00
|
|
|
Raw bool
|
2024-08-16 15:43:27 -04:00
|
|
|
}
|
2024-08-22 20:57:49 +02:00
|
|
|
|
|
|
|
// NormalizeMessages remove empty messages and ensure messages order user-assist-user
|
|
|
|
func NormalizeMessages(msgs []*Message, defaultUserMessage string) (ret []*Message) {
|
|
|
|
// Iterate over messages to enforce the odd position rule for user messages
|
|
|
|
fullMessageIndex := 0
|
|
|
|
for _, message := range msgs {
|
|
|
|
if message.Content == "" {
|
|
|
|
// Skip empty messages as the anthropic API doesn't accept them
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
// Ensure, that each odd position shall be a user message
|
2024-09-15 15:09:45 +02:00
|
|
|
if fullMessageIndex%2 == 0 && message.Role != goopenai.ChatMessageRoleUser {
|
|
|
|
ret = append(ret, &Message{Role: goopenai.ChatMessageRoleUser, Content: defaultUserMessage})
|
2024-08-22 20:57:49 +02:00
|
|
|
fullMessageIndex++
|
|
|
|
}
|
|
|
|
ret = append(ret, message)
|
|
|
|
fullMessageIndex++
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|