Make pet look at character

 for i, v in pairs(workspace.Pets:WaitForChild(plr.Name):GetChildren()) do
            local Offset = 0.5
            local PetHolder = workspace.Pets:WaitForChild(plr.Name):GetChildren()
            local Angle = ((i + Offset) / #PetHolder) * math.pi * 2
            v.PrimaryPart.BodyPosition.Position = (HumanoidRootPart.CFrame * CFrame.Angles(0,Angle,0) * PetOffset).p
            v.PrimaryPart.BodyGyro.CFrame = HumanoidRootPart.CFrame

How do I make pet look at character?

A picture is here.

All of your code looks correct, maybe try using the D, P and MaxTorque properties of the BodyGyro and MaxForce property of the BodyPosition?