File tree Expand file tree Collapse file tree 2 files changed +40
-0
lines changed
Expand file tree Collapse file tree 2 files changed +40
-0
lines changed Original file line number Diff line number Diff 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 (
Original file line number Diff line number Diff 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" ]
You can’t perform that action at this time.
0 commit comments