diff --git a/rasa/core/tracker_store.py b/rasa/core/tracker_store.py index cefe645bfbbc..b9fcb2a51808 100644 --- a/rasa/core/tracker_store.py +++ b/rasa/core/tracker_store.py @@ -597,21 +597,24 @@ def _merge_trackers( return tracker merged = tracker.init_copy() - merged.update_with_events( - list(prior_tracker.events), override_timestamp=False, domain=None - ) + + def make_hashable(obj: Any): + if isinstance(obj, dict): + return frozenset((key, make_hashable(value)) for key, value in obj.items()) + elif isinstance(obj, list): + return tuple(make_hashable(item) for item in obj) + return obj + + merged_events = list(prior_tracker.events) + existing_event_hashes = {make_hashable(event.as_dict()) for event in merged_events} + + merged.update_with_events(merged_events, override_timestamp=False, domain=None) for new_event in tracker.events: - # Event subclasses implement `__eq__` method that make it difficult - # to compare events. We use `as_dict` to compare events. - if all( - [ - new_event.as_dict() != existing_event.as_dict() - for existing_event in merged.events - ] - ): + event_hash = make_hashable(new_event.as_dict()) + if event_hash not in existing_event_hashes: merged.update(new_event) - + existing_event_hashes.add(event_hash) return merged diff --git a/version b/version index 9fd21eac004b..79b77041d4d3 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.6.5-e8-0.4.0 \ No newline at end of file +3.6.5-e8-0.4.1 \ No newline at end of file