In a large pot or Dutch oven, melt butter and olive oil over medium heat. Add onions and cook until softened and caramelized, about 20-25 minutes. Season with salt and pepper.
Deglaze the pot with red wine vinegar, scraping up any browned bits from the bottom. Cook for 2-3 minutes.
Add vegetable broth, thyme, and bay leaf. Bring to a boil, then reduce heat and simmer for 15-20 minutes.
Preheat broiler. Place bread slices on a baking sheet and broil for 1-2 minutes per side, or until lightly toasted.
Ladle soup into oven-safe bowls. Top each bowl with a slice of toasted bread and sprinkle with gruyere cheese.
Broil for 2-3 minutes, or until cheese is melted and bubbly. Serve immediately.