Do we have any settings to make sure caching should not happen again on machine which is already updated to latest version.
For Ex : I have machine XXX in smart group which needs to cache macOS. Once it is installed with macOS, there is no need to cache macOS again. Surprisingly it is happening in my case so I dont need cache again on same machine.
How is your Smart Group set up? What criteria? You didn't mention it specifically, but I'll assume for a moment you're referring to Sierra (10.12.x)
I would imagine that if you have it set up to only look at Macs that are not already running that macOS version , the caching shouldn't occur again on them after they've been updated to it.
However, there is a catch. It might depend on when you're collecting inventory on the Macs. If the last inventory data the JSS knows about for those Macs is that its running an OS lower than 10.12.x, then yes, it may cache again, since the JSS will think they still are running something older . You'll need to set up a way to make sure that inventory is collected on those Macs after they've been updated, either before a reboot, if possible, or immediately after it. That way they will fall out of the Smart Group and the pkg should not get cached on them again.
This could potentially be accomplished by creating a smart group for devices that have the upgrade cached, but are still on the previous OS, and scope an on startup update inventory to that group. They will update inventory every reboot until the OS is upgraded, but that would surely cause less impact than recaching the upgrade.
Edit: You'd also want to add an update inventory to the cache policy, so the computers will fall into the smart group properly after caching the upgrade.