feat: Expose log probs of candidates in LlmResponse

fixes https://github.com/google/adk-python/issues/2764

PiperOrigin-RevId: 807516910
This commit is contained in:
Xiang (Sean) Zhou
2025-09-15 21:36:15 -07:00
committed by Copybara-Service
parent 1ce043a278
commit f7bd3c111c
2 changed files with 253 additions and 0 deletions
+12
View File
@@ -42,6 +42,8 @@ class LlmResponse(BaseModel):
custom_metadata: The custom metadata of the LlmResponse.
input_transcription: Audio transcription of user input.
output_transcription: Audio transcription of model output.
avg_logprobs: Average log probability of the generated tokens.
logprobs_result: Detailed log probabilities for chosen and top candidate tokens.
"""
model_config = ConfigDict(
@@ -109,6 +111,12 @@ class LlmResponse(BaseModel):
output_transcription: Optional[types.Transcription] = None
"""Audio transcription of model output."""
avg_logprobs: Optional[float] = None
"""Average log probability of the generated tokens."""
logprobs_result: Optional[types.LogprobsResult] = None
"""Detailed log probabilities for chosen and top candidate tokens."""
@staticmethod
def create(
generate_content_response: types.GenerateContentResponse,
@@ -131,6 +139,8 @@ class LlmResponse(BaseModel):
grounding_metadata=candidate.grounding_metadata,
usage_metadata=usage_metadata,
finish_reason=candidate.finish_reason,
avg_logprobs=candidate.avg_logprobs,
logprobs_result=candidate.logprobs_result,
)
else:
return LlmResponse(
@@ -138,6 +148,8 @@ class LlmResponse(BaseModel):
error_message=candidate.finish_message,
usage_metadata=usage_metadata,
finish_reason=candidate.finish_reason,
avg_logprobs=candidate.avg_logprobs,
logprobs_result=candidate.logprobs_result,
)
else:
if generate_content_response.prompt_feedback: