Skip to content

Commit 021c7b2

Browse files
feat: add deterministic event_id for deduplication in telemetry events
Add SHA-256 based event_id (event_name|process_id|agent_name|model) to each emitted event, enabling KQL dedup without accelerator-specific max() patterns. This makes the workbook generic across accelerators. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent cf5805d commit 021c7b2

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

src/ContentProcessor/src/libs/llm_token_telemetry.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848

4949
import asyncio
5050
import functools
51+
import hashlib
5152
import logging
5253
import os
5354
import random
@@ -526,6 +527,18 @@ def emit(self, event_name: str, **dimensions: Any) -> None:
526527
continue
527528
props[k] = v if isinstance(v, str) else str(v)
528529

530+
# Deterministic event_id for deduplication across services.
531+
# Key fields: event_name + process_id + agent_name + model
532+
dedup_parts = [
533+
event_name,
534+
props.get("process_id", ""),
535+
props.get("agent_name", ""),
536+
props.get("model_deployment_name", ""),
537+
]
538+
props["event_id"] = hashlib.sha256(
539+
"|".join(dedup_parts).encode()
540+
).hexdigest()[:16]
541+
529542
if not self.enabled:
530543
self._log.debug(
531544
"App Insights not configured -- skipping event %s (%s)",

src/ContentProcessorWorkflow/src/libs/llm_token_telemetry.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848

4949
import asyncio
5050
import functools
51+
import hashlib
5152
import logging
5253
import os
5354
import random
@@ -526,6 +527,18 @@ def emit(self, event_name: str, **dimensions: Any) -> None:
526527
continue
527528
props[k] = v if isinstance(v, str) else str(v)
528529

530+
# Deterministic event_id for deduplication across services.
531+
# Key fields: event_name + process_id + agent_name + model
532+
dedup_parts = [
533+
event_name,
534+
props.get("process_id", ""),
535+
props.get("agent_name", ""),
536+
props.get("model_deployment_name", ""),
537+
]
538+
props["event_id"] = hashlib.sha256(
539+
"|".join(dedup_parts).encode()
540+
).hexdigest()[:16]
541+
529542
if not self.enabled:
530543
self._log.debug(
531544
"App Insights not configured -- skipping event %s (%s)",

0 commit comments

Comments
 (0)