@@ -192,8 +192,7 @@ func (a *LLMAgent) chat(ctx *Context, cfg *genai.GenerateContentConfig, tools ma
192192 if err != nil {
193193 return "" , nil , ctx .finishSpan (reqSpan , err )
194194 }
195- reply , thoughts , calls , respErr := a .parseResponse (resp )
196- reqSpan .Thoughts = thoughts
195+ reply , calls , respErr := a .parseResponse (resp , reqSpan )
197196 if err := ctx .finishSpan (reqSpan , respErr ); err != nil {
198197 return "" , nil , err
199198 }
@@ -302,8 +301,8 @@ func (a *LLMAgent) callTools(ctx *Context, tools map[string]Tool, calls []*genai
302301 return responses , outputs , nil
303302}
304303
305- func (a * LLMAgent ) parseResponse (resp * genai.GenerateContentResponse ) (
306- reply , thoughts string , calls []* genai.FunctionCall , err error ) {
304+ func (a * LLMAgent ) parseResponse (resp * genai.GenerateContentResponse , span * trajectory. Span ) (
305+ reply string , calls []* genai.FunctionCall , err error ) {
307306 if len (resp .Candidates ) == 0 || resp .Candidates [0 ] == nil {
308307 err = fmt .Errorf ("empty model response" )
309308 if resp .PromptFeedback != nil {
@@ -322,6 +321,13 @@ func (a *LLMAgent) parseResponse(resp *genai.GenerateContentResponse) (
322321 err = fmt .Errorf ("unexpected reply fields (%+v)" , * candidate )
323322 return
324323 }
324+ if resp .UsageMetadata != nil {
325+ // We add ToolUsePromptTokenCount just in case, but Gemini does not use/set it.
326+ span .InputTokens = int (resp .UsageMetadata .PromptTokenCount ) +
327+ int (resp .UsageMetadata .ToolUsePromptTokenCount )
328+ span .OutputTokens = int (resp .UsageMetadata .CandidatesTokenCount )
329+ span .OutputThoughtsTokens = int (resp .UsageMetadata .ThoughtsTokenCount )
330+ }
325331 for _ , part := range candidate .Content .Parts {
326332 // We don't expect to receive these now.
327333 if part .VideoMetadata != nil || part .InlineData != nil ||
@@ -333,7 +339,7 @@ func (a *LLMAgent) parseResponse(resp *genai.GenerateContentResponse) (
333339 if part .FunctionCall != nil {
334340 calls = append (calls , part .FunctionCall )
335341 } else if part .Thought {
336- thoughts += part .Text
342+ span . Thoughts += part .Text
337343 } else {
338344 reply += part .Text
339345 }
0 commit comments