feat: Add support for retrieving model list from providers (#188)

*  feat: Add support for retrieving model list from providers

* 🔖 chore: Custom channel automatically get the model
This commit is contained in:
Buer
2024-05-16 15:21:13 +08:00
committed by GitHub
parent ef63fbfd31
commit 7263582b9b
20 changed files with 444 additions and 31 deletions

View File

@@ -57,6 +57,7 @@ func getOpenAIConfig(baseURL string) base.ProviderConfig {
ImagesGenerations: "/v1/images/generations",
ImagesEdit: "/v1/images/edits",
ImagesVariations: "/v1/images/variations",
ModelList: "/v1/models",
}
}

29
providers/openai/model.go Normal file
View File

@@ -0,0 +1,29 @@
package openai
import (
"errors"
"net/http"
)
func (p *OpenAIProvider) GetModelList() ([]string, error) {
fullRequestURL := p.GetFullRequestURL(p.Config.ModelList, "")
headers := p.GetRequestHeaders()
req, err := p.Requester.NewRequest(http.MethodGet, fullRequestURL, p.Requester.WithHeader(headers))
if err != nil {
return nil, errors.New("new_request_failed")
}
response := &ModelListResponse{}
_, errWithCode := p.Requester.SendRequest(req, response, false)
if errWithCode != nil {
return nil, errors.New(errWithCode.Message)
}
var modelList []string
for _, model := range response.Data {
modelList = append(modelList, model.Id)
}
return modelList, nil
}

View File

@@ -73,3 +73,15 @@ type OpenAIUsageResponse struct {
//DailyCosts []OpenAIUsageDailyCost `json:"daily_costs"`
TotalUsage float64 `json:"total_usage"` // unit: 0.01 dollar
}
type ModelListResponse struct {
Object string `json:"object"`
Data []ModelDetails `json:"data"`
}
type ModelDetails struct {
Id string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
OwnedBy string `json:"owned_by"`
}