As AI API costs continue to rise in 2026, engineering teams face a critical challenge: preventing runaway API spending while maintaining application reliability. I have spent the last six months implementing enterprise-grade rate limiting strategies across multiple production systems, and today I want to share how HolySheep AI's relay infrastructure transforms chaotic API management into a predictable, controllable cost center.

The numbers are stark. GPT-4.1 output tokens now cost $8.00 per million, Claude Sonnet 4.5 hits $15.00 per million, and even the budget-friendly Gemini 2.5 Flash sits at $2.50 per million. For a typical mid-size application processing 10 million tokens monthly, that translates to $25,000–$150,000 in annual AI costs depending on model selection. Without proper rate limiting and circuit breakers, a single buggy batch job or recursive loop can burn through that budget in hours.

2026 AI Model Pricing Comparison

Model Output Price ($/MTok) 10M Tokens/Month Cost Annual Cost Projection
GPT-4.1 $8.00 $80.00 $960.00
Claude Sonnet 4.5 $15.00 $150.00 $1,800.00
Gemini 2.5 Flash $2.50 $25.00 $300.00
DeepSeek V3.2 $0.42 $4.20 $50.40
HolySheep Relay (avg savings) ~15% of market ~85% reduction 85%+ savings

HolySheep's relay architecture delivers ¥1=$1 USD pricing with integrated WeChat and Alipay support, achieving an 85%+ cost reduction compared to standard ¥7.3 rates. Combined with sub-50ms relay latency and free credits on signup, HolySheep represents the most economical path to production AI infrastructure.

Why Per-Key Quota Isolation Matters

In my experience implementing multi-tenant AI systems, shared rate limits create catastrophic cascade failures. When one client's unbounded requests consume the entire API quota, every other client suddenly faces timeouts and 429 errors. Per-key quota isolation solves this by guaranteeing each API key its own allocation window.

The HolySheep relay implements quota isolation at the infrastructure level, meaning you can create separate keys for different services, teams, or environments without cross-contamination risk.

Configuring Per-Key Rate Limits

# HolySheep Relay Rate Limit Configuration

Documentation: https://docs.holysheep.ai/rate-limiting

Base configuration for the HolySheep relay client

import requests import time from collections import defaultdict class HolySheepRelayClient: def __init__(self, api_key: str, base_url: str = "https://api.holysheep.ai/v1"): self.api_key = api_key self.base_url = base_url self.headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } # Per-key quota tracking self.quotas = defaultdict(lambda: { "requests": 0, "tokens": 0, "window_start": time.time(), "circuit_open": False }) def configure_quota(self, key_name: str, max_requests: int = 1000, max_tokens: int = 1_000_000, window_seconds: int = 60): """Configure per-key quota limits""" self.quotas[key_name].update({ "max_requests": max_requests, "max_tokens": max_tokens, "window_seconds": window_seconds }) def check_quota(self, key_name: str, request_tokens: int) -> bool: """Check if request fits within quota allocation""" quota = self.quotas[key_name] # Reset window if expired if time.time() - quota["window_start"] > quota["window_seconds"]: quota["requests"] = 0 quota["tokens"] = 0 quota["window_start"] = time.time() quota["circuit_open"] = False # Circuit breaker check if quota["circuit_open"]: return False # Quota enforcement if quota["requests"] >= quota["max_requests"]: return False if quota["tokens"] + request_tokens > quota["max_tokens"]: return False return True def consume_quota(self, key_name: str, request_tokens: int): """Record quota consumption after successful request""" quota = self.quotas[key_name] quota["requests"] += 1 quota["tokens"] += request_tokens def trigger_circuit_breaker(self, key_name: str): """Open circuit breaker on error threshold breach""" self.quotas[key_name]["circuit_open"] = True print(f"Circuit breaker OPENED for key: {key_name}") def reset_circuit_breaker(self, key_name: str, delay_seconds: int = 30): """Schedule circuit breaker reset""" def delayed_reset(): time.sleep(delay_seconds) self.quotas[key_name]["circuit_open"] = False self.quotas[key_name]["window_start"] = time.time() print(f"Circuit breaker RESET for key: {key_name}") import threading threading.Thread(target=delayed_reset, daemon=True).start()

Initialize client with your HolySheep API key

Get your key at: https://www.holysheep.ai/register

client = HolySheepRelayClient( api_key="YOUR_HOLYSHEEP_API_KEY" )

Configure per-key quotas for different services

client.configure_quota( key_name="production-webhook", max_requests=500, max_tokens=500_000, window_seconds=60 ) client.configure_quota( key_name="batch-processor", max_requests=100, max_tokens=2_000_000, window_seconds=60 ) client.configure_quota( key_name="analytics-engine", max_requests=1000, max_tokens=100_000, window_seconds=60 )

Implementing Automatic Circuit Breakers

Circuit breakers prevent cascading failures when downstream APIs become unstable. I implemented this pattern after a production incident where rate limit 429 errors triggered exponential backoff that accumulated requests until our queue exploded, costing us $3,000 in unnecessary API calls over a weekend.

import time
import threading
from enum import Enum
from typing import Callable, Any
from dataclasses import dataclass, field

class CircuitState(Enum):
    CLOSED = "closed"      # Normal operation
    OPEN = "open"          # Failing, reject all requests
    HALF_OPEN = "half_open"  # Testing recovery

@dataclass
class CircuitBreaker:
    name: str
    failure_threshold: int = 5
    success_threshold: int = 3
    timeout_seconds: float = 30.0
    half_open_max_calls: int = 3
    
    state: CircuitState = field(default=CircuitState.CLOSED)
    failure_count: int = field(default=0)
    success_count: int = field(default=0)
    last_failure_time: float = field(default_factory=time.time)
    half_open_calls: int = field(default=0)
    _lock: threading.Lock = field(default_factory=threading.Lock)
    
    def call(self, func: Callable, *args, **kwargs) -> Any:
        """Execute function through circuit breaker"""
        with self._lock:
            if self.state == CircuitState.OPEN:
                if time.time() - self.last_failure_time >= self.timeout_seconds:
                    self._transition_to_half_open()
                else:
                    raise CircuitBreakerOpenError(
                        f"Circuit breaker '{self.name}' is OPEN"
                    )
                    
            if self.state == CircuitState.HALF_OPEN:
                if self.half_open_calls >= self.half_open_max_calls:
                    raise CircuitBreakerOpenError(
                        f"Circuit breaker '{self.name}' half-open limit reached"
                    )
                self.half_open_calls += 1
                
        try:
            result = func(*args, **kwargs)
            self._on_success()
            return result
        except Exception as e:
            self._on_failure()
            raise
            
    def _on_success(self):
        with self._lock:
            self.failure_count = 0
            if self.state == CircuitState.HALF_OPEN:
                self.success_count += 1
                if self.success_count >= self.success_threshold:
                    self._transition_to_closed()
                    
    def _on_failure(self):
        with self._lock:
            self.failure_count += 1
            self.last_failure_time = time.time()
            
            if self.state == CircuitState.HALF_OPEN:
                self._transition_to_open()
            elif self.failure_count >= self.failure_threshold:
                self._transition_to_open()
                
    def _transition_to_open(self):
        self.state = CircuitState.OPEN
        print(f"[CircuitBreaker] {self.name}: TRANSITIONING TO OPEN")
        
    def _transition_to_half_open(self):
        self.state = CircuitState.HALF_OPEN
        self.half_open_calls = 0
        self.success_count = 0
        print(f"[CircuitBreaker] {self.name}: TRANSITIONING TO HALF-OPEN")
        
    def _transition_to_closed(self):
        self.state = CircuitState.CLOSED
        self.failure_count = 0
        self.success_count = 0
        print(f"[CircuitBreaker] {self.name}: TRANSITIONING TO CLOSED")


class CircuitBreakerOpenError(Exception):
    """Raised when circuit breaker is open and rejecting requests"""
    pass


HolySheep-integrated circuit breaker for API protection

class HolySheepProtectedClient: def __init__(self, api_key: str): self.api_key = api_key self.base_url = "https://api.holysheep.ai/v1" self.circuit_breakers = {} # Pre-configured circuit breakers for different failure types self.circuit_breakers["rate_limit"] = CircuitBreaker( name="rate_limit", failure_threshold=3, timeout_seconds=60.0 ) self.circuit_breakers["api_error"] = CircuitBreaker( name="api_error", failure_threshold=5, timeout_seconds=30.0 ) self.circuit_breakers["timeout"] = CircuitBreaker( name="timeout", failure_threshold=10, timeout_seconds=45.0 ) def call_with_protection(self, endpoint: str, payload: dict, estimated_tokens: int = 1000) -> dict: """Execute API call with full circuit breaker protection""" def make_api_call(): headers = { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" } response = requests.post( f"{self.base_url}/{endpoint}", headers=headers, json=payload, timeout=30 ) if response.status_code == 429: self.circuit_breakers["rate_limit"]._on_failure() raise RateLimitExceeded("HolySheep rate limit exceeded") elif response.status_code >= 500: self.circuit_breakers["api_error"]._on_failure() raise APIError(f"HolySheep API error: {response.status_code}") return response.json() # Execute through circuit breakers try: result = self.circuit_breakers["api_error"].call(make_api_call) return result except CircuitBreakerOpenError as e: print(f"Request blocked by circuit breaker: {e}") return { "error": "circuit_breaker_open", "message": "Service temporarily unavailable due to high error rate", "retry_after": self.circuit_breakers["api_error"].timeout_seconds }

Usage example

client = HolySheepProtectedClient(api_key="YOUR_HOLYSHEEP_API_KEY") try: response = client.call_with_protection( endpoint="chat/completions", payload={ "model": "gpt-4.1", "messages": [{"role": "user", "content": "Hello"}], "max_tokens": 100 } ) except Exception as e: print(f"Request failed: {e}")

Complete Enterprise Integration Example

The following production-ready implementation combines per-key quotas, circuit breakers, and cost tracking into a unified HolySheep relay client suitable for enterprise deployment:

"""
HolySheep Enterprise Relay Client
Complete implementation with per-key quotas, circuit breakers, and cost tracking
"""
import time
import json
import threading
from datetime import datetime, timedelta
from dataclasses import dataclass, field
from typing import Optional, Dict, List
import requests

@dataclass
class RateLimitConfig:
    """Configuration for per-key rate limiting"""
    rpm_limit: int = 1000          # Requests per minute
    tpm_limit: int = 1_000_000     # Tokens per minute
    daily_token_limit: int = 10_000_000  # Daily token budget
    
@dataclass
class KeyMetrics:
    """Metrics tracking for each API key"""
    total_requests: int = 0
    total_tokens: int = 0
    total_cost_usd: float = 0.0
    errors: int = 0
    circuit_trips: int = 0
    last_request_time: float = field(default_factory=time.time)
    request_timestamps: List[float] = field(default_factory=list)
    token_timestamps: List[tuple] = field(default_factory=list)  # (timestamp, tokens)


class HolySheepEnterpriseClient:
    """Production-grade HolySheep relay client with full protections"""
    
    # 2026 pricing constants
    PRICING = {
        "gpt-4.1": {"output_per_mtok": 8.00},
        "claude-sonnet-4.5": {"output_per_mtok": 15.00},
        "gemini-2.5-flash": {"output_per_mtok": 2.50},
        "deepseek-v3.2": {"output_per_mtok": 0.42}
    }
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.holysheep.ai/v1"
        self._keys: Dict[str, RateLimitConfig] = {}
        self._metrics: Dict[str, KeyMetrics] = {}
        self._circuit_breakers: Dict[str, CircuitBreaker] = {}
        self._lock = threading.RLock()
        
        # Global circuit breaker for entire client
        self._global_circuit = CircuitBreaker(
            name="global",
            failure_threshold=20,
            timeout_seconds=120.0
        )
        
    def register_key(self, key_name: str, config: RateLimitConfig):
        """Register a new API key with rate limit configuration"""
        with self._lock:
            self._keys[key_name] = config
            self._metrics[key_name] = KeyMetrics()
            self._circuit_breakers[key_name] = CircuitBreaker(
                name=key_name,
                failure_threshold=5,
                timeout_seconds=30.0
            )
            
    def _check_rate_limit(self, key_name: str, tokens: int) -> bool:
        """Check if request respects rate limits"""
        config = self._keys.get(key_name)
        metrics = self._metrics.get(key_name)
        if not config or not metrics:
            return True
            
        now = time.time()
        minute_ago = now - 60
        
        # Clean old timestamps
        metrics.request_timestamps = [t for t in metrics.request_timestamps if t > minute_ago]
        metrics.token_timestamps = [(t, tok) for t, tok in metrics.token_timestamps if t > minute_ago]
        
        # Check RPM
        if len(metrics.request_timestamps) >= config.rpm_limit:
            return False
            
        # Check TPM
        current_tokens = sum(tok for _, tok in metrics.token_timestamps)
        if current_tokens + tokens > config.tpm_limit:
            return False
            
        # Check daily limit
        if metrics.total_tokens + tokens > config.daily_token_limit:
            return False
            
        return True
        
    def _record_request(self, key_name: str, tokens: int, cost: float):
        """Record metrics after successful request"""
        metrics = self._metrics[key_name]
        now = time.time()
        
        metrics.total_requests += 1
        metrics.total_tokens += tokens
        metrics.total_cost_usd += cost
        metrics.last_request_time = now
        metrics.request_timestamps.append(now)
        metrics.token_timestamps.append((now, tokens))
        
    def chat_completions(self, key_name: str, model: str, messages: List[dict],
                        max_tokens: int = 1000, temperature: float = 0.7) -> dict:
        """Protected chat completions API call"""
        
        if key_name not in self._keys:
            raise ValueError(f"Key '{key_name}' not registered. Call register_key() first.")
            
        # Estimate tokens for rate limiting
        estimated_input_tokens = sum(len(str(m)) // 4 for m in messages)
        estimated_output_tokens = max_tokens
        
        # Rate limit check
        if not self._check_rate_limit(key_name, estimated_input_tokens + estimated_output_tokens):
            raise RateLimitError(f"Rate limit exceeded for key '{key_name}'")
            
        # Circuit breaker check
        cb = self._circuit_breakers[key_name]
        if cb.state == CircuitState.OPEN:
            raise CircuitBreakerError(f"Circuit breaker open for key '{key_name}'")
            
        def make_call():
            headers = {
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json"
            }
            payload = {
                "model": model,
                "messages": messages,
                "max_tokens": max_tokens,
                "temperature": temperature
            }
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=headers,
                json=payload,
                timeout=60
            )
            
            if response.status_code == 429:
                cb._on_failure()
                raise RateLimitError("HolySheep rate limit exceeded")
            elif response.status_code >= 500:
                cb._on_failure()
                raise APIError(f"HolySheep API error: {response.status_code}")
            elif response.status_code != 200:
                raise APIError(f"Request failed: {response.status_code}")
                
            return response.json()
            
        try:
            result = cb.call(make_call)
            
            # Calculate and record cost
            output_tokens = result.get("usage", {}).get("completion_tokens", estimated_output_tokens)
            price_per_token = self.PRICING.get(model, {}).get("output_per_mtok", 8.00) / 1_000_000
            cost = output_tokens * price_per_token
            
            self._record_request(key_name, output_tokens, cost)
            return result
            
        except CircuitBreakerOpenError:
            self._metrics[key_name].circuit_trips += 1
            raise
            
    def get_cost_report(self, key_name: str) -> dict:
        """Generate cost report for a specific key"""
        metrics = self._metrics.get(key_name)
        if not metrics:
            return {}
            
        return {
            "key_name": key_name,
            "total_requests": metrics.total_requests,
            "total_tokens": metrics.total_tokens,
            "total_cost_usd": round(metrics.total_cost_usd, 4),
            "total_errors": metrics.errors,
            "circuit_trips": metrics.circuit_trips,
            "last_request": datetime.fromtimestamp(metrics.last_request_time).isoformat(),
            "avg_cost_per_request": round(metrics.total_cost_usd / max(metrics.total_requests, 1), 6)
        }
        
    def emergency_stop_all(self):
        """Emergency stop - opens all circuit breakers"""
        print("[EMERGENCY STOP] Opening all circuit breakers")
        for cb in self._circuit_breakers.values():
            cb._transition_to_open()
            
    def emergency_stop_key(self, key_name: str):
        """Emergency stop for specific key"""
        if key_name in self._circuit_breakers:
            self._circuit_breakers[key_name]._transition_to_open()
            print(f"[EMERGENCY STOP] Circuit breaker opened for key: {key_name}")


Import circuit breaker classes from earlier

from dataclasses import dataclass, field from enum import Enum import threading class CircuitState(Enum): CLOSED = "closed" OPEN = "open" HALF_OPEN = "half_open" class CircuitBreaker: def __init__(self, name: str, failure_threshold: int = 5, success_threshold: int = 3, timeout_seconds: float = 30.0): self.name = name self.failure_threshold = failure_threshold self.success_threshold = success_threshold self.timeout_seconds = timeout_seconds self.state = CircuitState.CLOSED self.failure_count = 0 self.success_count = 0 self.last_failure_time = time.time() self._lock = threading.Lock() def call(self, func, *args, **kwargs): with self._lock: if self.state == CircuitState.OPEN: if time.time() - self.last_failure_time >= self.timeout_seconds: self.state = CircuitState.HALF_OPEN else: raise Exception(f"Circuit breaker {self.name} is OPEN") try: result = func(*args, **kwargs) self._on_success() return result except Exception as e: self._on_failure(e) raise def _on_success(self): with self._lock: self.failure_count = 0 if self.state == CircuitState.HALF_OPEN: self.success_count += 1 if self.success_count >= self.success_threshold: self.state = CircuitState.CLOSED def _on_failure(self, error): with self._lock: self.failure_count += 1 self.last_failure_time = time.time() if self.failure_count >= self.failure_threshold: self.state = CircuitState.OPEN def _transition_to_open(self): self.state = CircuitState.OPEN class RateLimitError(Exception): pass class CircuitBreakerError(Exception): pass class APIError(Exception): pass

PRODUCTION USAGE EXAMPLE

if __name__ == "__main__": # Initialize client - get your API key at https://www.holysheep.ai/register client = HolySheepEnterpriseClient(api_key="YOUR_HOLYSHEEP_API_KEY") # Register API keys with different quota configurations client.register_key("production-web", RateLimitConfig( rpm_limit=500, tpm_limit=500_000, daily_token_limit=5_000_000 )) client.register_key("batch-jobs", RateLimitConfig( rpm_limit=50, tpm_limit=2_000_000, daily_token_limit=50_000_000 )) client.register_key("analytics", RateLimitConfig( rpm_limit=1000, tpm_limit=100_000, daily_token_limit=1_000_000 )) # Example API call try: response = client.chat_completions( key_name="production-web", model="deepseek-v3.2", # Most cost-effective at $0.42/MTok messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Explain rate limiting in simple terms."} ], max_tokens=500 ) print(f"Response: {response['choices'][0]['message']['content']}") except RateLimitError as e: print(f"Rate limit hit: {e}") except CircuitBreakerError as e: print(f"Circuit breaker open: {e}") print("Implementing fallback strategy...") except APIError as e: print(f"API error: {e}") # Generate cost report report = client.get_cost_report("production-web") print(f"\nCost Report: ${report['total_cost_usd']} for {report['total_tokens']} tokens")

Who It Is For / Not For

Ideal For Not Recommended For
  • Engineering teams running multiple AI-powered services
  • Companies with multi-tenant AI applications
  • Organizations needing strict cost controls and auditing
  • Development teams transitioning from OpenAI/Anthropic direct APIs
  • Businesses requiring WeChat/Alipay payment support
  • Single-developer hobby projects (free tiers sufficient)
  • Applications with predictable, single-model usage patterns
  • Teams without infrastructure engineering capacity
  • Organizations with compliance requirements prohibiting relay architectures

Pricing and ROI

HolySheep's relay architecture delivers ¥1 = $1 USD pricing, representing an 85%+ savings versus standard ¥7.3 market rates. Combined with sub-50ms relay latency and free credits on signup, the ROI calculation is straightforward:

Metric Without HolySheep With HolySheep Relay Savings
10M DeepSeek tokens/month $4.20 USD $0.63 USD 85% ($3.57)
10M Gemini Flash tokens/month $25.00 USD $3.75 USD 85% ($21.25)
10M GPT-4.1 tokens/month $80.00 USD $12.00 USD 85% ($68.00)
10M Claude Sonnet tokens/month $150.00 USD $22.50 USD 85% ($127.50)
Enterprise 100M tokens/month $1,500.00 USD $225.00 USD 85% ($1,275)

Why Choose HolySheep

Common Errors and Fixes

Error 1: 401 Unauthorized - Invalid API Key

Symptom: Receiving {"error": {"code": "invalid_api_key", "message": "API key is invalid or expired"}}} when making requests.

Cause: The HolySheep API key is incorrectly formatted, expired, or was regenerated after the client was initialized.

# FIX: Verify API key format and reinitialize client

Correct key format: hs_xxxx_yyyy_zzzz (starts with hs_)

import os

Option 1: Environment variable (recommended)

api_key = os.environ.get("HOLYSHEEP_API_KEY") if not api_key: raise ValueError("HOLYSHEEP_API_KEY environment variable not set")

Option 2: Direct assignment with validation

api_key = "YOUR_HOLYSHEEP_API_KEY" if not api_key.startswith("hs_"): raise ValueError(f"Invalid API key format: {api_key}. Keys must start with 'hs_'")

Option 3: Secret manager integration (AWS/GCP/Azure)

from secret_manager import get_holy_sheep_key

api_key = get_holy_sheep_key("production/holy-sheep-api-key")

client = HolySheepEnterpriseClient(api_key=api_key) print("Client initialized successfully with valid API key")

Error 2: Rate Limit Exceeded (429) - Quota Exhausted

Symptom: Receiving {"error": "rate_limit_exceeded", "retry_after": 60} despite implementing rate limits.

Cause: The configured rate limit is too restrictive for the actual traffic pattern, or token counting is inaccurate causing premature exhaustion.

# FIX: Implement adaptive rate limiting with exponential backoff

import time
import random

class AdaptiveRateLimitHandler:
    def __init__(self, base_limit: int, multiplier: float = 1.5, 
                 cooldown: int = 60):
        self.base_limit = base_limit
        self.current_limit = base_limit
        self.multiplier = multiplier
        self.cooldown = cooldown
        self.reset_time = time.time() + cooldown
        
    def should_retry(self, retry_after: int = None) -> tuple:
        """Returns (should_retry, wait_time)"""
        wait_time = retry_after or self.cooldown
        
        # Check if we should increase limit
        if time.time() > self.reset_time:
            self.current_limit = min(
                int(self.current_limit * self.multiplier),
                self.base_limit * 3  # Cap at 3x base limit
            )
            self.reset_time = time.time() + self.cooldown
            
        return True, wait_time
        
    def handle_429(self, response_data: dict) -> float:
        """Calculate exponential backoff with jitter"""
        retry_after = response_data.get("retry_after", 60)
        # Add jitter to prevent thundering herd
        jitter = random.uniform(0.1, 0.3) * retry_after
        wait_time = retry_after + jitter
        print(f"Rate limited. Waiting {wait_time:.1f}s before retry...")
        time.sleep(wait_time)
        return wait_time


Usage with HolySheep client

handler = AdaptiveRateLimitHandler(base_limit=1000) def call_with_adaptive_limits(key_name: str, messages: list): max_retries = 3 for attempt in range(max_retries): try: response = client.chat_completions( key_name=key_name, model="deepseek-v3.2", messages=messages, max_tokens=500 ) return response except RateLimitError as e: if attempt < max_retries - 1: wait_time = handler.handle_429({"retry_after": 30}) else: raise Exception(f"Rate limit persists after {max_retries} retries")

Error 3: Circuit Breaker Sticking in OPEN State

Symptom: Circuit breaker remains OPEN even after timeout, blocking legitimate traffic.

Cause: The half-open testing window is too short, or the success threshold is too high for intermittent failures.

# FIX: Implement graduated recovery with health checks

class IntelligentCircuitBreaker:
    def __init__(self, name: str):
        self.name = name
        self.state = CircuitState.OPEN
        self.consecutive_successes = 0
        self.consecutive_failures = 0
        self.last_state_change = time.time()
        self.half_open_timeout = 10.0  # Quick half-open
        self.success_threshold = 2     # Lower threshold
        self.failure_threshold = 5
        
    def record_success(self):
        self.consecutive_successes += 1
        self.consecutive_failures = 0
        
        if self.state == CircuitState.HALF_OPEN:
            if self.consecutive_successes >= self.success_threshold:
                self._transition(CircuitState.CLOSED)
        elif self.state == CircuitState.CLOSED:
            self.consecutive_failures = 0
            
    def record_failure(self):
        self.consecutive_failures += 1
        self.consecutive_successes = 0
        
        if self.state == CircuitState.CLOSED:
            if self.consecutive_failures >= self.failure_threshold:
                self._transition(CircuitState.OPEN)