in app/app.py [0:0]
def wrangle_like_data(x: gr.LikeData, history) -> DataFrame:
"""Wrangle conversations and liked data into a DataFrame"""
if isinstance(x.index, int):
liked_index = x.index
else:
liked_index = x.index[0]
output_data = []
for idx, message in enumerate(history):
if isinstance(message, gr.ChatMessage):
message = message.__dict__
if idx == liked_index:
if x.liked is True:
message["metadata"] = {"title": "liked"}
elif x.liked is False:
message["metadata"] = {"title": "disliked"}
if message["metadata"] is None:
message["metadata"] = {}
elif not isinstance(message["metadata"], dict):
message["metadata"] = message["metadata"].__dict__
rating = message["metadata"].get("title")
if rating == "liked":
message["rating"] = 1
elif rating == "disliked":
message["rating"] = -1
else:
message["rating"] = 0
message["chosen"] = ""
message["rejected"] = ""
if message["options"]:
for option in message["options"]:
if not isinstance(option, dict):
option = option.__dict__
message[option["label"]] = option["value"]
else:
if message["rating"] == 1:
message["chosen"] = message["content"]
elif message["rating"] == -1:
message["rejected"] = message["content"]
output_data.append(
dict(
[(k, v) for k, v in message.items() if k not in ["metadata", "options"]]
)
)
return history, DataFrame(data=output_data)