feat(openai): support azure api type #475

This commit is contained in:
Jacky 2024-12-15 21:02:31 +08:00
parent 835349c33f
commit ad97f973ab
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
23 changed files with 4726 additions and 3837 deletions

View file

@ -0,0 +1,33 @@
package chatbot
import (
"github.com/0xJacky/Nginx-UI/internal/transport"
"github.com/0xJacky/Nginx-UI/settings"
"github.com/sashabaranov/go-openai"
"net/http"
)
func GetClient() (*openai.Client, error) {
var config openai.ClientConfig
if openai.APIType(settings.OpenAISettings.APIType) == openai.APITypeAzure {
config = openai.DefaultAzureConfig(settings.OpenAISettings.Token, settings.OpenAISettings.BaseUrl)
} else {
config = openai.DefaultConfig(settings.OpenAISettings.Token)
}
if settings.OpenAISettings.Proxy != "" {
t, err := transport.NewTransport(transport.WithProxy(settings.OpenAISettings.Proxy))
if err != nil {
return nil, err
}
config.HTTPClient = &http.Client{
Transport: t,
}
}
if settings.OpenAISettings.BaseUrl != "" {
config.BaseURL = settings.OpenAISettings.BaseUrl
}
return openai.NewClientWithConfig(config), nil
}

View file

@ -1,22 +1,21 @@
package chatbot
import (
"github.com/sashabaranov/go-openai"
"github.com/sashabaranov/go-openai"
)
func ChatCompletionWithContext(filename string, messages []openai.ChatCompletionMessage) []openai.ChatCompletionMessage {
for i := len(messages) - 1; i >= 0; i-- {
if messages[i].Role == openai.ChatMessageRoleUser {
// openai.ChatCompletionMessage: can't use both Content and MultiContent properties simultaneously
multiContent := getConfigIncludeContext(filename)
multiContent = append(multiContent, openai.ChatMessagePart{
Type: openai.ChatMessagePartTypeText,
Text: messages[i].Content,
})
messages[i].Content = ""
messages[i].MultiContent = multiContent
}
}
return messages
for i := len(messages) - 1; i >= 0; i-- {
if messages[i].Role == openai.ChatMessageRoleUser {
// openai.ChatCompletionMessage: can't use both Content and MultiContent properties simultaneously
multiContent := getConfigIncludeContext(filename)
multiContent = append(multiContent, openai.ChatMessagePart{
Type: openai.ChatMessagePartTypeText,
Text: messages[i].Content,
})
messages[i].Content = ""
messages[i].MultiContent = multiContent
}
}
return messages
}

View file

@ -12,12 +12,7 @@ func Init() {
logger.Fatal("failed to initialize binding validator engine")
}
err := v.RegisterValidation("safety_text", safetyText)
if err != nil {
logger.Fatal(err)
}
err = v.RegisterValidation("certificate", isCertificate)
err := v.RegisterValidation("certificate", isCertificate)
if err != nil {
logger.Fatal(err)
}