Module 7: Production Patterns
Cost Optimization
Budget Tracking
class BudgetTracker:
"""Track daily spending"""
def __init__(self, daily_budget=100):
self.daily_budget = daily_budget
self.spent_today = 0
self.date = datetime.now().date()
def add_cost(self, cost):
"""Add a cost"""
# Reset if it's a new day
if datetime.now().date() > self.date:
self.spent_today = 0
self.date = datetime.now().date()
self.spent_today += cost
# Alert if it's exceeded
if self.spent_today > self.daily_budget:
send_alert(f"Budget exceeded: ${self.spent_today:.2f}")
def can_spend(self, estimated_cost):
"""Check whether it can spend"""
return (self.spent_today + estimated_cost) <= self.daily_budget
# Usage
budget = BudgetTracker(daily_budget=100)
if budget.can_spend(estimated_cost):
embedding = get_embedding(text)
budget.add_cost(actual_cost)
else:
# Fallback to a local model
embedding = local_model.encode(text)
Cost-Aware Caching
# Cache EVERYTHING (80% savings typical)
cache_hit_rate = 0.80
# Monthly cost:
# Without cache: $1000
# With cache: $200 (80% cache hit)
# Redis ROI: $800/month savings vs $20/month Redis cost
Model Selection
def get_embedding_cost_aware(text, priority='low'):
"""Select the model based on priority"""
if priority == 'high':
# OpenAI 3-large (better but expensive)
return get_embedding_openai_large(text)
elif priority == 'medium':
# OpenAI 3-small (balanced)
return get_embedding_openai_small(text)
else: # low
# Local SBERT (free)
return get_embedding_sbert(text)
Summary
- ✅ Budget tracking: Daily limits
- ✅ Caching: 80% cost reduction
- ✅ Model selection: Cost-aware routing
- ✅ Monitoring: Real-time cost alerts
Module 7 - Capsule 06