Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,8 @@ go.work
.idea/
.trae
agent/.env
examples/quickstart/config.yaml
examples/quickstart/config.yaml


# MacOS system file
.DS_Store
57 changes: 57 additions & 0 deletions configs/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/volcengine/veadk-go/common"
"github.com/volcengine/veadk-go/utils"
"gopkg.in/yaml.v3"
)

func Test_loadConfigFromProjectEnv(t *testing.T) {
Expand Down Expand Up @@ -91,3 +92,59 @@ func TestSetupVeADKConfig(t *testing.T) {
_ = SetupVeADKConfig()
assert.Equal(t, "doubao-seed-1-6-250615", os.Getenv(common.MODEL_AGENT_NAME))
}

func TestObservabilityConfig_YamlMapping(t *testing.T) {
yamlData := `
opentelemetry:
apmplus:
endpoint: "http://apmplus-example.com"
api_key: "test-key"
service_name: "test-service"
enable_global_tracer: true
`
var config ObservabilityConfig
err := yaml.Unmarshal([]byte(yamlData), &config)
assert.NoError(t, err)

assert.NotNil(t, config.OpenTelemetry)
assert.NotNil(t, config.OpenTelemetry.ApmPlus)
assert.Equal(t, "http://apmplus-example.com", config.OpenTelemetry.ApmPlus.Endpoint)
assert.Equal(t, "test-key", config.OpenTelemetry.ApmPlus.APIKey)
assert.Equal(t, "test-service", config.OpenTelemetry.ApmPlus.ServiceName)
assert.True(t, config.OpenTelemetry.EnableGlobalProvider)

assert.Equal(t, "test-service", config.OpenTelemetry.ApmPlus.ServiceName)
assert.True(t, config.OpenTelemetry.EnableGlobalProvider)
}

func TestObservabilityConfig_EnvMapping(t *testing.T) {
os.Setenv("OBSERVABILITY_OPENTELEMETRY_APMPLUS_ENDPOINT", "http://env-endpoint")
os.Setenv("OBSERVABILITY_OPENTELEMETRY_ENABLE_GLOBAL_PROVIDER", "true")
defer func() {
os.Unsetenv("OBSERVABILITY_OPENTELEMETRY_APMPLUS_ENDPOINT")
os.Unsetenv("OBSERVABILITY_OPENTELEMETRY_ENABLE_GLOBAL_PROVIDER")
}()

config := &ObservabilityConfig{}
config.MapEnvToConfig()

assert.NotNil(t, config.OpenTelemetry)
assert.NotNil(t, config.OpenTelemetry.ApmPlus)
assert.Equal(t, "http://env-endpoint", config.OpenTelemetry.ApmPlus.Endpoint)
assert.True(t, config.OpenTelemetry.EnableGlobalProvider)
}

func TestObservabilityConfig_Priority(t *testing.T) {
// Nested priority check: CozeLoop > APMPlus
config := &ObservabilityConfig{
OpenTelemetry: &OpenTelemetryConfig{
ApmPlus: &ApmPlusConfig{
Endpoint: "apm-endpoint",
},
CozeLoop: &CozeLoopExporterConfig{
Endpoint: "coze-endpoint",
},
},
}
assert.NotNil(t, config.OpenTelemetry.CozeLoop)
}
41 changes: 29 additions & 12 deletions configs/configs.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,40 @@ import (
"strconv"
"strings"

"sync"

"github.com/joho/godotenv"
"gopkg.in/yaml.v3"
)

type VeADKConfig struct {
Volcengine *Volcengine `yaml:"volcengine"`
Model *ModelConfig `yaml:"model"`
Tool *BuiltinToolConfigs `yaml:"tools"`
PromptPilot *PromptPilotConfig `yaml:"prompt_pilot"`
CozeLoopConfig *CozeLoopConfig `yaml:"coze_loop"`
TlsConfig *TLSConfig `yaml:"tls_config"`
Veidentity *VeIdentityConfig `yaml:"veidentity"`
Database *DatabaseConfig `yaml:"database"`
LOGGING *Logging `yaml:"LOGGING"`
Volcengine *Volcengine `yaml:"volcengine"`
Model *ModelConfig `yaml:"model"`
Tool *BuiltinToolConfigs `yaml:"tools"`
PromptPilot *PromptPilotConfig `yaml:"prompt_pilot"`
CozeLoopConfig *CozeLoopConfig `yaml:"coze_loop"`
TlsConfig *TLSConfig `yaml:"tls_config"`
Veidentity *VeIdentityConfig `yaml:"veidentity"`
Database *DatabaseConfig `yaml:"database"`
LOGGING *Logging `yaml:"LOGGING"`
Observability *ObservabilityConfig `yaml:"observability"`
}

type EnvConfigMaptoStruct interface {
MapEnvToConfig() // 用于映射环境变量到结构体字段
}

var globalConfig *VeADKConfig
var (
globalConfig *VeADKConfig
configOnce sync.Once
)

func GetGlobalConfig() *VeADKConfig {
if globalConfig == nil {
configOnce.Do(func() {
if err := SetupVeADKConfig(); err != nil {
panic(err)
}
}
})
return globalConfig
}

Expand Down Expand Up @@ -83,6 +89,12 @@ func SetupVeADKConfig() error {
TOS: &TosClientConf{},
Mem0: &Mem0Config{},
},
Observability: &ObservabilityConfig{
OpenTelemetry: &OpenTelemetryConfig{
EnableGlobalProvider: true, // use global trace provider by default, like veadk-python
EnableLocalProvider: false, // disable adk-go's local provider
},
},
}
globalConfig.Model.MapEnvToConfig()
globalConfig.Tool.MapEnvToConfig()
Expand All @@ -91,6 +103,7 @@ func SetupVeADKConfig() error {
globalConfig.LOGGING.MapEnvToConfig()
globalConfig.Database.MapEnvToConfig()
globalConfig.Volcengine.MapEnvToConfig()
globalConfig.Observability.MapEnvToConfig()
return nil
}

Expand Down Expand Up @@ -153,6 +166,10 @@ func setYamlToEnv(data map[string]interface{}, prefix string) {
if os.Getenv(fullKey) == "" {
_ = os.Setenv(fullKey, strconv.Itoa(v))
}
case bool:
if os.Getenv(fullKey) == "" {
_ = os.Setenv(fullKey, strconv.FormatBool(v))
}
}
}
}
Loading