You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
/*
|
|
* Copyright 2025 CloudWeGo Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package conf
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/RanFeng/ilog"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// 定义一个结构体来解析 YAML 文件中的 mcp.servers 部分
|
|
type DeerConfig struct {
|
|
MCP struct {
|
|
Servers map[string]struct {
|
|
Command string `yaml:"command"`
|
|
Args []string `yaml:"args"`
|
|
Env map[string]string `yaml:"env,omitempty"`
|
|
} `yaml:"servers"`
|
|
} `yaml:"mcp"`
|
|
Model struct {
|
|
DefaultModel string `yaml:"default_model"`
|
|
APIKey string `yaml:"api_key"`
|
|
BaseURL string `yaml:"base_url"`
|
|
} `yaml:"model"`
|
|
Setting struct {
|
|
MaxPlanIterations int `yaml:"max_plan_iterations"`
|
|
MaxStepNum int `yaml:"max_step_num"`
|
|
} `yaml:"setting"`
|
|
}
|
|
|
|
var Config *DeerConfig = &DeerConfig{}
|
|
|
|
func LoadDeerConfig(ctx context.Context) {
|
|
dir, err := os.Getwd()
|
|
if err != nil {
|
|
panic(fmt.Sprintf("获取当前工作目录失败: %w", err))
|
|
}
|
|
|
|
// 构建模板文件路径
|
|
configPath := filepath.Join(dir, "conf", "deer-go.yaml")
|
|
|
|
// 读取 YAML 文件内容
|
|
configData, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("读取配置文件 %s 失败: %w", configPath, err))
|
|
}
|
|
|
|
var deerConfig DeerConfig
|
|
if err := yaml.Unmarshal(configData, &deerConfig); err != nil {
|
|
panic(fmt.Sprintf("解析配置文件 %s 失败: %w", configPath, err))
|
|
}
|
|
|
|
ilog.EventInfo(ctx, "load_config", "conf", deerConfig)
|
|
|
|
//// 将 DeerConfig 转换为 MCPConfig
|
|
//mcpConfig := &MCPConfig{
|
|
// MCPServers: make(map[string]ServerConfigWrapper),
|
|
//}
|
|
//for name, server := range deerConfig.MCP.Servers {
|
|
// stdioConfig := STDIOServerConfig{
|
|
// Command: server.Command,
|
|
// Args: server.Args,
|
|
// Env: server.Env,
|
|
// }
|
|
// mcpConfig.MCPServers[name] = ServerConfigWrapper{
|
|
// Config: stdioConfig,
|
|
// }
|
|
//}
|
|
Config = &deerConfig
|
|
}
|