Skip to content

Commit f0ab24d

Browse files
committed
fix(decorators): merge trace tags and metadata on updates
1 parent d4ac214 commit f0ab24d

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

langfuse/decorators/langfuse_decorator.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,18 @@ def update_current_trace(
792792
if v is not None
793793
}
794794

795+
# metadata and tags are merged server side. Send separate update event to avoid merging them SDK side
796+
server_merged_attributes = ["metadata", "tags"]
797+
if any(attribute in params_to_update for attribute in server_merged_attributes):
798+
self.client_instance.trace(
799+
id=trace_id,
800+
**{
801+
k: v
802+
for k, v in params_to_update.items()
803+
if k in server_merged_attributes
804+
},
805+
)
806+
795807
_observation_params_context.get()[trace_id].update(params_to_update)
796808

797809
def update_current_observation(

tests/test_decorators.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,3 +1541,31 @@ def main():
15411541
assert parsed_reference_string["content_type"] == "application/pdf"
15421542
assert parsed_reference_string["media_id"] is not None
15431543
assert parsed_reference_string["source"] == "bytes"
1544+
1545+
1546+
def test_merge_metadata_and_tags():
1547+
mock_trace_id = create_uuid()
1548+
1549+
@observe
1550+
def nested():
1551+
langfuse_context.update_current_trace(
1552+
metadata={"key2": "value2"}, tags=["tag2"]
1553+
)
1554+
1555+
@observe
1556+
def main():
1557+
langfuse_context.update_current_trace(
1558+
metadata={"key1": "value1"}, tags=["tag1"]
1559+
)
1560+
1561+
nested()
1562+
1563+
main(langfuse_observation_id=mock_trace_id)
1564+
1565+
langfuse_context.flush()
1566+
1567+
trace_data = get_api().trace.get(mock_trace_id)
1568+
1569+
assert trace_data.metadata == {"key1": "value1", "key2": "value2"}
1570+
1571+
assert trace_data.tags == ["tag1", "tag2"]

0 commit comments

Comments
 (0)