1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package config
- import (
- "encoding/json"
- "fmt"
- "os"
- "strconv"
- "sync"
- "time"
- "github.com/eryajf/chatgpt-dingtalk/public/logger"
- )
- // Configuration 项目配置
- type Configuration struct {
- // gtp apikey
- ApiKey string `json:"api_key"`
- // 会话超时时间
- SessionTimeout time.Duration `json:"session_timeout"`
- // // GPT请求最大字符数
- // MaxTokens uint `json:"max_tokens"`
- // // GPT模型
- // Model string `json:"model"`
- // // 热度
- // Temperature float64 `json:"temperature"`
- // // 自定义清空会话口令
- // SessionClearToken string `json:"session_clear_token"`
- }
- var config *Configuration
- var once sync.Once
- // LoadConfig 加载配置
- func LoadConfig() *Configuration {
- once.Do(func() {
- // 从文件中读取
- config = &Configuration{}
- f, err := os.Open("config.json")
- if err != nil {
- logger.Danger("open config err: %v", err)
- return
- }
- defer f.Close()
- encoder := json.NewDecoder(f)
- err = encoder.Decode(config)
- if err != nil {
- logger.Warning("decode config err: %v", err)
- return
- }
- // 如果环境变量有配置,读取环境变量
- ApiKey := os.Getenv("APIKEY")
- SessionTimeout := os.Getenv("SESSION_TIMEOUT")
- // Model := os.Getenv("MODEL")
- // MaxTokens := os.Getenv("MAX_TOKENS")
- // Temperature := os.Getenv("TEMPREATURE")
- // SessionClearToken := os.Getenv("SESSION_CLEAR_TOKEN")
- if ApiKey != "" {
- config.ApiKey = ApiKey
- }
- if SessionTimeout != "" {
- duration, err := strconv.ParseInt(SessionTimeout, 10, 64)
- if err != nil {
- logger.Danger(fmt.Sprintf("config session timeout err: %v ,get is %v", err, SessionTimeout))
- return
- }
- config.SessionTimeout = time.Duration(duration) * time.Second
- } else {
- config.SessionTimeout = time.Duration(config.SessionTimeout) * time.Second
- }
- // if Model != "" {
- // config.Model = Model
- // }
- // if MaxTokens != "" {
- // max, err := strconv.Atoi(MaxTokens)
- // if err != nil {
- // logger.Danger(fmt.Sprintf("config MaxTokens err: %v ,get is %v", err, MaxTokens))
- // return
- // }
- // config.MaxTokens = uint(max)
- // }
- // if Temperature != "" {
- // temp, err := strconv.ParseFloat(Temperature, 64)
- // if err != nil {
- // logger.Danger(fmt.Sprintf("config Temperature err: %v ,get is %v", err, Temperature))
- // return
- // }
- // config.Temperature = temp
- // }
- // if SessionClearToken != "" {
- // config.SessionClearToken = SessionClearToken
- // }
- })
- if config.ApiKey == "" {
- logger.Danger("config err: api key required")
- }
- return config
- }
|