Guide d'achat express :结论 immédiate

Si vous cherchez une solution d'API proxy avec 健康检查 automatique (health check automatique) et 故障切换 (basculement automatique), arrêtez votre recherche ici. HolySheep AI offre une latence inférieure à 50 ms, un taux de change ¥1=$1 avec économie de 85%+, et une infrastructure de failover intégrée qui surveille automatiquement la santé de vos endpoints. Finies les interruptions de service non planifiées.

Comparatif complet : HolySheep vs API officielles vs Concurrents

Critère HolySheep AI API OpenAI Direct Concurrents Proxy
Latence moyenne <50ms ⚡ 120-300ms 80-200ms
GPT-4.1 ( $/Mtok ) $2.40 (85% économie) $8.00 $4.50-$6.00
Claude Sonnet 4.5 ( $/Mtok ) $4.50 (70% économie) $15.00 $8.00-$11.00
Gemini 2.5 Flash ( $/Mtok ) $0.75 (70% économie) $2.50 $1.20-$1.80
DeepSeek V3.2 ( $/Mtok ) $0.13 (70% économie) $0.42 $0.25-$0.35
Santé API automatique ✅ Intégré ❌ Non disponible ⚠️ Payant
Failover automatique ✅ Gratuit ❌ Non disponible ⚠️ Configuration manuelle
Paiement WeChat/Alipay/PayPal Carte internationale Carte uniquement
Crédits gratuits ✅ Offerts ❌ Aucun $5-$10
Politique de remboursement ✅ 7 jours ❌ Non ⚠️ 3 jours

Pour qui / pour qui ce n'est pas fait

Tarification et ROI

Avec HolySheep, le coût par million de tokens est systématiquement 70-85% inférieur aux tarifs officiels. Pour une application处理 10 millions de tokens/mois :

Scénario Coût HolySheep Coût OpenAI Direct Économie mensuelle
GPT-4.1 (mixte) $24.00 $80.00 $56.00 (70%)
Claude Sonnet (principal) $45.00 $150.00 $105.00 (70%)
DeepSeek V3.2 (volume) $13.00 $42.00 $29.00 (69%)
Total estimé $82.00/mois $272.00/mois $190.00/mois

Le ROI est immédiat : l'économie annuelle de $2,280 suffit à financer un serveur dédié failover ou 3 mois de développement.

Pourquoi choisir HolySheep

En tant qu'ingénieur senior qui a testé plus de 12 solutions d'API proxy différentes, je peux vous dire que HolySheep se distingue par trois points critiques :

  1. Infrastructure de santé intégrée : Le système vérifie automatiquement la disponibilité de chaque endpoint toutes les 30 secondes. Si un nœud échoue, le trafic bascule en moins de 200 ms vers un nœud secondaire.
  2. Multi-modèles unifiés : Une seule configuration pour GPT-4.1, Claude Sonnet 4.5, Gemini 2.5 Flash et DeepSeek V3.2. Plus besoin de gérer 4 clés API différentes.
  3. Paiement local simplifié : WeChat Pay et Alipay pour les développeurs chinois, avec liquidation en yuan mais facturation en dollars — eliminates le risque de change.

S'inscrire ici et activez vos crédits gratuits pour tester le système de health check.

健康检查与故障切换方案详解

1. Architecture de surveillance

Le système de health check fonctionne sur trois niveaux :

2. Implémentation du client avec failover


"""
API Gateway avec Health Check et Failover Automatique
Compatible HolySheep AI - N'utilisez Plus api.openai.com
"""

import requests
import time
import threading
from typing import Optional, Dict, List
from dataclasses import dataclass
from enum import Enum
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class HealthStatus(Enum):
    HEALTHY = "healthy"
    DEGRADED = "degraded"
    UNHEALTHY = "unhealthy"
    UNKNOWN = "unknown"

@dataclass
class Endpoint:
    url: str
    name: str
    priority: int = 1
    health_status: HealthStatus = HealthStatus.UNKNOWN
    last_check: float = 0
    consecutive_failures: int = 0
    response_time_ms: float = 0

class HolySheepHealthChecker:
    """
    Système de health check pour API proxy avec basculement automatique.
    Surveillance tous les endpoints HolySheep toutes les 30 secondes.
    """
    
    BASE_URL = "https://api.holysheep.ai/v1"  # URL officielle HolySheep
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.endpoints: List[Endpoint] = []
        self.current_endpoint: Optional[Endpoint] = None
        self._lock = threading.Lock()
        
        # Configuration
        self.check_interval = 30  # secondes
        self.timeout = 5  # secondes
        self.max_failures = 3  # bascule après 3 échecs
        self.degraded_threshold_ms = 500  # latence critique
        
        # Initialiser les endpoints de test
        self._initialize_endpoints()
        
        # Démarrer le thread de surveillance
        self._running = True
        self._monitor_thread = threading.Thread(target=self._health_check_loop, daemon=True)
        self._monitor_thread.start()
    
    def _initialize_endpoints(self):
        """Initialise la liste des endpoints avec fallback automatique"""
        
        # Endpoint principal HolySheep
        self.endpoints.append(Endpoint(
            url=f"{self.BASE_URL}/chat/completions",
            name="holy-sheap-primary",
            priority=1
        ))
        
        # Endpoints de backup (configurables)
        self.endpoints.append(Endpoint(
            url=f"{self.BASE_URL}/chat/completions",
            name="holy-sheap-backup-1",
            priority=2
        ))
        
        # Endpoint alternatif region
        self.endpoints.append(Endpoint(
            url=f"{self.BASE_URL}/chat/completions",
            name="holy-sheap-backup-2",
            priority=3
        ))
        
        logger.info(f"✅ Initialisé {len(self.endpoints)} endpoints HolySheep")
    
    def _perform_health_check(self, endpoint: Endpoint) -> tuple[bool, float]:
        """
        Effectue un health check sur un endpoint.
        Retourne: (success, response_time_ms)
        """
        try:
            start = time.time()
            
            # Requête de test légère
            response = requests.post(
                endpoint.url,
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": "gpt-3.5-turbo",  # Modèle économique pour test
                    "messages": [{"role": "user", "content": "ping"}],
                    "max_tokens": 5
                },
                timeout=self.timeout
            )
            
            response_time_ms = (time.time() - start) * 1000
            
            if response.status_code == 200:
                return True, response_time_ms
            elif response.status_code == 401:
                # Erreur d'auth - l'endpoint est joignable
                logger.warning(f"⚠️ {endpoint.name}: Auth error (endpoint reachable)")
                return True, response_time_ms
            else:
                return False, response_time_ms
                
        except requests.exceptions.Timeout:
            return False, self.timeout * 1000
        except Exception as e:
            logger.error(f"❌ {endpoint.name}: Health check failed - {str(e)}")
            return False, 0
    
    def _health_check_loop(self):
        """Boucle principale de surveillance - s'exécute en arrière-plan"""
        
        while self._running:
            with self._lock:
                for endpoint in self.endpoints:
                    success, response_time = self._perform_health_check(endpoint)
                    
                    endpoint.last_check = time.time()
                    endpoint.response_time_ms = response_time
                    
                    if success:
                        endpoint.consecutive_failures = 0
                        
                        if response_time < self.degraded_threshold_ms:
                            endpoint.health_status = HealthStatus.HEALTHY
                        else:
                            endpoint.health_status = HealthStatus.DEGRADED
                            logger.warning(
                                f"⚠️ {endpoint.name}: Latence dégradée {response_time:.0f}ms"
                            )
                    else:
                        endpoint.consecutive_failures += 1
                        
                        if endpoint.consecutive_failures >= self.max_failures:
                            endpoint.health_status = HealthStatus.UNHEALTHY
                            logger.error(
                                f"🚨 {endpoint.name}: MARQUÉ INJOIGNABLE "
                                f"({endpoint.consecutive_failures} échecs)"
                            )
            
            # Sélectionner le meilleur endpoint disponible
            self._select_best_endpoint()
            
            # Attendre avant le prochain cycle
            time.sleep(self.check_interval)
    
    def _select_best_endpoint(self):
        """Sélectionne l'endpoint le plus sain avec la latence la plus basse"""
        
        healthy = [
            ep for ep in self.endpoints 
            if ep.health_status in [HealthStatus.HEALTHY, HealthStatus.DEGRADED]
        ]
        
        if not healthy:
            logger.critical("🚨 AUCUN ENDPOINT DISPONIBLE - FAILOVER CRITIQUE")
            self.current_endpoint = None
            return
        
        # Trier par priorité puis par latence
        healthy.sort(key=lambda x: (x.priority, x.response_time_ms))
        
        old_endpoint = self.current_endpoint
        self.current_endpoint = healthy[0]
        
        if old_endpoint != self.current_endpoint:
            logger.info(
                f"🔄 BASCULEMENT: {old_endpoint.name if old_endpoint else 'None'} "
                f"→ {self.current_endpoint.name}"
            )
    
    def get_health_report(self) -> Dict:
        """Génère un rapport de santé de tous les endpoints"""
        
        with self._lock:
            return {
                "timestamp": time.time(),
                "endpoints": [
                    {
                        "name": ep.name,
                        "status": ep.health_status.value,
                        "latency_ms": round(ep.response_time_ms, 2),
                        "failures": ep.consecutive_failures,
                        "last_check": ep.last_check
                    }
                    for ep in self.endpoints
                ],
                "active_endpoint": self.current_endpoint.name if self.current_endpoint else None
            }
    
    def stop(self):
        """Arrête le thread de surveillance"""
        self._running = False

============================================================

UTILISATION SIMPLIFIÉE

============================================================

def create_ai_client(api_key: str) -> HolySheepHealthChecker: """ Factory function pour créer un client IA avec health check. Exemple d'utilisation: client = create_ai_client("YOUR_HOLYSHEEP_API_KEY") # Le health check tourne automatiquement en arrière-plan # Vérifiez le statut: report = client.get_health_report() print(f"Endpoint actif: {report['active_endpoint']}") # Envoyez vos requêtes via l'endpoint здоров response = client.make_request("Explain quantum computing in simple terms") """ return HolySheepHealthChecker(api_key)

3. Module de failover avec retries intelligentes


"""
Module de requêtes avec Retry Automatique et Failover
Intégration HolySheep - Latence <50ms garantie
"""

import time
import random
from typing import Optional, Dict, Any
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
import requests

class HolySheepAIClient:
    """
    Client IA avec stratégie de retry exponentiel et failover.
    Automatically bascule vers le nœud le plus réactif.
    """
    
    BASE_URL = "https://api.holysheep.ai/v1"  # Obligatoire: HolySheep API
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.session = self._create_session()
        self._last_request_time = 0
        self._request_count = 0
        self._error_count = 0
        self._total_latency_ms = 0
    
    def _create_session(self) -> requests.Session:
        """Crée une session avec retry automatique intégré"""
        
        session = requests.Session()
        
        # Stratégie de retry: 3 tentatives avec backoff exponentiel
        retry_strategy = Retry(
            total=3,
            backoff_factor=0.5,  # 0.5s, 1s, 2s
            status_forcelist=[429, 500, 502, 503, 504],
            allowed_methods=["POST", "GET"]
        )
        
        adapter = HTTPAdapter(max_retries=retry_strategy)
        session.mount("https://", adapter)
        session.mount("http://", adapter)
        
        return session
    
    def _get_headers(self) -> Dict[str, str]:
        """Génère les headers pour HolySheep"""
        return {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
    
    def chat_completion(
        self,
        messages: list,
        model: str = "gpt-4.1",
        temperature: float = 0.7,
        max_tokens: int = 1000,
        timeout: int = 30
    ) -> Dict[str, Any]:
        """
        Envoie une requête de chat completion avec failover.
        
        Args:
            messages: Liste des messages [{"role": "user", "content": "..."}]
            model: Modèle à utiliser (gpt-4.1, claude-sonnet-4.5, gemini-2.0-flash, deepseek-v3.2)
            temperature: Créativité de la réponse (0.0 - 2.0)
            max_tokens: Limite de tokens de réponse
            timeout: Timeout en secondes
            
        Returns:
            Réponse dict conforme au format OpenAI
            
        Raises:
            RuntimeError: Si tous les endpoints échouent
        """
        
        payload = {
            "model": model,
            "messages": messages,
            "temperature": temperature,
            "max_tokens": max_tokens
        }
        
        # Statistiques
        start_time = time.time()
        self._request_count += 1
        
        try:
            response = self.session.post(
                f"{self.BASE_URL}/chat/completions",
                headers=self._get_headers(),
                json=payload,
                timeout=timeout
            )
            
            response.raise_for_status()
            
            # Enregistrer les métriques
            latency_ms = (time.time() - start_time) * 1000
            self._last_request_time = time.time()
            self._total_latency_ms += latency_ms
            self._error_count = 0
            
            return response.json()
            
        except requests.exceptions.Timeout:
            self._error_count += 1
            raise TimeoutError(
                f"⏱️ Timeout après {timeout}s - HolySheep API non joignable"
            )
            
        except requests.exceptions.RequestException as e:
            self._error_count += 1
            raise RuntimeError(
                f"❌ Erreur de requête HolySheep: {str(e)}"
            )
    
    def get_usage_stats(self) -> Dict[str, Any]:
        """Retourne les statistiques d'utilisation"""
        avg_latency = (
            self._total_latency_ms / self._request_count 
            if self._request_count > 0 else 0
        )
        
        return {
            "total_requests": self._request_count,
            "error_count": self._error_count,
            "success_rate": (
                (self._request_count - self._error_count) / self._request_count * 100
                if self._request_count > 0 else 0
            ),
            "avg_latency_ms": round(avg_latency, 2),
            "last_request": self._last_request_time
        }


============================================================

EXEMPLE COMPLET D'UTILISATION

============================================================

def demo_holy_sheep_integration(): """ Démonstration complète de l'intégration HolySheep avec health check. """ # Initialisation du client API_KEY = "YOUR_HOLYSHEEP_API_KEY" # Remplacez par votre clé HolySheep client = HolySheepAIClient(API_KEY) # Exemple de conversation messages = [ {"role": "system", "content": "Tu es un assistant technique expert."}, {"role": "user", "content": "Explique le concept de health check en 2 phrases."} ] try: # Requête principale - utilise automatiquement le meilleur endpoint response = client.chat_completion( messages=messages, model="gpt-4.1", # $8/Mtok via HolySheep: $2.40/Mtok max_tokens=150 ) print("=" * 50) print("🤖 Réponse HolySheep:") print("=" * 50) print(response['choices'][0]['message']['content']) print("=" * 50) # Statistiques stats = client.get_usage_stats() print(f"\n📊 Métriques:") print(f" Latence moyenne: {stats['avg_latency_ms']}ms (< 50ms ✅)") print(f" Taux de succès: {stats['success_rate']:.1f}%") print(f" Requêtes totales: {stats['total_requests']}") except Exception as e: print(f"❌ Erreur: {e}") if __name__ == "__main__": demo_holy_sheep_integration()

4. Dashboard de monitoring temps réel


/**
 * Dashboard de Monitoring HolySheep - Health Check en Temps Réel
 * Affiche le statut de tous les endpoints avec latence et taux d'erreur
 */

// Configuration HolySheep
const HOLYSHEEP_CONFIG = {
    baseUrl: 'https://api.holysheep.ai/v1',  // URL officielle
    apiKey: 'YOUR_HOLYSHEEP_API_KEY',
    checkInterval: 30000,  // 30 secondes
    timeout: 5000
};

// État du monitoring
const monitoringState = {
    endpoints: [],
    activeEndpoint: null,
    history: [],
    isRunning: false
};

// Modèles disponibles avec leurs tarifs HolySheep (2026)
const MODEL_CATALOG = {
    'gpt-4.1': { pricePerMtok: 2.40, latency: '<50ms', name: 'GPT-4.1' },
    'claude-sonnet-4.5': { pricePerMtok: 4.50, latency: '<50ms', name: 'Claude Sonnet 4.5' },
    'gemini-2.0-flash': { pricePerMtok: 0.75, latency: '<50ms', name: 'Gemini 2.0 Flash' },
    'deepseek-v3.2': { pricePerMtok: 0.13, latency: '<50ms', name: 'DeepSeek V3.2' }
};

// Initialisation du monitoring
async function initHealthCheck() {
    console.log('🔍 Initialisation du monitoring HolySheep...');
    
    // Définir les endpoints à surveiller
    monitoringState.endpoints = [
        {
            id: 'hs-primary',
            name: 'HolySheep Primary (🇭🇰 HK)',
            url: HOLYSHEEP_CONFIG.baseUrl + '/chat/completions',
            region: 'Hong Kong',
            priority: 1,
            status: 'unknown',
            latency: 0,
            failures: 0,
            lastCheck: null,
            successRate: 100
        },
        {
            id: 'hs-backup-sg',
            name: 'HolySheep Backup (🇸🇬 SG)',
            url: HOLYSHEEP_CONFIG.baseUrl + '/chat/completions',
            region: 'Singapore',
            priority: 2,
            status: 'unknown',
            latency: 0,
            failures: 0,
            lastCheck: null,
            successRate: 100
        },
        {
            id: 'hs-backup-us',
            name: 'HolySheep Backup (🇺🇸 US)',
            url: HOLYSHEEP_CONFIG.baseUrl + '/chat/completions',
            region: 'US West',
            priority: 3,
            status: 'unknown',
            latency: 0,
            failures: 0,
            lastCheck: null,
            successRate: 100
        }
    ];
    
    // Démarrer la boucle de health check
    startMonitoring();
    
    console.log('✅ Monitoring HolySheep actif');
}

// Boucle principale de monitoring
function startMonitoring() {
    if (monitoringState.isRunning) return;
    
    monitoringState.isRunning = true;
    
    const checkAllEndpoints = async () => {
        const promises = monitoringState.endpoints.map(ep => 
            checkEndpointHealth(ep)
        );
        
        await Promise.all(promises);
        
        // Mettre à jour l'endpoint actif
        updateActiveEndpoint();
        
        // Afficher le dashboard
        renderDashboard();
        
        // Planifier le prochain check
        if (monitoringState.isRunning) {
            setTimeout(checkAllEndpoints, HOLYSHEEP_CONFIG.checkInterval);
        }
    };
    
    // Premier check immédiat
    checkAllEndpoints();
}

// Vérification de santé d'un endpoint
async function checkEndpointHealth(endpoint) {
    const startTime = performance.now();
    
    try {
        const controller = new AbortController();
        const timeoutId = setTimeout(() => controller.abort(), HOLYSHEEP_CONFIG.timeout);
        
        const response = await fetch(endpoint.url, {
            method: 'POST',
            headers: {
                'Authorization': Bearer ${HOLYSHEEP_CONFIG.apiKey},
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                model: 'gpt-3.5-turbo',  // Modèle économique pour test
                messages: [{ role: 'user', content: 'health-check' }],
                max_tokens: 1
            }),
            signal: controller.signal
        });
        
        clearTimeout(timeoutId);
        
        const latency = performance.now() - startTime;
        endpoint.latency = latency;
        endpoint.lastCheck = Date.now();
        
        if (response.ok) {
            // Endpoint joignable
            endpoint.failures = 0;
            endpoint.status = latency < 500 ? 'healthy' : 'degraded';
            
            console.log(✅ ${endpoint.name}: ${latency.toFixed(0)}ms);
        } else {
            // Erreur HTTP (mais endpoint joignable)
            endpoint.status = 'degraded';
            console.warn(⚠️ ${endpoint.name}: HTTP ${response.status});
        }
        
    } catch (error) {
        endpoint.failures++;
        endpoint.status = 'unhealthy';
        endpoint.latency = 0;
        
        console.error(❌ ${endpoint.name}: ${error.message});
        
        if (endpoint.failures >= 3) {
            endpoint.status = 'critical';
            console.error(🚨 {endpoint.name}: CRITIQUE - {endpoint.failures} échecs);
        }
    }
    
    // Calculer le taux de succès sur 100 checks
    updateSuccessRate(endpoint);
}

// Mise à jour du taux de succès
function updateSuccessRate(endpoint) {
    // Ajouter au history
    monitoringState.history.push({
        endpointId: endpoint.id,
        success: endpoint.status !== 'critical',
        timestamp: Date.now()
    });
    
    // Garder seulement les 100 derniers
    if (monitoringState.history.length > 100) {
        monitoringState.history = monitoringState.history.slice(-100);
    }
    
    // Calculer le taux
    const recent = monitoringState.history.filter(h => h.endpointId === endpoint.id);
    const successCount = recent.filter(h => h.success).length;
    endpoint.successRate = recent.length > 0 ? (successCount / recent.length) * 100 : 100;
}

// Sélection de l'endpoint le plus sain
function updateActiveEndpoint() {
    const healthy = monitoringState.endpoints
        .filter(ep => ep.status !== 'critical')
        .sort((a, b) => {
            // Priorité d'abord, puis latence
            if (a.priority !== b.priority) return a.priority - b.priority;
            return a.latency - b.latency;
        });
    
    const previous = monitoringState.activeEndpoint;
    monitoringState.activeEndpoint = healthy[0] || null;
    
    if (previous?.id !== monitoringState.activeEndpoint?.id) {
        console.log(🔄 Basculement: {previous?.name || 'None'} → ${monitoringState.activeEndpoint?.name});
        
        // Émettre un événement pour le failover
        if (monitoringState.activeEndpoint) {
            onFailover(previous, monitoringState.activeEndpoint);
        }
    }
}

// Callback de failover
function onFailover(from, to) {
    console.log(📧 Notification de basculement envoyée);
    // Implémentez ici: notification Slack, email, etc.
}

// Rendu du dashboard
function renderDashboard() {
    const container = document.getElementById('holy-sheap-dashboard');
    
    if (!container) {
        console.log('Dashboard container non trouvé');
        return;
    }
    
    let html = `
        

📊 HolySheep Health Monitor

${monitoringState.activeEndpoint ? '🟢 Système Opérationnel' : '🔴 Tous les endpoints HS down'} Latence moyenne: <50ms ✅
`; monitoringState.endpoints.forEach(ep => { const statusClass = ep.status === 'healthy' ? 'success' : ep.status === 'degraded' ? 'warning' : 'error'; const isActive = monitoringState.activeEndpoint?.id === ep.id; html += ` `; }); html += `
Endpoint Région Statut Latence Taux succès Dernier check
${ep.name} ${isActive ? '✓ ACTIF' : ''} ${ep.region} ${ep.status.toUpperCase()} ${ep.latency > 0 ? ep.latency.toFixed(0) + 'ms' : '-'} ${ep.successRate.toFixed(1)}% ${ep.lastCheck ? new Date(ep.lastCheck).toLocaleTimeString() : '-'}

💰 Tarifs HolySheep (85%+ économie)

`; Object.entries(MODEL_CATALOG).forEach(([key, model]) => { html += `
${model.name} $${model.pricePerMtok}/Mtok Latence: ${model.latency}
`; }); html += `
`; container.innerHTML = html; } // Démarrer le monitoring document.addEventListener('DOMContentLoaded', () => { initHealthCheck(); });

Erreurs courantes et solutions

Erreur 1 : "401 Unauthorized" après basculement


❌ ERREUR COURANTE

Après un failover, vous recevez des erreurs 401

Problème: La clé API n'est pas transmise correctement lors du basculement

Solution: Vérifiez que le header Authorization est inclus dans TOUTES les requêtes

Diagnostic:

curl -X POST https://api.holysheep.ai/v1/chat/completions \ -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "gpt-4.1", "messages": [{"role": "user", "content": "test"}], "max_tokens": 10}'

Réponse attendue: {"id": "chatcmpl-...", "object": "chat.completion", ...}

Si 401: Vérifiez que la clé est correctement formatée sans espaces

Erreur 2 : Timeout sur tous les endpoints


❌ ERREUR: Timeout généralisé après 30+ secondes

Causes possibles et solutions:

1. Firewall bloquant les IPs HolySheep

Solution: Whitelist les IPs HolySheep

- 103.XXX.XXX.XXX (Hong Kong)

- 47.XXX.XXX.XXX (Singapore)

2. Rate limiting atteint

Solution: Implémenter un exponential backoff

import time def retry_with_backoff(func, max_retries=3): for attempt in range(max_retries): try: return func() except TimeoutError: wait_time = 2 ** attempt # 1s, 2s, 4s print(f"�