mirror of
https://github.com/danielmiessler/Fabric.git
synced 2026-02-13 07:25:10 -05:00
### CHANGES - Introduce local `chat` package for message abstraction - Replace sashabaranov/go-openai with official openai-go SDK - Update OpenAI, Azure, and Exolab plugins for new client - Refactor all AI providers to use internal chat types - Decouple codebase from third-party AI provider structs - Replace deprecated `ioutil` functions with `os` equivalents
51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
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
|
|
}
|
|
|
|
// 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
|
|
}
|