Boil the onions, cashew and almonds in 2 cups if water for 4-5 mins. Drain and reserve the water. Grind the onions, cashews and almonds to a smooth paste.
Heat the oil in a pan. Crush the whole spices (cloves, cinnamon,cardamom) and add to the hot oil with the bay leaf. Give it a quick stir.
Addd the serrano peppers, garlic and ginger to the pan. Add the onion paste and saute till the oil separates on the side, about 3-4 mins.
Puree the tomatoes in a blender and keep ready.
Once the oil separates in the pan, add the turmeric, cayenne, coriander, cumin and black pepper. Give it a quick stir and add the pureed tomatoes.
Once the tomatoes start bubbling, add salt and some of the reserved water, if the sauce is too thick. Let it come to a boil.
Lower the heat the medium and add the cream and bloomed saffron to the pan. Mix well and add the paneer cubes. Let simmer for 3-4 mins. Add more of the reserved water, if you want to thin down the sauce a little.
Remove from heat and garnish with ground cardamom and minced cilantro. Serve hot with naans or rotis.