In a large pot over medium-low heat, heat olive oil and add butter. Once the butter is melted, stir the onions and coat with oil and butter.
Cover and cook for 20 minutes, checking occasionally.
Turn up the heat to medium-high. Add ½ tsp salt and sugar. Stir and keep cooking until onions are brown and caramelized. (the bottom of the pan will develop some browning, it’s very important!)
Stir in flour one tablespoon at a time and cook for about 30 seconds.
Add 1 cup (235 ml) of the beef broth. Use a whisk to scrape up (deglaze) the browned bits stuck on the bottom of the pan.
Add the remaining five cups of beef stock, wine, sage and bay leaf. Bring to a boil. Reduce heat and simmer, uncovered, for 40 minutes.
In the meantime, cut the french bread or baguette into ½ inch (10 mm) thick pieces. Brush with oil on both sides and bake at 325˚F (160˚C) for 30 minutes, flipping halfway. Once they are done, increase oven temperature to 350˚F (175˚C).
Add optional ingredients.
In an oven safe bowl, pour the onion soup, filling about ¾ of the way full. Top with a piece of baked french bread, and generously sprinkle swiss and parmesan on top.
Bake for two to three minutes or until the cheese has melted completely and become slightly golden.