|
22 | 22 | from ..events.event import Event |
23 | 23 | from ..sessions.base_session_service import BaseSessionService |
24 | 24 | from ..sessions.session import Session |
| 25 | +from ..telemetry.tracing import _build_compaction_attributes |
| 26 | +from ..telemetry.tracing import _build_compaction_result_attributes |
| 27 | +from ..telemetry.tracing import tracer |
25 | 28 | from .app import App |
26 | 29 | from .app import EventsCompactionConfig |
27 | 30 | from .llm_event_summarizer import LlmEventSummarizer |
28 | 31 |
|
29 | 32 | logger = logging.getLogger('google_adk.' + __name__) |
30 | 33 |
|
31 | 34 |
|
| 35 | +async def _summarize_events_with_trace( |
| 36 | + *, |
| 37 | + session: Session, |
| 38 | + config: EventsCompactionConfig, |
| 39 | + events_to_compact: list[Event], |
| 40 | + trigger: str, |
| 41 | +) -> Event | None: |
| 42 | + """Summarizes events within a trace span labeled for compaction.""" |
| 43 | + if config.summarizer is None: |
| 44 | + return None |
| 45 | + |
| 46 | + attributes = _build_compaction_attributes( |
| 47 | + session_id=session.id, |
| 48 | + trigger=trigger, |
| 49 | + summarizer_type=type(config.summarizer).__name__, |
| 50 | + event_count=len(events_to_compact), |
| 51 | + token_threshold=config.token_threshold, |
| 52 | + event_retention_size=config.event_retention_size, |
| 53 | + compaction_interval=config.compaction_interval, |
| 54 | + overlap_size=config.overlap_size, |
| 55 | + ) |
| 56 | + |
| 57 | + with tracer.start_as_current_span(f'compact_events {trigger}') as span: |
| 58 | + span.set_attributes(attributes) |
| 59 | + compaction_event = await config.summarizer.maybe_summarize_events( |
| 60 | + events=events_to_compact |
| 61 | + ) |
| 62 | + span.set_attributes(_build_compaction_result_attributes(compaction_event)) |
| 63 | + return compaction_event |
| 64 | + |
| 65 | + |
32 | 66 | def _count_text_chars_in_content(content: types.Content | None) -> int: |
33 | 67 | """Returns the number of text characters in a content object.""" |
34 | 68 | total_chars = 0 |
@@ -383,8 +417,11 @@ async def _run_compaction_for_token_threshold_config( |
383 | 417 | if config.summarizer is None: |
384 | 418 | return False |
385 | 419 |
|
386 | | - compaction_event = await config.summarizer.maybe_summarize_events( |
387 | | - events=events_to_compact |
| 420 | + compaction_event = await _summarize_events_with_trace( |
| 421 | + session=session, |
| 422 | + config=config, |
| 423 | + events_to_compact=events_to_compact, |
| 424 | + trigger='token_threshold', |
388 | 425 | ) |
389 | 426 | if compaction_event: |
390 | 427 | await session_service.append_event(session=session, event=compaction_event) |
@@ -602,8 +639,11 @@ async def _run_compaction_for_sliding_window( |
602 | 639 | if config.summarizer is None: |
603 | 640 | return None |
604 | 641 |
|
605 | | - compaction_event = await config.summarizer.maybe_summarize_events( |
606 | | - events=events_to_compact |
| 642 | + compaction_event = await _summarize_events_with_trace( |
| 643 | + session=session, |
| 644 | + config=config, |
| 645 | + events_to_compact=events_to_compact, |
| 646 | + trigger='sliding_window', |
607 | 647 | ) |
608 | 648 | if compaction_event: |
609 | 649 | await session_service.append_event(session=session, event=compaction_event) |
|
0 commit comments