Free Camera is rotating improperly once moving your mouse fast

I am making a Free Camera system, it all works perfectly fine, until I move my mouse slightly fast, this is where the camera is rotating in a wavy way, I don’t know how to explain this, I will just leave a video that shows the problem:

Here is my module:

local userInputService = (game:GetService("UserInputService"));
local runService = (game:GetService("RunService"));
local freeCamera = {}
freeCamera.__index = freeCamera

function freeCamera.new()
	local self = {};
	self.Inputs = {};
	self.IsEnabled = (false);
	
	self.AxisY = (0);
	self.AxisX = (0);
	
	self.Connections = {};
	return setmetatable(self, freeCamera)
end;

function freeCamera:Update(dt) -- // Important part.
	workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable
	local look = CFrame.new(0, 0, 0);
	if table.find(self.Inputs, Enum.KeyCode.W) then
		look = CFrame.new(0, 0, -8)
	end;
	
	if table.find(self.Inputs, Enum.KeyCode.S) then
		look = CFrame.new(0, 0, 8)
	end;
	
	local side = CFrame.new(0, 0, 0);
	if table.find(self.Inputs, Enum.KeyCode.A) then
		side = CFrame.new(-8, 0, 0)
	end;

	if table.find(self.Inputs, Enum.KeyCode.D) then
		side = CFrame.new(8, 0, 0)
	end;
	
	local up = CFrame.new(0, 0, 0)
	if table.find(self.Inputs, Enum.KeyCode.E) then
		up = CFrame.new(0, 8, 0)
	end;

	if table.find(self.Inputs, Enum.KeyCode.Q) then
		up = CFrame.new(0, -8, 0)
	end;
	
	local isMouseBtnPressed = userInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
	userInputService.MouseBehavior = isMouseBtnPressed and Enum.MouseBehavior.LockCurrentPosition or Enum.MouseBehavior.Default
	
	local mouseDelta = userInputService:GetMouseDelta()
	self.AxisY = math.clamp(self.AxisY + mouseDelta.Y, -90, 90)
	self.AxisX = self.AxisX + mouseDelta.X
	
	local currentCamera = (workspace.CurrentCamera);
	
	local cframeGoal = CFrame.new((currentCamera.CFrame * look * side * up).Position) * CFrame.Angles(0, -math.rad(self.AxisX), 0) * CFrame.Angles(-math.rad(self.AxisY), 0, 0);
	currentCamera.CFrame = currentCamera.CFrame:Lerp(cframeGoal, dt * 10)
end;

function freeCamera:Enable(isEnabled)
	if (self.IsEnabled == isEnabled) then return end;
	self.IsEnabled = isEnabled
	if not (isEnabled) then
		self.Inputs = {}
		for _, connection in next, self.Connections do
			connection:Disconnect()
			print("Disconnected connection.")
		end;
	else
		local ib = userInputService.InputBegan:Connect(function(input, isGpe)
			if (isGpe) then return end;
			task.spawn(function()
				if (input.KeyCode == Enum.KeyCode.W) then
					for index, someInput in next, self.Inputs do
						if (someInput == Enum.KeyCode.S) then
							table.remove(self.Inputs, index)
						end;
					end;
				end;
				
				if (input.KeyCode == Enum.KeyCode.S) then
					for index, someInput in next, self.Inputs do
						if (someInput == Enum.KeyCode.W) then
							table.remove(self.Inputs, index)
						end;
					end;
				end;
				
				
				
				

				if (input.KeyCode == Enum.KeyCode.A) then
					for index, someInput in next, self.Inputs do
						if (someInput == Enum.KeyCode.D) then
							table.remove(self.Inputs, index)
						end;
					end;
				end;
				
				if (input.KeyCode == Enum.KeyCode.D) then
					for index, someInput in next, self.Inputs do
						if (someInput == Enum.KeyCode.A) then
							table.remove(self.Inputs, index)
						end;
					end;
				end;
				
				
				
				
				
				
				if (input.KeyCode == Enum.KeyCode.Q) then
					for index, someInput in next, self.Inputs do
						if (someInput == Enum.KeyCode.E) then
							table.remove(self.Inputs, index)
						end;
					end;
				end;
				
				if (input.KeyCode == Enum.KeyCode.E) then
					for index, someInput in next, self.Inputs do
						if (someInput == Enum.KeyCode.Q) then
							table.remove(self.Inputs, index)
						end;
					end;
				end;
			end)

			table.insert(self.Inputs, input.KeyCode)
		end)
		
		table.insert(self.Connections, ib)
		
		local ie = userInputService.InputEnded:Connect(function(input, isGpe)
			if (isGpe) then return end;
			task.spawn(function()
				for index, someInput in next, self.Inputs do
					if (someInput == input.KeyCode) then
						table.remove(self.Inputs, index)
					end;
				end;
			end)
		end)

		table.insert(self.Connections, ie)
		
		local rs = runService.RenderStepped:Connect(function(dt)
			self:Update(dt)
		end)
		
		table.insert(self.Connections, rs)
	end;
end;

return freeCamera

I have attempted some methods to solve that problem, but none of them seemed to actually work.
Any help would be appreciated.