extractTokenUsage 从响应 Metadata 中提取 token 使用情况
(span telemetry.Span, metadata map[string]any)
| 306 | |
| 307 | // extractTokenUsage 从响应 Metadata 中提取 token 使用情况 |
| 308 | func (m *TelemetryMiddleware) extractTokenUsage(span telemetry.Span, metadata map[string]any) { |
| 309 | if inputTokens, ok := metadata["input_tokens"].(int64); ok { |
| 310 | span.SetAttributes(telemetry.Int64(genai.AttrUsageInputTokens, inputTokens)) |
| 311 | } else if inputTokens, ok := metadata["input_tokens"].(int); ok { |
| 312 | span.SetAttributes(telemetry.Int64(genai.AttrUsageInputTokens, int64(inputTokens))) |
| 313 | } |
| 314 | |
| 315 | if outputTokens, ok := metadata["output_tokens"].(int64); ok { |
| 316 | span.SetAttributes(telemetry.Int64(genai.AttrUsageOutputTokens, outputTokens)) |
| 317 | } else if outputTokens, ok := metadata["output_tokens"].(int); ok { |
| 318 | span.SetAttributes(telemetry.Int64(genai.AttrUsageOutputTokens, int64(outputTokens))) |
| 319 | } |
| 320 | |
| 321 | // 支持 usage 嵌套结构 |
| 322 | if usage, ok := metadata["usage"].(map[string]any); ok { |
| 323 | if inputTokens, ok := usage["input_tokens"].(int); ok { |
| 324 | span.SetAttributes(telemetry.Int64(genai.AttrUsageInputTokens, int64(inputTokens))) |
| 325 | } |
| 326 | if outputTokens, ok := usage["output_tokens"].(int); ok { |
| 327 | span.SetAttributes(telemetry.Int64(genai.AttrUsageOutputTokens, int64(outputTokens))) |
| 328 | } |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | // extractResponseInfo 从响应 Metadata 中提取响应信息 |
| 333 | func (m *TelemetryMiddleware) extractResponseInfo(span telemetry.Span, metadata map[string]any) { |
no test coverage detected