nbugs commited on
Commit
f3b2eee
·
verified ·
1 Parent(s): c84f523

Update main.go

Browse files
Files changed (1) hide show
  1. main.go +0 -214
main.go CHANGED
@@ -22,9 +22,6 @@ import (
22
  "syscall"
23
  "time"
24
 
25
- "strconv"
26
- "strings"
27
- "io/ioutil"
28
 
29
  "gopkg.in/yaml.v2"
30
  "github.com/google/uuid"
@@ -34,217 +31,6 @@ import (
34
 
35
 
36
 
37
- // 配置结构体定义
38
- type Config struct {
39
- ThinkingServices []ThinkingService `yaml:"thinking_services"`
40
- Channels map[string]Channel `yaml:"channels"`
41
- Global GlobalConfig `yaml:"global"`
42
- }
43
-
44
- type ThinkingService struct {
45
- ID int `yaml:"id"`
46
- Name string `yaml:"name"`
47
- Mode string `yaml:"mode"`
48
- Model string `yaml:"model"`
49
- BaseURL string `yaml:"base_url"`
50
- APIPath string `yaml:"api_path"`
51
- APIKey string `yaml:"api_key"`
52
- Timeout int `yaml:"timeout"`
53
- Weight int `yaml:"weight"`
54
- Proxy string `yaml:"proxy"`
55
- ReasoningEffort string `yaml:"reasoning_effort"`
56
- ReasoningFormat string `yaml:"reasoning_format"`
57
- Temperature float64 `yaml:"temperature"`
58
- ForceStopDeepThinking bool `yaml:"force_stop_deep_thinking"`
59
- }
60
-
61
- type Channel struct {
62
- Name string `yaml:"name"`
63
- BaseURL string `yaml:"base_url"`
64
- APIPath string `yaml:"api_path"`
65
- Timeout int `yaml:"timeout"`
66
- Proxy string `yaml:"proxy"`
67
- }
68
-
69
- type GlobalConfig struct {
70
- Log LogConfig `yaml:"log"`
71
- Server ServerConfig `yaml:"server"`
72
- }
73
-
74
- type LogConfig struct {
75
- Level string `yaml:"level"`
76
- Format string `yaml:"format"`
77
- Output string `yaml:"output"`
78
- FilePath string `yaml:"file_path"`
79
- Debug DebugConfig `yaml:"debug"`
80
- }
81
-
82
- type DebugConfig struct {
83
- Enabled bool `yaml:"enabled"`
84
- PrintRequest bool `yaml:"print_request"`
85
- PrintResponse bool `yaml:"print_response"`
86
- MaxContentLength int `yaml:"max_content_length"`
87
- }
88
-
89
- type ServerConfig struct {
90
- Port int `yaml:"port"`
91
- Host string `yaml:"host"`
92
- ReadTimeout int `yaml:"read_timeout"`
93
- WriteTimeout int `yaml:"write_timeout"`
94
- IdleTimeout int `yaml:"idle_timeout"`
95
- }
96
-
97
- // 从环境变量获取字符串值,如果环境变量不存在则返回默认值
98
- func getEnvString(key, defaultValue string) string {
99
- value := os.Getenv(key)
100
- if value == "" {
101
- return defaultValue
102
- }
103
- return value
104
- }
105
-
106
- // 从环境变量获取整数值,如果环境变量不存在或无法解析则返回默认值
107
- func getEnvInt(key string, defaultValue int) int {
108
- valueStr := os.Getenv(key)
109
- if valueStr == "" {
110
- return defaultValue
111
- }
112
-
113
- value, err := strconv.Atoi(valueStr)
114
- if err != nil {
115
- fmt.Printf("警告: 环境变量 %s 的值 '%s' 不是有效的整数,使用默认值 %d\n",
116
- key, valueStr, defaultValue)
117
- return defaultValue
118
- }
119
-
120
- return value
121
- }
122
-
123
- // 从环境变量获取浮点数值,如果环境变量不存在或无法解析则返回默认值
124
- func getEnvFloat(key string, defaultValue float64) float64 {
125
- valueStr := os.Getenv(key)
126
- if valueStr == "" {
127
- return defaultValue
128
- }
129
-
130
- value, err := strconv.ParseFloat(valueStr, 64)
131
- if err != nil {
132
- fmt.Printf("警告: 环境变量 %s 的值 '%s' 不是有效的浮点数,使用默认值 %f\n",
133
- key, valueStr, defaultValue)
134
- return defaultValue
135
- }
136
-
137
- return value
138
- }
139
-
140
- // 从环境变量获取布尔值,如果环境变量不存在或无法解析则返回默认值
141
- func getEnvBool(key string, defaultValue bool) bool {
142
- valueStr := os.Getenv(key)
143
- if valueStr == "" {
144
- return defaultValue
145
- }
146
-
147
- // 将字符串转换为小写以进行比较
148
- valueStr = strings.ToLower(valueStr)
149
-
150
- // 检查常见的布尔值表示
151
- if valueStr == "true" || valueStr == "1" || valueStr == "yes" || valueStr == "y" {
152
- return true
153
- } else if valueStr == "false" || valueStr == "0" || valueStr == "no" || valueStr == "n" {
154
- return false
155
- }
156
-
157
- fmt.Printf("警告: 环境变量 %s 的值 '%s' 不是有效的布尔值,使用默认值 %t\n",
158
- key, valueStr, defaultValue)
159
- return defaultValue
160
- }
161
-
162
- // 加载配置文件并应用环境变量
163
- func LoadConfig(configPath string) (*Config, error) {
164
- // 读取配置文件
165
- data, err := ioutil.ReadFile(configPath)
166
- if err != nil {
167
- return nil, fmt.Errorf("读取配置文件错误: %v", err)
168
- }
169
-
170
- // 解析YAML
171
- var config Config
172
- if err := yaml.Unmarshal(data, &config); err != nil {
173
- return nil, fmt.Errorf("解析配置文件错误: %v", err)
174
- }
175
-
176
- // 应用环境变量覆盖配置
177
- applyEnvironmentVariables(&config)
178
-
179
- return &config, nil
180
- }
181
-
182
- // 应用环境变量覆盖配置
183
- func applyEnvironmentVariables(config *Config) {
184
- // 确保至少有一个思考服务
185
- if len(config.ThinkingServices) > 0 {
186
- // 应用环境变量到第一个思考服务
187
- ts := &config.ThinkingServices[0]
188
- ts.Name = getEnvString("THINKING_SERVICE_NAME", ts.Name)
189
- ts.Mode = getEnvString("THINKING_SERVICE_MODE", ts.Mode)
190
- ts.Model = getEnvString("THINKING_SERVICE_MODEL", ts.Model)
191
- ts.BaseURL = getEnvString("THINKING_SERVICE_BASE_URL", ts.BaseURL)
192
- ts.APIKey = getEnvString("THINKING_SERVICE_API_KEY", ts.APIKey)
193
- ts.Proxy = getEnvString("THINKING_SERVICE_PROXY", ts.Proxy)
194
- ts.ReasoningEffort = getEnvString("THINKING_SERVICE_REASONING_EFFORT", ts.ReasoningEffort)
195
- ts.ReasoningFormat = getEnvString("THINKING_SERVICE_REASONING_FORMAT", ts.ReasoningFormat)
196
- ts.Timeout = getEnvInt("THINKING_SERVICE_TIMEOUT", ts.Timeout)
197
- ts.Weight = getEnvInt("THINKING_SERVICE_WEIGHT", ts.Weight)
198
- ts.Temperature = getEnvFloat("THINKING_SERVICE_TEMPERATURE", ts.Temperature)
199
- ts.ForceStopDeepThinking = getEnvBool("THINKING_SERVICE_FORCE_STOP", ts.ForceStopDeepThinking)
200
- }
201
-
202
- // 应用环境变量到通道配置
203
- if channel, exists := config.Channels["1"]; exists {
204
- channel.Name = getEnvString("CHANNEL_NAME", channel.Name)
205
- channel.BaseURL = getEnvString("CHANNEL_BASE_URL", channel.BaseURL)
206
- channel.Proxy = getEnvString("CHANNEL_PROXY", channel.Proxy)
207
- channel.Timeout = getEnvInt("CHANNEL_TIMEOUT", channel.Timeout)
208
- config.Channels["1"] = channel
209
- }
210
-
211
- // 应用环境变量到全局配置
212
- config.Global.Log.Level = getEnvString("LOG_LEVEL", config.Global.Log.Level)
213
- config.Global.Log.Format = getEnvString("LOG_FORMAT", config.Global.Log.Format)
214
- config.Global.Log.Output = getEnvString("LOG_OUTPUT", config.Global.Log.Output)
215
- config.Global.Log.FilePath = getEnvString("LOG_FILE_PATH", config.Global.Log.FilePath)
216
-
217
- config.Global.Log.Debug.Enabled = getEnvBool("DEBUG_ENABLED", config.Global.Log.Debug.Enabled)
218
- config.Global.Log.Debug.PrintRequest = getEnvBool("DEBUG_PRINT_REQUEST", config.Global.Log.Debug.PrintRequest)
219
- config.Global.Log.Debug.PrintResponse = getEnvBool("DEBUG_PRINT_RESPONSE", config.Global.Log.Debug.PrintResponse)
220
- config.Global.Log.Debug.MaxContentLength = getEnvInt("DEBUG_MAX_CONTENT_LENGTH", config.Global.Log.Debug.MaxContentLength)
221
-
222
- config.Global.Server.Port = getEnvInt("SERVER_PORT", config.Global.Server.Port)
223
- config.Global.Server.Host = getEnvString("SERVER_HOST", config.Global.Server.Host)
224
- config.Global.Server.ReadTimeout = getEnvInt("SERVER_READ_TIMEOUT", config.Global.Server.ReadTimeout)
225
- config.Global.Server.WriteTimeout = getEnvInt("SERVER_WRITE_TIMEOUT", config.Global.Server.WriteTimeout)
226
- config.Global.Server.IdleTimeout = getEnvInt("SERVER_IDLE_TIMEOUT", config.Global.Server.IdleTimeout)
227
- }
228
-
229
- // 示例主函数
230
- func main() {
231
- // 加载配置
232
- config, err := LoadConfig("config.yaml")
233
- if err != nil {
234
- fmt.Printf("加载配置失败: %v\n", err)
235
- os.Exit(1)
236
- }
237
-
238
- // 打印配置信息(仅用于调试)
239
- fmt.Printf("已加载配置:\n")
240
- fmt.Printf("思考服务名称: %s\n", config.ThinkingServices[0].Name)
241
- fmt.Printf("思考服务基础URL: %s\n", config.ThinkingServices[0].BaseURL)
242
- fmt.Printf("通道名称: %s\n", config.Channels["1"].Name)
243
- fmt.Printf("通道基础URL: %s\n", config.Channels["1"].BaseURL)
244
-
245
- // 这里继续你的应用程序逻辑...
246
-
247
-
248
  // ---------------------- 配置结构 ----------------------
249
 
250
  type Config struct {
 
22
  "syscall"
23
  "time"
24
 
 
 
 
25
 
26
  "gopkg.in/yaml.v2"
27
  "github.com/google/uuid"
 
31
 
32
 
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  // ---------------------- 配置结构 ----------------------
35
 
36
  type Config struct {