# Note: This example uses Python SDK v7
import pandas as pd
from arize.pandas.logger import Client
# Rename columns to match Arize AX schema
eval_results_correctness = eval_results_correctness.rename(columns={
"label": "SessionCorrectness.label",
"explanation": "SessionCorrectness.explanation",
})[["SessionCorrectness.label", "SessionCorrectness.explanation"]]
eval_results_goal_achievement = eval_results_goal_achievement.rename(columns={
"label": "GoalCompletion.label",
"explanation": "GoalCompletion.explanation",
})[["GoalCompletion.label", "GoalCompletion.explanation"]]
eval_results_frustration = eval_results_frustration.rename(columns={
"label": "Frustration.label",
"explanation": "Frustration.explanation",
})[["Frustration.label", "Frustration.explanation"]]
# Combine all the evaluation results
combined_eval_results = eval_results_correctness \
.join(eval_results_goal_achievement, how="outer") \
.join(eval_results_frustration, how="outer")
# Merge evaluation results with session data
merged_df = pd.merge(sessions_df, combined_eval_results, left_index=True, right_index=True)
merged_df.rename(
columns={
"SessionCorrectness.label": "session_eval.SessionCorrectness.label",
"SessionCorrectness.explanation": "session_eval.SessionCorrectness.explanation",
"GoalCompletion.label": "session_eval.GoalCompletion.label",
"GoalCompletion.explanation": "session_eval.GoalCompletion.explanation",
"Frustration.label": "session_eval.Frustration.label",
"Frustration.explanation": "session_eval.Frustration.explanation",
},
inplace=True,
)
# Get the root span for each session to log the evaluation against
root_spans = (
primary_df.sort_values("start_time")
.drop_duplicates(subset=["attributes.session.id"], keep="first")[
["attributes.session.id", "context.span_id"]
]
)
# Merge to get the root span_id for each session
final_df = pd.merge(
merged_df, # left
root_spans, # right
left_on="session_id", # column in merged_df
right_on="attributes.session.id", # column in root_spans
how="left",
)
final_df = final_df.set_index("context.span_id", drop=False)
# Log evaluations back to Arize AX
arize_client = Client(space_id=os.environ["SPACE_ID"], api_key=os.environ["API_KEY"])
response = arize_client.log_evaluations_sync(
dataframe=final_df,
model_id=model_id,
)