Private
Public Access
1
0

Multiple provider configuration

Add support for having multiple openai or anthropic compatible providers
accessible via different baseUrls
This commit is contained in:
2024-05-05 08:08:17 +00:00
parent bdaf6204f6
commit 8e4ff90ab4
4 changed files with 41 additions and 32 deletions

View File

@@ -43,7 +43,7 @@ func NewContext() (*Context, error) {
chroma := tty.NewChromaHighlighter("markdown", *config.Chroma.Formatter, *config.Chroma.Style)
var enabledTools []model.Tool
for _, toolName := range *config.Tools.EnabledTools {
for _, toolName := range config.Tools.EnabledTools {
tool, ok := tools.AvailableTools[toolName]
if ok {
enabledTools = append(enabledTools, tool)
@@ -54,31 +54,43 @@ func NewContext() (*Context, error) {
}
func (c *Context) GetModels() (models []string) {
for _, m := range *c.Config.Anthropic.Models {
models = append(models, m)
}
for _, m := range *c.Config.OpenAI.Models {
models = append(models, m)
for _, p := range c.Config.Providers {
for _, m := range *p.Models {
models = append(models, m)
}
}
return
}
func (c *Context) GetCompletionProvider(model string) (provider.ChatCompletionClient, error) {
for _, m := range *c.Config.Anthropic.Models {
if m == model {
anthropic := &anthropic.AnthropicClient{
APIKey: *c.Config.Anthropic.APIKey,
for _, p := range c.Config.Providers {
for _, m := range *p.Models {
if m == model {
switch *p.Kind {
case "anthropic":
url := "https://api.anthropic.com/v1"
if p.BaseURL != nil {
url = *p.BaseURL
}
anthropic := &anthropic.AnthropicClient{
BaseURL: url,
APIKey: *p.APIKey,
}
return anthropic, nil
case "openai":
url := "https://api.openai.com/v1"
if p.BaseURL != nil {
url = *p.BaseURL
}
openai := &openai.OpenAIClient{
BaseURL: url,
APIKey: *p.APIKey,
}
return openai, nil
default:
return nil, fmt.Errorf("unknown provider kind: %s", *p.Kind)
}
}
return anthropic, nil
}
}
for _, m := range *c.Config.OpenAI.Models {
if m == model {
openai := &openai.OpenAIClient{
BaseURL: "https://api.openai.com/v1",
APIKey: *c.Config.OpenAI.APIKey,
}
return openai, nil
}
}
return nil, fmt.Errorf("unknown model: %s", model)