Pick through the dried lentils and kidney beans, removing any debris. Cover with water by 1 inch and soak overnight.
Cut onion in half. Keep one half intact and chop other half. Tie the cloves, cardamom pods and cinnamon stick in a piece of cheesecloth with kitchen twine, set aide.
Rinse soaked lentils and kidney beans. Transfer to a large stock pot or Dutch oven and cover with water by 1 inch. Add half of the onion and bring to a boil, cover and cook on high for 10 minutes. Lower heat to simmer and cook covered for another 20 minutes. Remove and discard cooked onion half and drain lentils, set aside.
To the stock pot or Dutch oven add butter and sauté the chopped onion for 2 minutes. Add the chiles, ginger paste, garlic, cumin, salt, red chili powder, turmeric, garam masala and sauté for 3 minutes.
Stir in the pureed tomatoes, tied spice bag, 4 cups water and the par-cooked lentils and kidney beans. Cover and simmer on low for 45 minutes.
Carefully remove spice bag and discard. Either use an immersion blender and pulse several times or transfer half to a blender and puree. Pour back into stock pot or Dutch and stir (See Note 1). Simmer for 10 more minutes. The soup becomes creamier as it simmers, almost a velvety consistency. Add more water as needed for desired consistency. Add the cream and liquid smoke (this is optional, but the flavor is great). Stir to incorporate in the lentils and season to taste.
Serve this garnished with a drizzle of cream, dab of butter, chopped cilantro and lots of dosa, naan, roti, flatbread, pitas or whatever bread you like.