feature flag
**Feature Flags for ML Systems**
**What are Feature Flags?**
Toggles that enable/disable features at runtime without deploying new code, essential for ML experimentation and gradual rollouts.
**Use Cases for ML**
| Use Case | Example |
|----------|---------|
| Model A/B testing | Toggle between model versions |
| Gradual rollout | Enable new model for 10% users |
| Kill switch | Disable failing model instantly |
| Experimentation | Test new prompts or parameters |
**Implementation**
**Simple Feature Flags**
```python
import json
class FeatureFlags:
def __init__(self, config_path):
with open(config_path) as f:
self.flags = json.load(f)
def is_enabled(self, flag_name, user_id=None, default=False):
flag = self.flags.get(flag_name)
if not flag:
return default
if flag.get("enabled_for_all"):
return True
if user_id and flag.get("enabled_users"):
return user_id in flag["enabled_users"]
if flag.get("percentage"):
return hash(user_id) % 100 < flag["percentage"]
return flag.get("enabled", default)
```
**LaunchDarkly/Unleash Style**
```python
from unleash_client import UnleashClient
client = UnleashClient(url="https://unleash.example.com")
client.initialize_client()
def get_model(user_context):
if client.is_enabled("use_gpt4", context=user_context):
return "gpt-4"
return "gpt-3.5-turbo"
```
**ML Experimentation**
```python
class MLExperiment:
def __init__(self, flags):
self.flags = flags
def get_model_config(self, user_id):
return {
"model": "gpt-4" if self.flags.is_enabled("gpt4", user_id) else "gpt-3.5",
"temperature": 0.7 if self.flags.is_enabled("high_temp", user_id) else 0.3,
"prompt_version": self.flags.get_variant("prompt", user_id, default="v1"),
}
```
**Feature Flag Platforms**
| Platform | Features |
|----------|----------|
| LaunchDarkly | Enterprise, ML experiments |
| Unleash | Open source |
| Split | Analytics integration |
| GrowthBook | A/B testing focus |
| ConfigCat | Simple, affordable |
**Best Practices**
- Use flags for all model changes
- Time-limit experiments
- Clean up old flags
- Log flag evaluations for analysis
- Use consistent hashing for user assignment