@@ -159,14 +159,18 @@ def _capture_event(
159159 properties : Dict [str , Any ],
160160 distinct_id : Optional [str ] = None ,
161161 ) -> None :
162- """Capture an event without allowing telemetry failures to escape."""
162+ """Capture an event without allowing telemetry failures to escape.
163+
164+ Without a distinct ID, the event is personless and uses its trace ID.
165+ """
163166 _capture_processor_event (
164167 self ._client ,
165168 event ,
166169 properties ,
167170 default_properties = self ._properties ,
168- distinct_id = distinct_id ,
171+ distinct_id = distinct_id or properties . get ( "$ai_trace_id" ) ,
169172 groups = self ._groups ,
173+ personless = distinct_id is None ,
170174 )
171175
172176 def on_trace_start (self , trace : Trace ) -> None :
@@ -228,12 +232,9 @@ def on_trace_end(self, trace: Trace) -> None:
228232 if metadata :
229233 properties ["$ai_trace_metadata" ] = _ensure_serializable (metadata )
230234
231- if distinct_id is None :
232- properties ["$process_person_profile" ] = False
233-
234235 self ._capture_event (
235236 event = "$ai_trace" ,
236- distinct_id = distinct_id or trace_id ,
237+ distinct_id = distinct_id ,
237238 properties = properties ,
238239 )
239240 except Exception as e :
@@ -267,8 +268,8 @@ def on_span_end(self, span: Span[Any]) -> None:
267268 latency = (ended - started ) if (started and ended ) else 0
268269
269270 # Get user-provided distinct ID from trace metadata (resolved at trace start).
270- # None means no user-provided ID — use trace_id as fallback in personless mode,
271- # matching the langchain/openai pattern: `distinct_id or trace_id` .
271+ # None means no user-provided ID: _capture_event falls back to the
272+ # trace ID and makes the event personless .
272273 trace_info = self ._trace_metadata .get (trace_id , {})
273274 distinct_id = trace_info .get ("distinct_id" ) or self ._get_distinct_id (None )
274275
@@ -317,11 +318,6 @@ def on_span_end(self, span: Span[Any]) -> None:
317318 "$ai_error_type" : error_type ,
318319 }
319320
320- # Personless mode: no user-provided distinct_id, fallback to trace_id
321- if distinct_id is None :
322- error_properties ["$process_person_profile" ] = False
323- distinct_id = trace_id
324-
325321 # Dispatch based on span data type
326322 if isinstance (span_data , GenerationSpanData ):
327323 self ._handle_generation_span (
@@ -471,7 +467,7 @@ def _handle_generation_span(
471467 span_id : str ,
472468 parent_id : Optional [str ],
473469 latency : float ,
474- distinct_id : str ,
470+ distinct_id : Optional [ str ] ,
475471 group_id : Optional [str ],
476472 error_properties : Dict [str , Any ],
477473 ) -> None :
@@ -554,7 +550,7 @@ def _handle_function_span(
554550 span_id : str ,
555551 parent_id : Optional [str ],
556552 latency : float ,
557- distinct_id : str ,
553+ distinct_id : Optional [ str ] ,
558554 group_id : Optional [str ],
559555 error_properties : Dict [str , Any ],
560556 ) -> None :
@@ -587,7 +583,7 @@ def _handle_agent_span(
587583 span_id : str ,
588584 parent_id : Optional [str ],
589585 latency : float ,
590- distinct_id : str ,
586+ distinct_id : Optional [ str ] ,
591587 group_id : Optional [str ],
592588 error_properties : Dict [str , Any ],
593589 ) -> None :
@@ -616,7 +612,7 @@ def _handle_handoff_span(
616612 span_id : str ,
617613 parent_id : Optional [str ],
618614 latency : float ,
619- distinct_id : str ,
615+ distinct_id : Optional [ str ] ,
620616 group_id : Optional [str ],
621617 error_properties : Dict [str , Any ],
622618 ) -> None :
@@ -640,7 +636,7 @@ def _handle_guardrail_span(
640636 span_id : str ,
641637 parent_id : Optional [str ],
642638 latency : float ,
643- distinct_id : str ,
639+ distinct_id : Optional [ str ] ,
644640 group_id : Optional [str ],
645641 error_properties : Dict [str , Any ],
646642 ) -> None :
@@ -663,7 +659,7 @@ def _handle_response_span(
663659 span_id : str ,
664660 parent_id : Optional [str ],
665661 latency : float ,
666- distinct_id : str ,
662+ distinct_id : Optional [ str ] ,
667663 group_id : Optional [str ],
668664 error_properties : Dict [str , Any ],
669665 ) -> None :
@@ -732,7 +728,7 @@ def _handle_custom_span(
732728 span_id : str ,
733729 parent_id : Optional [str ],
734730 latency : float ,
735- distinct_id : str ,
731+ distinct_id : Optional [ str ] ,
736732 group_id : Optional [str ],
737733 error_properties : Dict [str , Any ],
738734 ) -> None :
@@ -757,7 +753,7 @@ def _handle_audio_span(
757753 span_id : str ,
758754 parent_id : Optional [str ],
759755 latency : float ,
760- distinct_id : str ,
756+ distinct_id : Optional [ str ] ,
761757 group_id : Optional [str ],
762758 error_properties : Dict [str , Any ],
763759 ) -> None :
@@ -832,7 +828,7 @@ def _handle_mcp_span(
832828 span_id : str ,
833829 parent_id : Optional [str ],
834830 latency : float ,
835- distinct_id : str ,
831+ distinct_id : Optional [ str ] ,
836832 group_id : Optional [str ],
837833 error_properties : Dict [str , Any ],
838834 ) -> None :
@@ -856,7 +852,7 @@ def _handle_generic_span(
856852 span_id : str ,
857853 parent_id : Optional [str ],
858854 latency : float ,
859- distinct_id : str ,
855+ distinct_id : Optional [ str ] ,
860856 group_id : Optional [str ],
861857 error_properties : Dict [str , Any ],
862858 ) -> None :
0 commit comments