
    j
                        d dl mZmZmZmZmZ d dlZd dlmZ deee	      deee	      deee	      fdZ
	 ddeee	ef      d	eeee	ef   ej                  f      d
eeee	ef         deee	ef      fdZdeee	ef      deeee	ef   ej                  f      deee	ef      fdZdeee	ef      deeee	ef   ej                  f      deee	ef      fdZdeee	ef      deeee	ef   ej                  f      deee	ef      fdZy)    )OptionalAnyDictListUnionN)
dict_utilsexisting_tagsnew_tagsreturnc                 t    | |yt        | xs g       }|r|D ]  }||vs|j                  |        |r|S dS )zMerge tag lists, preserving existing tags and adding new ones.

    If both existing_tags and new_tags are None or empty, return None.N)listappend)r	   r
   resulttags       v/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/api_objects/data_helpers.py
merge_tagsr      sQ     !1-%2&FC& c"  6%%    existing_metadatanew_metadatapromptsc                 6    ||xs i }||d<   t        | |      S )zMerge the existing metadata dictionary with new data, with new values taking precedence.

    If both existing_metadata and new_metadata are None or empty, return None.
    opik_promptsnew_data_merge_dictionary_with_data)r   r   r   s      r   merge_metadatar      s,     #)r'.^$&'8<PPr   existing_inputs
new_inputsc                     t        | |      S )zMerge the existing input dictionary with new data, with new values taking precedence.

    If both existing_inputs and new_inputs are None or empty, return None.r   r   )r   r   s     r   merge_inputsr!   *   s     'LLr   existing_outputsnew_outputsc                     t        | |      S )zMerge the existing output dictionary with new data, with new values taking precedence.

    If both existing_outputs and new_outputs are None or empty, return None.r   r   )r"   r#   s     r   merge_outputsr%   4   s     ''7+NNr   existing_dictr   c                     | |yt        |t        j                        r|j                         }t	        | xs i       }|rt        j                  ||      }|r|S dS )zMerge the dictionary with new data, with new values taking precedence.

    If both existing_dict and new_data are None or empty, return None.N)
isinstancepydantic	BaseModel
model_dumpdictr   	deepmerge)r&   r   r   s      r   r   r   >   sa     !1(H../&&(-%2&F%%fh76%%r   )N)typingr   r   r   r   r   r)   opikr   strr   r*   r   r!   r%   r    r   r   <module>r2      s   3 3  &DI&&2:492E&d3i&* /3QS#X/Q5c3h1C1C!CDEQ d4S>*+Q d38n	Q Md38n-MtCH~x/A/AABCM d38nMOtCH~.O%S#X0B0B BCDO d38nO&DcN+&uT#s(^X-?-??@A& d38n&r   