Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ public async Task ShouldReturnValidGeminiMetadataAsync()
}

Assert.Equal(testDataResponse.UsageMetadata!.PromptTokenCount, metadata.PromptTokenCount);
Assert.Equal(testDataResponse.UsageMetadata!.CachedContentTokenCount, metadata.CachedContentTokenCount);
Assert.Equal(testDataResponse.UsageMetadata!.ThoughtsTokenCount, metadata.ThoughtsTokenCount);
Assert.Equal(testDataCandidate.TokenCount, metadata.CurrentCandidateTokenCount);
Assert.Equal(testDataResponse.UsageMetadata.CandidatesTokenCount, metadata.CandidatesTokenCount);
Assert.Equal(testDataResponse.UsageMetadata.TotalTokenCount, metadata.TotalTokenCount);
Expand Down Expand Up @@ -207,6 +209,8 @@ public async Task ShouldReturnValidDictionaryMetadataAsync()
}

Assert.Equal(testDataResponse.UsageMetadata!.PromptTokenCount, metadata[nameof(GeminiMetadata.PromptTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata!.CachedContentTokenCount, metadata[nameof(GeminiMetadata.CachedContentTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata!.ThoughtsTokenCount, metadata[nameof(GeminiMetadata.ThoughtsTokenCount)]);
Assert.Equal(testDataCandidate.TokenCount, metadata[nameof(GeminiMetadata.CurrentCandidateTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata.CandidatesTokenCount, metadata[nameof(GeminiMetadata.CandidatesTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata.TotalTokenCount, metadata[nameof(GeminiMetadata.TotalTokenCount)]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ public async Task ShouldReturnValidGeminiMetadataAsync()
}

Assert.Equal(testDataResponse.UsageMetadata!.PromptTokenCount, metadata.PromptTokenCount);
Assert.Equal(testDataResponse.UsageMetadata!.CachedContentTokenCount, metadata.CachedContentTokenCount);
Assert.Equal(testDataResponse.UsageMetadata!.ThoughtsTokenCount, metadata.ThoughtsTokenCount);
Assert.Equal(testDataCandidate.TokenCount, metadata.CurrentCandidateTokenCount);
Assert.Equal(testDataResponse.UsageMetadata.CandidatesTokenCount, metadata.CandidatesTokenCount);
Assert.Equal(testDataResponse.UsageMetadata.TotalTokenCount, metadata.TotalTokenCount);
Expand Down Expand Up @@ -218,6 +220,8 @@ public async Task ShouldReturnValidDictionaryMetadataAsync()
}

Assert.Equal(testDataResponse.UsageMetadata!.PromptTokenCount, metadata[nameof(GeminiMetadata.PromptTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata!.CachedContentTokenCount, metadata[nameof(GeminiMetadata.CachedContentTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata!.ThoughtsTokenCount, metadata[nameof(GeminiMetadata.ThoughtsTokenCount)]);
Assert.Equal(testDataCandidate.TokenCount, metadata[nameof(GeminiMetadata.CurrentCandidateTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata.CandidatesTokenCount, metadata[nameof(GeminiMetadata.CandidatesTokenCount)]);
Assert.Equal(testDataResponse.UsageMetadata.TotalTokenCount, metadata[nameof(GeminiMetadata.TotalTokenCount)]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,8 @@ private static GeminiMetadata GetResponseMetadata(
FinishReason = candidate.FinishReason,
Index = candidate.Index,
PromptTokenCount = geminiResponse.UsageMetadata?.PromptTokenCount ?? 0,
CachedContentTokenCount = geminiResponse.UsageMetadata?.CachedContentTokenCount ?? 0,
ThoughtsTokenCount = geminiResponse.UsageMetadata?.ThoughtsTokenCount ?? 0,
CurrentCandidateTokenCount = candidate.TokenCount,
CandidatesTokenCount = geminiResponse.UsageMetadata?.CandidatesTokenCount ?? 0,
TotalTokenCount = geminiResponse.UsageMetadata?.TotalTokenCount ?? 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@ internal sealed class UsageMetadataElement
[JsonPropertyName("promptTokenCount")]
public int PromptTokenCount { get; set; }

/// <summary>
/// Gets the number of cached content tokens used.
/// </summary>
[JsonPropertyName("cachedContentTokenCount")]
public int CachedContentTokenCount { get; set; }

/// <summary>
/// Gets the number of thoughts tokens used.
/// </summary>
[JsonPropertyName("thoughtsTokenCount")]
public int ThoughtsTokenCount { get; set; }

/// <summary>
/// Gets the count of used tokens for all candidates.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,21 @@ public int PromptTokenCount
}

/// <summary>
/// The count of token in the current candidate.
/// The count of cached content tokens.
/// </summary>
public int CurrentCandidateTokenCount
public int CachedContentTokenCount
{
get => (this.GetValueFromDictionary(nameof(this.CurrentCandidateTokenCount)) as int?) ?? 0;
internal init => this.SetValueInDictionary(value, nameof(this.CurrentCandidateTokenCount));
get => (this.GetValueFromDictionary(nameof(this.CachedContentTokenCount)) as int?) ?? 0;
internal init => this.SetValueInDictionary(value, nameof(this.CachedContentTokenCount));
}

/// <summary>
/// The count of thoughts tokens.
/// </summary>
public int ThoughtsTokenCount
{
get => (this.GetValueFromDictionary(nameof(this.ThoughtsTokenCount)) as int?) ?? 0;
internal init => this.SetValueInDictionary(value, nameof(this.ThoughtsTokenCount));
}

/// <summary>
Expand All @@ -61,6 +70,15 @@ public int CandidatesTokenCount
internal init => this.SetValueInDictionary(value, nameof(this.CandidatesTokenCount));
}

/// <summary>
/// The count of token in the current candidate.
/// </summary>
public int CurrentCandidateTokenCount
{
get => (this.GetValueFromDictionary(nameof(this.CurrentCandidateTokenCount)) as int?) ?? 0;
internal init => this.SetValueInDictionary(value, nameof(this.CurrentCandidateTokenCount));
}

/// <summary>
/// The total count of tokens (prompt + total candidates token count).
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,8 @@ public async Task ChatGenerationReturnsUsedTokensAsync(ServiceType serviceType)
Assert.True(geminiMetadata.CandidatesTokenCount > 0);
Assert.True(geminiMetadata.PromptTokenCount > 0);
Assert.True(geminiMetadata.CurrentCandidateTokenCount > 0);
Assert.True(geminiMetadata.CachedContentTokenCount > 0);
Assert.True(geminiMetadata.ThoughtsTokenCount > 0);
}

[RetryTheory]
Expand All @@ -433,10 +435,14 @@ public async Task ChatStreamingReturnsUsedTokensAsync(ServiceType serviceType)
this.Output.WriteLine($"TotalTokenCount: {geminiMetadata.TotalTokenCount}");
this.Output.WriteLine($"CandidatesTokenCount: {geminiMetadata.CandidatesTokenCount}");
this.Output.WriteLine($"PromptTokenCount: {geminiMetadata.PromptTokenCount}");
this.Output.WriteLine($"CachedContentTokenCount: {geminiMetadata.CachedContentTokenCount}");
this.Output.WriteLine($"ThoughtsTokenCount: {geminiMetadata.ThoughtsTokenCount}");
this.Output.WriteLine($"CurrentCandidateTokenCount: {geminiMetadata.CurrentCandidateTokenCount}");
Assert.True(geminiMetadata.TotalTokenCount > 0);
Assert.True(geminiMetadata.CandidatesTokenCount > 0);
Assert.True(geminiMetadata.PromptTokenCount > 0);
Assert.True(geminiMetadata.CachedContentTokenCount > 0);
Assert.True(geminiMetadata.ThoughtsTokenCount > 0);
Assert.True(geminiMetadata.CurrentCandidateTokenCount > 0);
}

Expand Down