1234567891011121314151617181920212223242526272829303132333435 |
- from typing import Any, Optional
- def merge_metadata_dict(left: Optional[dict[str, Any]], right: Optional[dict[str, Any]]) -> Optional[dict[str, Any]]:
- """
- Merge the metadatas of two BaseMessage types.
- Args:
- left (dict[str, Any]): metadata of human message
- right (dict[str, Any]): metadata of AI message
- Returns:
- dict[str, Any]: combined metadata dict with dedup
- to be saved in db.
- """
- if not left and not right:
- return None
- elif not left:
- return right
- elif not right:
- return left
- merged = left.copy()
- for k, v in right.items():
- if k not in merged:
- merged[k] = v
- elif type(merged[k]) != type(v):
- raise ValueError(f'additional_kwargs["{k}"] already exists in this message,' " but with a different type.")
- elif isinstance(merged[k], str):
- merged[k] += v
- elif isinstance(merged[k], dict):
- merged[k] = merge_metadata_dict(merged[k], v)
- else:
- raise ValueError(f"Additional kwargs key {k} already exists in this message.")
- return merged
|