feat: support use_default_attributes for ai-statistics plugin (#3427)

This commit is contained in:
澄潭
2026-02-01 13:47:55 +08:00
committed by GitHub
parent f288ddf444
commit 38dedae47d

View File

@@ -135,6 +135,54 @@ const (
CtxStreamingToolCallsBuffer = "streamingToolCallsBuffer" CtxStreamingToolCallsBuffer = "streamingToolCallsBuffer"
) )
// getDefaultAttributes returns the default attributes configuration for empty config
func getDefaultAttributes() []Attribute {
return []Attribute{
// Extract complete conversation history from request body
{
Key: "messages",
ValueSource: RequestBody,
Value: "messages",
ApplyToLog: true,
},
// Built-in attributes (no value_source needed, will be auto-extracted)
{
Key: BuiltinQuestionKey,
ApplyToLog: true,
},
{
Key: BuiltinAnswerKey,
ApplyToLog: true,
},
{
Key: BuiltinReasoningKey,
ApplyToLog: true,
},
{
Key: BuiltinToolCallsKey,
ApplyToLog: true,
},
// Token statistics (auto-extracted from response)
{
Key: BuiltinReasoningTokens,
ApplyToLog: true,
},
{
Key: BuiltinCachedTokens,
ApplyToLog: true,
},
// Detailed token information
{
Key: BuiltinInputTokenDetails,
ApplyToLog: true,
},
{
Key: BuiltinOutputTokenDetails,
ApplyToLog: true,
},
}
}
// Default session ID headers in priority order // Default session ID headers in priority order
var defaultSessionHeaders = []string{ var defaultSessionHeaders = []string{
"x-openclaw-session-key", "x-openclaw-session-key",
@@ -361,13 +409,28 @@ func isContentTypeEnabled(contentType string, enabledContentTypes []string) bool
} }
func parseConfig(configJson gjson.Result, config *AIStatisticsConfig) error { func parseConfig(configJson gjson.Result, config *AIStatisticsConfig) error {
// Check if use_default_attributes is enabled
useDefaultAttributes := configJson.Get("use_default_attributes").Bool()
// Parse tracing span attributes setting. // Parse tracing span attributes setting.
attributeConfigs := configJson.Get("attributes").Array() attributeConfigs := configJson.Get("attributes").Array()
// Set value_length_limit
if configJson.Get("value_length_limit").Exists() { if configJson.Get("value_length_limit").Exists() {
config.valueLengthLimit = int(configJson.Get("value_length_limit").Int()) config.valueLengthLimit = int(configJson.Get("value_length_limit").Int())
} else { } else {
config.valueLengthLimit = 4000 config.valueLengthLimit = 4000
} }
// Parse attributes or use defaults
if useDefaultAttributes {
config.attributes = getDefaultAttributes()
// Update value_length_limit to default when using default attributes
if !configJson.Get("value_length_limit").Exists() {
config.valueLengthLimit = 10485760 // 10MB
}
log.Infof("Using default attributes configuration")
} else {
config.attributes = make([]Attribute, len(attributeConfigs)) config.attributes = make([]Attribute, len(attributeConfigs))
for i, attributeConfig := range attributeConfigs { for i, attributeConfig := range attributeConfigs {
attribute := Attribute{} attribute := Attribute{}
@@ -384,6 +447,7 @@ func parseConfig(configJson gjson.Result, config *AIStatisticsConfig) error {
} }
config.attributes[i] = attribute config.attributes[i] = attribute
} }
}
// Metric settings // Metric settings
config.counterMetrics = make(map[string]proxywasm.MetricCounter) config.counterMetrics = make(map[string]proxywasm.MetricCounter)
@@ -394,6 +458,12 @@ func parseConfig(configJson gjson.Result, config *AIStatisticsConfig) error {
pathSuffixes := configJson.Get("enable_path_suffixes").Array() pathSuffixes := configJson.Get("enable_path_suffixes").Array()
config.enablePathSuffixes = make([]string, 0, len(pathSuffixes)) config.enablePathSuffixes = make([]string, 0, len(pathSuffixes))
// If use_default_attributes is enabled and enable_path_suffixes is not configured, use default path suffixes
if useDefaultAttributes && !configJson.Get("enable_path_suffixes").Exists() {
config.enablePathSuffixes = []string{"/completions", "/messages"}
log.Infof("Using default path suffixes: /completions, /messages")
} else {
// Process manually configured path suffixes
for _, suffix := range pathSuffixes { for _, suffix := range pathSuffixes {
suffixStr := suffix.String() suffixStr := suffix.String()
if suffixStr == "*" { if suffixStr == "*" {
@@ -403,6 +473,7 @@ func parseConfig(configJson gjson.Result, config *AIStatisticsConfig) error {
} }
config.enablePathSuffixes = append(config.enablePathSuffixes, suffixStr) config.enablePathSuffixes = append(config.enablePathSuffixes, suffixStr)
} }
}
// Parse content type configuration // Parse content type configuration
contentTypes := configJson.Get("enable_content_types").Array() contentTypes := configJson.Get("enable_content_types").Array()