In a 10-inch nonstick skillet, heat 1 tablespoon olive oil over medium heat. Add onions and cook until translucent, about 8 minutes. Season with salt and pepper and add the garlic. Sauté about 1 minute until fragrant, then remove from heat.
In a large bowl, beat eggs, then stir in milk, Gruyere, onions and garlic, bacon, and salt and pepper to taste.
In the same skillet over medium-high heat, add remaining 2 tablespoons of olive oil. Add the eggs and cook for about 5 minutes, tilting the pan occasionally, until the sides are set. Reduce heat to low and cover. Cook for 8 minutes more, or until eggs are almost set.
Preheat the broiler. Place the skillet under the broiler for about 2 minutes, until the eggs are set and slightly puffed. Let frittata sit for 5 minutes, garnish with creme fraiche, basil and parsley and serve.