mirror of
https://github.com/encounter/adk-python.git
synced 2026-07-09 18:19:28 -07:00
fix: Use the agent name as the author of the audio event
Co-authored-by: Xiang (Sean) Zhou <seanzhougoogle@google.com> PiperOrigin-RevId: 855789317
This commit is contained in:
committed by
Copybara-Service
parent
f668a5de44
commit
ab62b1bffd
@@ -181,10 +181,16 @@ class AudioCacheManager:
|
|||||||
artifact_ref = f'artifact://{invocation_context.app_name}/{invocation_context.user_id}/{invocation_context.session.id}/_adk_live/{filename}#{revision_id}'
|
artifact_ref = f'artifact://{invocation_context.app_name}/{invocation_context.user_id}/{invocation_context.session.id}/_adk_live/{filename}#{revision_id}'
|
||||||
|
|
||||||
# Create event with file data reference to add to session
|
# Create event with file data reference to add to session
|
||||||
|
# For model events, author should be the agent name, not the role
|
||||||
|
author = (
|
||||||
|
invocation_context.agent.name
|
||||||
|
if audio_cache[0].role == 'model'
|
||||||
|
else audio_cache[0].role
|
||||||
|
)
|
||||||
audio_event = Event(
|
audio_event = Event(
|
||||||
id=Event.new_id(),
|
id=Event.new_id(),
|
||||||
invocation_id=invocation_context.invocation_id,
|
invocation_id=invocation_context.invocation_id,
|
||||||
author=audio_cache[0].role,
|
author=author,
|
||||||
content=types.Content(
|
content=types.Content(
|
||||||
role=audio_cache[0].role,
|
role=audio_cache[0].role,
|
||||||
parts=[
|
parts=[
|
||||||
|
|||||||
@@ -387,3 +387,54 @@ class TestAudioCacheManager:
|
|||||||
assert filename.startswith(
|
assert filename.startswith(
|
||||||
f'adk_live_audio_storage_input_audio_{expected_timestamp_ms}'
|
f'adk_live_audio_storage_input_audio_{expected_timestamp_ms}'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_flush_event_author_for_user_audio(self):
|
||||||
|
"""Test that flushed user audio events have 'user' as author."""
|
||||||
|
invocation_context = await testing_utils.create_invocation_context(
|
||||||
|
testing_utils.create_test_agent()
|
||||||
|
)
|
||||||
|
|
||||||
|
# Set up mock artifact service
|
||||||
|
mock_artifact_service = AsyncMock()
|
||||||
|
mock_artifact_service.save_artifact.return_value = 123
|
||||||
|
invocation_context.artifact_service = mock_artifact_service
|
||||||
|
|
||||||
|
# Cache user input audio
|
||||||
|
input_blob = types.Blob(data=b'user_audio_data', mime_type='audio/pcm')
|
||||||
|
self.manager.cache_audio(invocation_context, input_blob, 'input')
|
||||||
|
|
||||||
|
# Flush cache and get events
|
||||||
|
events = await self.manager.flush_caches(
|
||||||
|
invocation_context, flush_user_audio=True, flush_model_audio=False
|
||||||
|
)
|
||||||
|
|
||||||
|
# Verify event author is 'user' for user audio
|
||||||
|
assert len(events) == 1
|
||||||
|
assert events[0].author == 'user'
|
||||||
|
assert events[0].content.role == 'user'
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_flush_event_author_for_model_audio(self):
|
||||||
|
"""Test that flushed model audio events have agent name as author, not 'model'."""
|
||||||
|
agent = testing_utils.create_test_agent(name='my_test_agent')
|
||||||
|
invocation_context = await testing_utils.create_invocation_context(agent)
|
||||||
|
|
||||||
|
# Set up mock artifact service
|
||||||
|
mock_artifact_service = AsyncMock()
|
||||||
|
mock_artifact_service.save_artifact.return_value = 123
|
||||||
|
invocation_context.artifact_service = mock_artifact_service
|
||||||
|
|
||||||
|
# Cache model output audio
|
||||||
|
output_blob = types.Blob(data=b'model_audio_data', mime_type='audio/wav')
|
||||||
|
self.manager.cache_audio(invocation_context, output_blob, 'output')
|
||||||
|
|
||||||
|
# Flush cache and get events
|
||||||
|
events = await self.manager.flush_caches(
|
||||||
|
invocation_context, flush_user_audio=False, flush_model_audio=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Verify event author is agent name (not 'model') for model audio
|
||||||
|
assert len(events) == 1
|
||||||
|
assert events[0].author == 'my_test_agent' # Agent name, not 'model'
|
||||||
|
assert events[0].content.role == 'model' # Role is still 'model'
|
||||||
|
|||||||
Reference in New Issue
Block a user