config.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package config
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "os"
  6. "strconv"
  7. "sync"
  8. "time"
  9. "github.com/eryajf/chatgpt-dingtalk/public/logger"
  10. )
  11. // Configuration 项目配置
  12. type Configuration struct {
  13. // gtp apikey
  14. ApiKey string `json:"api_key"`
  15. // 会话超时时间
  16. SessionTimeout time.Duration `json:"session_timeout"`
  17. // // GPT请求最大字符数
  18. // MaxTokens uint `json:"max_tokens"`
  19. // // GPT模型
  20. // Model string `json:"model"`
  21. // // 热度
  22. // Temperature float64 `json:"temperature"`
  23. // // 自定义清空会话口令
  24. // SessionClearToken string `json:"session_clear_token"`
  25. }
  26. var config *Configuration
  27. var once sync.Once
  28. // LoadConfig 加载配置
  29. func LoadConfig() *Configuration {
  30. once.Do(func() {
  31. // 从文件中读取
  32. config = &Configuration{}
  33. f, err := os.Open("config.json")
  34. if err != nil {
  35. logger.Danger("open config err: %v", err)
  36. return
  37. }
  38. defer f.Close()
  39. encoder := json.NewDecoder(f)
  40. err = encoder.Decode(config)
  41. if err != nil {
  42. logger.Warning("decode config err: %v", err)
  43. return
  44. }
  45. // 如果环境变量有配置,读取环境变量
  46. ApiKey := os.Getenv("APIKEY")
  47. SessionTimeout := os.Getenv("SESSION_TIMEOUT")
  48. // Model := os.Getenv("MODEL")
  49. // MaxTokens := os.Getenv("MAX_TOKENS")
  50. // Temperature := os.Getenv("TEMPREATURE")
  51. // SessionClearToken := os.Getenv("SESSION_CLEAR_TOKEN")
  52. if ApiKey != "" {
  53. config.ApiKey = ApiKey
  54. }
  55. if SessionTimeout != "" {
  56. duration, err := strconv.ParseInt(SessionTimeout, 10, 64)
  57. if err != nil {
  58. logger.Danger(fmt.Sprintf("config session timeout err: %v ,get is %v", err, SessionTimeout))
  59. return
  60. }
  61. config.SessionTimeout = time.Duration(duration) * time.Second
  62. } else {
  63. config.SessionTimeout = time.Duration(config.SessionTimeout) * time.Second
  64. }
  65. // if Model != "" {
  66. // config.Model = Model
  67. // }
  68. // if MaxTokens != "" {
  69. // max, err := strconv.Atoi(MaxTokens)
  70. // if err != nil {
  71. // logger.Danger(fmt.Sprintf("config MaxTokens err: %v ,get is %v", err, MaxTokens))
  72. // return
  73. // }
  74. // config.MaxTokens = uint(max)
  75. // }
  76. // if Temperature != "" {
  77. // temp, err := strconv.ParseFloat(Temperature, 64)
  78. // if err != nil {
  79. // logger.Danger(fmt.Sprintf("config Temperature err: %v ,get is %v", err, Temperature))
  80. // return
  81. // }
  82. // config.Temperature = temp
  83. // }
  84. // if SessionClearToken != "" {
  85. // config.SessionClearToken = SessionClearToken
  86. // }
  87. })
  88. if config.ApiKey == "" {
  89. logger.Danger("config err: api key required")
  90. }
  91. return config
  92. }