2020-08-18 20:48:55 +00:00
|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
2024-05-13 16:11:18 +00:00
|
|
|
"github.com/spf13/viper"
|
2020-08-18 20:48:55 +00:00
|
|
|
)
|
|
|
|
|
2024-05-12 13:04:32 +00:00
|
|
|
var GlobalConfig Config
|
|
|
|
|
2020-08-18 20:48:55 +00:00
|
|
|
// Config contains all the neccessary configurations
|
|
|
|
type Config struct {
|
2024-05-20 15:31:07 +00:00
|
|
|
Models map[string]Model
|
|
|
|
ModelNames []string
|
|
|
|
OpenAIAPI OpenAI
|
|
|
|
Bot BotConfig
|
2020-08-18 20:48:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Load reads all config from env to config
|
|
|
|
func Load() Config {
|
2024-05-13 16:11:18 +00:00
|
|
|
viper.AutomaticEnv()
|
|
|
|
|
2024-05-20 15:31:07 +00:00
|
|
|
viper.SetConfigName("config") // name of config file (without extension)
|
|
|
|
viper.SetConfigType("yaml") // REQUIRED if the config file does not have the extension in the name
|
|
|
|
viper.AddConfigPath(".") // optionally look for config in the working directory
|
|
|
|
viper.AddConfigPath("config") // optionally look for config in the working directory
|
|
|
|
viper.AddConfigPath("data") // optionally look for config in the working directory
|
|
|
|
viper.AddConfigPath("data/config") // optionally look for config in the working directory
|
|
|
|
viper.ReadInConfig() // Find and read the config file
|
|
|
|
|
|
|
|
// Set default models
|
|
|
|
viper.SetDefault("models", []Model{
|
|
|
|
defaultModel, // set in model.go
|
|
|
|
})
|
|
|
|
|
|
|
|
modelList := make([]Model, 1)
|
|
|
|
err := viper.UnmarshalKey("models", &modelList)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Initialize modelNames and models from modelList
|
|
|
|
modelNames := make([]string, len(modelList))
|
|
|
|
models := make(map[string]Model)
|
|
|
|
for i, model := range modelList {
|
|
|
|
modelNames[i] = model.Name
|
|
|
|
if _, ok := models[model.Name]; ok {
|
|
|
|
panic("duplicate model name")
|
|
|
|
}
|
|
|
|
models[model.Name] = model
|
|
|
|
}
|
|
|
|
if _, ok := models["default"]; !ok {
|
|
|
|
panic("default model not found")
|
|
|
|
}
|
|
|
|
|
|
|
|
// print models
|
|
|
|
// for name, model := range models {
|
|
|
|
// fmt.Printf("%s: %+v\n", name, model)
|
|
|
|
// }
|
2024-05-13 16:11:18 +00:00
|
|
|
|
2024-05-12 13:04:32 +00:00
|
|
|
GlobalConfig = Config{
|
2020-08-18 20:48:55 +00:00
|
|
|
Bot: BotConfig{
|
2024-05-20 15:31:07 +00:00
|
|
|
tkn: viper.GetString("api_token"),
|
2020-08-18 20:48:55 +00:00
|
|
|
},
|
2024-05-12 13:04:32 +00:00
|
|
|
OpenAIAPI: OpenAI{
|
2024-05-20 15:31:07 +00:00
|
|
|
Endpoint: viper.GetString("openai.endpoint"),
|
|
|
|
APIKey: viper.GetString("openai.api_key"),
|
2024-05-12 13:04:32 +00:00
|
|
|
},
|
2024-05-20 15:31:07 +00:00
|
|
|
Models: models,
|
|
|
|
ModelNames: modelNames,
|
2020-08-18 20:48:55 +00:00
|
|
|
}
|
2024-05-12 13:04:32 +00:00
|
|
|
return GlobalConfig
|
2020-08-18 20:48:55 +00:00
|
|
|
}
|