Use quaternions and spherical lerp; here's an example I used for smooth mouse look
var hor_quat = Quat(Vector3(0, -1, 0), deg2rad(target_look.x))
var ver_quat = Quat(Vector3(-1, 0, 0), deg2rad(target_look.y))
var cur_quat = Quat(looking.global_transform.basis)
cur_quat = cur_quat.slerp(hor_quat * ver_quat, delta * cam_smooth_speed)
looking.global_transform.basis = Basis(cur_quat)