package common import "github.com/danielmiessler/fabric/chat" const ChatMessageRoleMeta = "meta" type ChatRequest struct { ContextName string SessionName string PatternName string PatternVariables map[string]string Message *chat.ChatCompletionMessage Language string Meta string InputHasVars bool StrategyName string } type ChatOptions struct { Model string Temperature float64 TopP float64 PresencePenalty float64 FrequencyPenalty float64 Raw bool Seed int ModelContextLength int MaxTokens int Search bool SearchLocation string ImageFile string } // NormalizeMessages remove empty messages and ensure messages order user-assist-user func NormalizeMessages(msgs []*chat.ChatCompletionMessage, defaultUserMessage string) (ret []*chat.ChatCompletionMessage) { // 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 if fullMessageIndex%2 == 0 && message.Role != chat.ChatMessageRoleUser { ret = append(ret, &chat.ChatCompletionMessage{Role: chat.ChatMessageRoleUser, Content: defaultUserMessage}) fullMessageIndex++ } ret = append(ret, message) fullMessageIndex++ } return }