Heat a heavy bottomed soup pan and melt 4 tbsp of butter. Add the flour and whisk continuously for 4-5 minutes, or until you have a thick, pale brownish roux. Whisk to avoid the flour sticking to the bottom of the pan and burning.
Add the milk, half and half or almond milk, whisking as you add so it blends with the roux. Add the chicken or vegetable stock, and whisk again. Keep on low heat and simmer for 15 minutes or until the liquid thickens. Whisk occasionally to prevent it from sticking to the bottom of the pan. This will reduce as it simmers.
Add the broccoli and carrots. Add the nutmeg, paprika, bay leaf, cayenne pepper or Kashmiri red chili powder, black pepper, and salt. Bring soup to a boil and let it simmer over low heat for another 15 minutes, checking that the carrots and broccoli are both tender.
Remove the pan from the heat and allow the soup to cool. When cool enough to handle, remove the bay leaf and blend or puree about half of the soup. Its not necessary to blend or puree the carrots or broccoli.
Pour the soup back into the soup pan to warm it back up, add the sauteed onions and garlic, chopped thyme leaves, sage and basil. Add the cheese, reserving 2-3 tbsp for garnish. Whisk the cheese till it blends into the soup. Once the cheese is completely melted, usually 1-2 minutes, turn off the stove. Garnish with mint leaves and a sprinkle of cheese. Serve with warm french bread.