Melt butter in a 6 quart Dutch oven or heavy-bottomed pot over medium heat. Add onions, garlic, thyme, salt, and pepper. Cook onions for 45 to 50 minutes, or until caramelized and golden in color, stirring often.
Deglaze the pot by pouring in the red wine. Use a wooden spoon to stir and scrape the bottom of the pot to remove any browned bits.
Pour in beef stock and Worcestershire sauce. Add bay leaves and stir to combine. Increase heat to medium high and bring to a simmer. Reduce heat as necessary to maintain a simmer (medium to low). Simmer for 20 minutes (uncovered), stirring occasionally. Remove and discard bay leaves.
Using a large spoon, skim off fat from the top of the soup (if desired).
Toast the baguette slices: While the soup is simmering, turn on your oven broiler. Arrange the baguette slices on a baking sheet. Brush both sides with olive oil. Broil for 2 to 2 ½ minutes on each side or until golden brown (watch carefully so that they do not burn).
When ready to serve, place oven-safe bowls onto a rimmed baking sheet. Ladle soup into the bowls ⅔ to ¾ full. Top each bowl with 2 bread slices and evenly sprinkle with the gruyere and parmesan cheese.
Broil until cheese is melted, bubbly, and a light golden brown (approximately 3 to 4 minutes). Garnish with fresh thyme when serving, if desired.