in mm_action_prediction/tools/extract_actions.py [0:0]
def get_keystrokes_with_args(raw_keystroke_list, price_dict):
"""Gets the keystrokes + args from the raw keystrokes in the logs after some processing
Args:
raw_keystroke_list: list extracted from the logs
price_dict : dict from furniture type to the default min & max prices
Returns:
list of keystrokes where each keystroke is an api name + corresponding args
"""
keystrokes_with_args = []
for stroke in raw_keystroke_list:
keystroke = json.loads(stroke)[ACTION_NAME]
if keystroke == SEARCH_FURNITURE:
furniture_type_arg = json.loads(stroke)[ACTION_METADATA][FURNITURE_TYPE]
if furniture_type_arg != "":
action_metadata = json.loads(stroke)[ACTION_METADATA]
# check if the prices are close to the default populated prices.
# if yes, replace by -1
min_price_arg = action_metadata[MIN_PRICE]
max_price_arg = action_metadata[MAX_PRICE]
if math.isclose(
min_price_arg, price_dict[furniture_type_arg][0], abs_tol=0.9
):
action_metadata[MIN_PRICE] = -1
if math.isclose(
max_price_arg, price_dict[furniture_type_arg][1], abs_tol=0.9
):
action_metadata[MAX_PRICE] = -1
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: action_metadata,
}
)
elif keystroke == BRING_OBJECT_TO_FOCUS:
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS],
}
)
elif keystroke.startswith(ROTATE):
if (
json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS] is not None
and json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS] != ""
):
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS],
}
)
else:
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: json.loads(stroke)[NEXT_STATE]["sharedPrefabInFocus"],
}
)
elif keystroke == FURNITURE_CLICK:
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: get_args_for_furniture_click(stroke),
}
)
elif keystroke == SHARE:
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: None,
}
)
# fix some PREVIOUS_STATE log strangeness
keystrokes_with_args[-1][PREVIOUS_STATE][PREFAB_IN_FOCUS] = \
keystrokes_with_args[-1][NEXT_STATE][SHARED_FOCUS]
keystrokes_with_args[-1][PREVIOUS_STATE][PREFABS_IN_CAROUSEL] = \
keystrokes_with_args[-1][NEXT_STATE][SHARED_CAROUSEL]
else:
keystrokes_with_args.append(
{
API: keystroke,
NEXT_STATE: json.loads(stroke)[NEXT_STATE],
PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
ARGS: None,
}
)
return keystrokes_with_args