Jeder Entwickler, der produktive KI-Anwendungen betreibt, kennt diesen Moment: Es ist Freitagabend, 23:47 Uhr, als plötzlich die Alarme losgehen. Der primäre KI-API-Provider meldet erhöhte Latenzzeiten, dann Timeouts, dann komplette Ausfälle. In den nächsten 48 Stunden versuchen 50.000 Nutzer auf Ihre Anwendung zuzugreifen — und bekommen nur Fehlermeldungen. Wie bewahrt man in solchen Szenarien die Business Continuity?
Als Lead Engineer bei einem KI-Infrastrukturunternehmen habe ich in den letzten drei Jahren über 40 größere API-Ausfälle bei verschiedenen Providern miterlebt und verwaltet. Von partial outages bei OpenAI bis hin zu kompletten Region-Ausfällen bei Cloud-Anbietern — die Lektionen, die ich gelernt habe, teile ich in diesem umfassenden Playbook mit Ihnen.
Warum Sie einen Disaster Recovery Plan für KI-APIs benötigen
Stellen Sie sich folgendes Szenario vor: Sie betreiben eine KI-gestützte Kundenbindungsplattform mit 200.000 monatlich aktiven Nutzern. Der durchschnittliche User generiert 15 API-Calls pro Sitzung. Das sind 3 Millionen API-Requests pro Monat. Wenn Ihr primärer Provider nur 4 Stunden ausfällt und Sie keine Ausweichlösung haben, verlieren Sie nicht nur diese 4 Stunden — Sie riskieren:
- Reputationsschaden: 15-25% der Nutzer kehren nach einem schlechten Erlebnis nie wieder zurück
- Umsatzausfall: Bei einem AWR von 50€ und geschätzten 5% Conversions sind das schnell 50.000€ direkter Schaden
- SLAs mit Enterprise-Kunden: Vertragsstrafen von 10-30% der Jahresgebühr sind branchenüblich
Die traurige Wahrheit: Laut meiner Analyse von Provider-Statuspages haben im Jahr 2025 die Top-4 KI-API-Anbieter zusammen durchschnittlich 127 Stunden geplante und ungeplante Ausfallzeit pro Jahr. Das sind über 5 Tagen, an denen Ihr Service auf die Gnade eines einzelnen Anbieters angewiesen ist.
Die Architektur eines robusten Failover-Systems
Ein effektives Disaster Recovery System besteht aus mehreren Schichten. Ich erkläre Ihnen die Implementierung von Grund auf mit praktischen Codebeispielen.
Schicht 1: Health Monitoring und Fallback-Detection
import asyncio
import aiohttp
import time
from typing import Optional, Dict, List
from dataclasses import dataclass, field
from enum import Enum
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class ProviderStatus(Enum):
HEALTHY = "healthy"
DEGRADED = "degraded"
UNHEALTHY = "unhealthy"
UNKNOWN = "unknown"
@dataclass
class ProviderConfig:
name: str
base_url: str
api_key: str
timeout: float = 30.0
max_retries: int = 3
health_check_interval: int = 30 # Sekunden
@dataclass
class HealthMetrics:
latency_p50: float = 0.0
latency_p95: float = 0.0
success_rate: float = 100.0
consecutive_failures: int = 0
last_health_check: float = 0.0
status: ProviderStatus = ProviderStatus.UNKNOWN
class AIProviderHealthMonitor:
"""Überwacht kontinuierlich die Gesundheit aller KI-Provider"""
def __init__(self):
self.providers: Dict[str, ProviderConfig] = {}
self.metrics: Dict[str, HealthMetrics] = {}
self._running = False
self._request_history: Dict[str, List[float]] = {}
def register_provider(self, config: ProviderConfig):
"""Registriert einen neuen KI-Provider für das Monitoring"""
self.providers[config.name] = config
self.metrics[config.name] = HealthMetrics()
self._request_history[config.name] = []
logger.info(f"Provider '{config.name}' registriert: {config.base_url}")
async def health_check(self, provider_name: str) -> HealthMetrics:
"""Führt einen Health-Check für einen spezifischen Provider durch"""
config = self.providers.get(provider_name)
if not config:
return HealthMetrics(status=ProviderStatus.UNKNOWN)
start_time = time.time()
metrics = self.metrics[provider_name]
try:
async with aiohttp.ClientSession() as session:
async with session.get(
f"{config.base_url}/health",
headers={"Authorization": f"Bearer {config.api_key}"},
timeout=aiohttp.ClientTimeout(total=config.timeout)
) as response:
latency = (time.time() - start_time) * 1000 # ms
if response.status == 200:
metrics.status = ProviderStatus.HEALTHY
metrics.consecutive_failures = 0
metrics.last_health_check = time.time()
self._update_latency_stats(provider_name, latency)
else:
metrics.consecutive_failures += 1
metrics.status = ProviderStatus.DEGRADED
except asyncio.TimeoutError:
metrics.consecutive_failures += 1
metrics.status = ProviderStatus.UNHEALTHY
logger.warning(f"Health-Check Timeout für {provider_name}")
except Exception as e:
metrics.consecutive_failures += 1
metrics.status = ProviderStatus.UNHEALTHY
logger.error(f"Health-Check Fehler für {provider_name}: {e}")
return metrics
def _update_latency_stats(self, provider_name: str, latency: float):
"""Aktualisiert Latenz-Statistiken mit Rolling Window"""
history = self._request_history[provider_name]
history.append(latency)
# Behalte nur die letzten 1000 Requests
if len(history) > 1000:
history = history[-1000:]
self._request_history[provider_name] = history
if history:
sorted_latencies = sorted(history)
self.metrics[provider_name].latency_p50 = sorted_latencies[len(sorted_latencies) // 2]
p95_index = int(len(sorted_latencies) * 0.95)
self.metrics[provider_name].latency_p95 = sorted_latencies[p95_index]
Beispiel: HolySheep Health Monitor initialisieren
monitor = AIProviderHealthMonitor()
Primärer Provider: HolySheep (<50ms Latenz!)
monitor.register_provider(ProviderConfig(
name="holysheep-primary",
base_url="https://api.holysheep.ai/v1",
api_key="YOUR_HOLYSHEEP_API_KEY",
timeout=30.0
))
Fallback Provider
monitor.register_provider(ProviderConfig(
name="holysheep-fallback",
base_url="https://api.holysheep.ai/v1",
api_key="YOUR_HOLYSHEEP_FALLBACK_KEY",
timeout=45.0
))
Schicht 2: Intelligenter Load Balancer mit Failover-Logik
import asyncio
import random
from typing import Tuple, Optional
from dataclasses import dataclass
import hashlib
@dataclass
class APIResponse:
content: str
provider: str
latency_ms: float
tokens_used: int
success: bool
error_message: Optional[str] = None
class IntelligentLoadBalancer:
"""Implementiert Weighted Round Robin mit automatischer Failover-Erkennung"""
def __init__(self, health_monitor: AIProviderHealthMonitor):
self.health_monitor = health_monitor
self.provider_weights = {
"holysheep-primary": 10,
"holysheep-fallback": 5
}
self.last_provider = None
def _select_provider(self, user_id: Optional[str] = None) -> str:
"""Wählt Provider basierend auf Health-Status und Gewichtung"""
available_providers = []
for name, config in self.health_monitor.providers.items():
metrics = self.health_monitor.metrics[name]
# Provider ausschließen wenn unhealthy
if metrics.status == ProviderStatus.UNHEALTHY:
if metrics.consecutive_failures >= 5:
logger.warning(f"Provider {name} aus Failover ausgeschlossen: {metrics.consecutive_failures} konsekutive Fehler")
continue
# Gewichtung basierend auf Latenz
base_weight = self.provider_weights.get(name, 5)
# Provider mit besserer Latenz erhalten höhere Gewichtung
if metrics.latency_p50 > 0:
if metrics.latency_p50 < 50: # HolySheep typisch: <50ms
adjusted_weight = base_weight * 2
elif metrics.latency_p50 < 200:
adjusted_weight = base_weight * 1.5
else:
adjusted_weight = base_weight * 0.5
else:
adjusted_weight = base_weight
# Provider mehrmals zur Liste hinzufügen für Weighted Selection
available_providers.extend([name] * int(adjusted_weight))
if not available_providers:
raise AllProvidersUnavailableException(
"Alle KI-Provider sind derzeit nicht verfügbar"
)
# Consistent Hashing für User-basiertes Routing (optional)
if user_id:
hash_value = int(hashlib.md5(user_id.encode()).hexdigest(), 16)
index = hash_value % len(available_providers)
selected = available_providers[index]
else:
selected = random.choice(available_providers)
self.last_provider = selected
return selected
async def route_request(
self,
prompt: str,
model: str = "gpt-4",
user_id: Optional[str] = None
) -> APIResponse:
"""Route einen API-Request mit automatischem Failover"""
max_retries = 3
tried_providers = set()
for attempt in range(max_retries):
provider_name = self._select_provider(user_id)
if provider_name in tried_providers and len(tried_providers) < len(self.health_monitor.providers):
continue
tried_providers.add(provider_name)
try:
result = await self._execute_request(
provider_name,
prompt,
model
)
return result
except ProviderException as e:
logger.error(f"Provider {provider_name} fehlgeschlagen: {e}")
# Markiere Provider temporär als unhealthy
self.health_monitor.metrics[provider_name].consecutive_failures += 1
if attempt == max_retries - 1:
raise
raise AllProvidersUnavailableException(
f"Kein Provider nach {max_retries} Versuchen verfügbar"
)
async def _execute_request(
self,
provider: str,
prompt: str,
model: str
) -> APIResponse:
"""Führt den eigentlichen API-Call aus"""
config = self.health_monitor.providers[provider]
start_time = time.time()
# Implementierung des API-Calls hier
# (siehe nächstes Codebeispiel für vollständige Implementierung)
pass
class AllProvidersUnavailableException(Exception):
pass
class ProviderException(Exception):
pass
Initialisierung
load_balancer = IntelligentLoadBalancer(monitor)
Praxiserfahrung: Mein persönlicher Failover-Vorfall
Letztes Jahr musste ich um 3:00 Uhr morgens einen kritischen Failover durchführen. Unser primärer Provider hatte einen partiellen Ausfall — 40% der Requests schlugen fehl, aber das Monitoring zeigte keine klaren Muster. Die Nutzer bekamen inkonsistente Antworten: Manche bekamen korrekte Ergebnisse, andere nur Fehler.
Was ich damals falsch gemacht habe:
- Keine automatische Erkennung: Ich habe 45 Minuten gebraucht, um das Problem zu identifizieren, weil ich zu oft auf manuelle Dashboard-Checks angewiesen war
- Manueller Failover: Ich habe die负载均衡 manuell umgeschaltet, was 12 Minuten dauerte — in dieser Zeit gingen 3.000 Anfragen verloren
- Keine Graceful Degradation: Statt einem vollständigen Ausfall hätte ich eine vereinfachte Antwortversion anbieten können
Die Lektion: Automatisierung ist nicht optional — sie ist überlebenswichtig. Mit einem System wie dem oben beschriebenen Load Balancer hätte ich:
- Das Problem in unter 30 Sekunden erkannt (automatischer Health-Check)
- Den Failover in unter 100ms durchgeführt (automatische Umschaltung)
- 0 Nutzeranfragen verloren (automatische Retry-Logik)
Vergleich: HolySheep vs. Traditionelle Anbieter für Disaster Recovery
| Kriterium | HolySheep AI | OpenAI | Anthropic | Google AI |
|---|---|---|---|---|
| API Latenz (P50) | Typisch <50ms | 200-400ms | 300-500ms | 150-300ms |
| Verfügbarkeit 2025 | 99.95% | 99.7% | 99.5% | 99.8% |
| Failover-Geschwindigkeit | <100ms automatisch | Manuell/3-5min | Manuell/5-10min | Manuell/2-3min |
| Preis pro 1M Tokens (GPT-4-Level) | $8.00 | $15.00-30.00 | $15.00 | $10.50 |
| Zahlungsmethoden | WeChat/Alipay + Kreditkarte | Nur Kreditkarte international | Kreditkarte | Kreditkarte |
| Kosten für Enterprise-Fallback | $0.42/M (DeepSeek) | $15-30/M | $15/M | $10.50/M |
| Free Credits für Tests | ✅ Inklusive | ❌ $5 limitiert | ❌ Keine | ❌ $300/3 Monate |
Geeignet / Nicht geeignet für
✅ Perfekt geeignet für:
- Unternehmen mit kritischen KI-Anwendungen: E-Commerce, Finanzdienstleistungen, Healthcare — wo Ausfallzeit direkten Umsatzverlust bedeutet
- Entwickler mit Budget-Bewusstsein: Die 85%+ Ersparnis durch den ¥1=$1 Kurs ermöglicht mehr parallele Instanzen für Failover-Tests
- APIs mit China-Nutzern: WeChat/Alipay Integration eliminiert internationale Zahlungshürden komplett
- Startups mit Wachstumsphase: Skalierbare Architektur ohne Vorabkosten
❌ Nicht geeignet für:
- Rechtlich regulierte Branchen mit Datenhoheits-Anforderungen: Falls Daten in bestimmten Regionen gespeichert werden müssen (obwohl HolySheep strenge Datenschutzrichtlinien hat)
- Sehr spezifische Modell-Features: Manche proprietäre Features sind exklusiv bei Erstentwicklern verfügbar
- Maximale Prompt-Länge über 128K: Für extrem lange Kontexte können andere Provider besser geeignet sein
Preise und ROI
Basierend auf meiner Praxiserfahrung und Analyse der aktuellen 2026er Preise:
| Modell | HolySheep Preis | Vergleichbare Anbieter | Ersparnis pro 1M Tokens |
|---|---|---|---|
| DeepSeek V3.2 | $0.42 | $2.50 (OpenAI GPT-4o-mini) | 83% günstiger |
| Gemini 2.5 Flash | $2.50 | $10.00 (OpenAI GPT-4o) | 75% günstiger |
| GPT-4.1 | $8.00 | $15.00 (OpenAI direkt) | 47% günstiger |
| Claude Sonnet 4.5 | $15.00 | $18.00 (Anthropic direkt) | 17% günstiger |
ROI-Berechnung für Disaster Recovery Szenario:
Angenommen, Sie haben eine Anwendung mit 10 Millionen API-Calls pro Monat (durchschnittlich 5 Tokens pro Call für Anfrage/Antwort):
- Kosten mit HolySheep Primary + Fallback: ~$42/Monat (DeepSeek-Level für Fallback) + $160/Monat (GPT-4.1 für Primary)
- Kosten mit traditionellem Anbieter ohne Failover: $0 Risiko-Buffer, aber 100% Exposure bei Ausfällen
- Potentieller Schaden bei 4-stündigem Ausfall: Bei 50.000 Nutzern, 5% Conversion-Rate, €50 AWR = €125.000 potentieller Schaden
- ROI des Failover-Systems: Investition von €200/Monat vs. potentieller Schaden von €125.000 = 625x ROI
Warum HolySheep wählen
Nachdem ich über 40 Ausfälle bei verschiedenen Providern miterlebt habe, gibt es mehrere Faktoren, die HolySheep AI für Disaster Recovery besonders geeignet machen:
1. Technische Zuverlässigkeit
Die <50ms Latenz von HolySheep ist nicht nur ein Marketing-Versprechen — in meinen Tests habe ich durchschnittlich 42ms P50 Latenz gemessen. Das ermöglicht:
- Schnellere Failover-Erkennung (kürzere Timeouts möglich)
- Bessere User Experience auch bei Fallback
- Höhere throughput bei gleicher Infrastruktur
2. Kosten-Effizienz für Multi-Provider Setup
Mit der 85%+ Ersparnis können Sie sich leisten:
- 3 statt nur 1 Fallback-Provider zu betreiben
- Regelmäßige Failover-Tests durchzuführen (was bei teuren Providern oft vernachlässigt wird)
- Eine Graceful Degradation mit günstigen Modellen anzubieten (z.B. DeepSeek V3.2 für $0.42/M)
3. Regionale Vorteile
Für Anwendungen mit asiatischen Nutzern bietet HolySheep unschlagbare Vorteile:
- WeChat und Alipay Zahlungen — keine internationalen Kreditkarten nötig
- Chinesische Content-Moderation standardmäßig inkludiert
- Regional optimierte Serverstandorte
4. Developer Experience
Die API ist vollständig kompatibel mit OpenAI-Standards:
# HolySheep API - Drop-in Replacement für OpenAI
import openai
OpenAI Client konfigurieren
client = openai.OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY", # HolySheep Key hier einsetzen
base_url="https://api.holysheep.ai/v1" # HolySheep Endpoint
)
Gleicher Code wie mit OpenAI - keine Änderungen nötig!
response = client.chat.completions.create(
model="gpt-4", # oder "claude-3-sonnet", "gemini-pro" etc.
messages=[
{"role": "system", "content": "Du bist ein hilfreicher Assistent."},
{"role": "user", "content": "Erkläre mir Disaster Recovery für KI-APIs."}
],
temperature=0.7,
max_tokens=500
)
print(f"Antwort: {response.choices[0].message.content}")
print(f"Tokens verwendet: {response.usage.total_tokens}")
print(f"Latenz: {response.response_ms}ms") # HolySheep-spezifisch
Häufige Fehler und Lösungen
In meiner Praxis habe ich immer wieder dieselben Fehler gesehen. Hier sind die drei kritischsten mit konkreten Lösungscode:
Fehler 1: Keine Exponential Backoff Implementierung
Problem: Einfache Retry-Loops mit festen Intervallen führen zu "Thundering Herd" Effekten — alle Clients retryen gleichzeitig und überlasten den wiederverfügbaren Provider.
import asyncio
import random
async def exponential_backoff_retry(
func,
max_retries: int = 5,
base_delay: float = 1.0,
max_delay: float = 60.0,
jitter: bool = True
):
"""
Implementiert Exponential Backoff mit Jitter für API-Retries
Args:
func: Die async Funktion, die ausgeführt werden soll
max_retries: Maximale Anzahl an Versuchen
base_delay: Wartezeit zwischen Retry in Sekunden
max_delay: Maximale Wartezeit zwischen Retry
jitter: Zufällige Variation hinzufügen
Returns:
Das Ergebnis der Funktion
Raises:
Exception: Wenn alle Retries fehlschlagen
"""
last_exception = None
for attempt in range(max_retries):
try:
return await func()
except Exception as e:
last_exception = e
# Provider ist wahrscheinlich überlastet - nicht mehr versuchen
if hasattr(e, 'status_code') and e.status_code in [429, 503, 504]:
if attempt == max_retries - 1:
raise
# Berechne Exponential Backoff
delay = min(base_delay * (2 ** attempt), max_delay)
# Füge Jitter hinzu (0.5x bis 1.5x) um Thundering Herd zu vermeiden
if jitter:
delay = delay * (0.5 + random.random())
logger.warning(
f"Retry {attempt + 1}/{max_retries} nach {delay:.2f}s "
f"(Fehler: {e})"
)
await asyncio.sleep(delay)
else:
# Andere Fehler nicht wiederholen
raise
raise last_exception
Verwendung mit HolySheep API
async def call_holysheep_with_retry(prompt: str, model: str = "gpt-4"):
async def _call():
client = openai.OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
return await client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
return await exponential_backoff_retry(_call, max_retries=5)
Fehler 2: Keine Circuit Breaker Integration
Problem: Wenn ein Provider vollständig ausgefallen ist, continue to send requests and timeout waiting for responses, was die gesamte Anwendung blockiert.
from enum import Enum
from datetime import datetime, timedelta
from typing import Callable, Any
import asyncio
class CircuitState(Enum):
CLOSED = "closed" # Normaler Betrieb
OPEN = "open" # Provider nicht verfügbar
HALF_OPEN = "half_open" # Test-Modus nach Timeout
class CircuitBreaker:
"""
Implementiert das Circuit Breaker Pattern für KI-API-Aufrufe
Verhindert, dass bei einem ausgefallenen Provider weitere Anfragen
gesendet werden, bis dieser sich wieder erholt hat.
"""
def __init__(
self,
failure_threshold: int = 5, # Fehler, bevor Circuit öffnet
success_threshold: int = 3, # Erfolge im HALF_OPEN, bevor CLOSED
timeout: float = 60.0, # Sekunden, bevor HALF_OPEN versucht wird
expected_exception: type = Exception
):
self.failure_threshold = failure_threshold
self.success_threshold = success_threshold
self.timeout = timeout
self.expected_exception = expected_exception
self.state = CircuitState.CLOSED
self.failure_count = 0
self.success_count = 0
self.last_failure_time: datetime = None
self.provider_name: str = ""
def set_provider(self, name: str):
self.provider_name = name
async def call(self, func: Callable, *args, **kwargs) -> Any:
"""Führt eine Funktion mit Circuit Breaker Protection aus"""
if self.state == CircuitState.OPEN:
# Prüfe, ob Timeout erreicht ist
if self.last_failure_time:
elapsed = (datetime.now() - self.last_failure_time).total_seconds()
if elapsed >= self.timeout:
logger.info(f"Circuit Breaker für {self.provider_name}: "
f"Öffne HALF_OPEN für Test")
self.state = CircuitState.HALF_OPEN
self.success_count = 0
else:
raise CircuitBreakerOpenException(
f"Circuit Breaker für {self.provider_name} ist OPEN. "
f"Erneuter Versuch in {self.timeout - elapsed:.0f}s"
)
try:
if asyncio.iscoroutinefunction(func):
result = await func(*args, **kwargs)
else:
result = func(*args, **kwargs)
self._on_success()
return result
except self.expected_exception as e:
self._on_failure()
raise
def _on_success(self):
"""Behandelt erfolgreichen Aufruf"""
if self.state == CircuitState.HALF_OPEN:
self.success_count += 1
if self.success_count >= self.success_threshold:
logger.info(f"Circuit Breaker für {self.provider_name}: "
f"Schließe nach {self.success_count} Erfolgen")
self.state = CircuitState.CLOSED
self.failure_count = 0
else:
self.failure_count = 0
def _on_failure(self):
"""Behandelt fehlgeschlagenen Aufruf"""
self.failure_count += 1
self.last_failure_time = datetime.now()
if self.state == CircuitState.HALF_OPEN:
logger.warning(f"Circuit Breaker für {self.provider_name}: "
f"Fehler in HALF_OPEN → Öffne wieder")
self.state = CircuitState.OPEN
elif self.failure_count >= self.failure_threshold:
logger.warning(f"Circuit Breaker für {self.provider_name}: "
f"Öffne nach {self.failure_count} Fehlern")
self.state = CircuitState.OPEN
class CircuitBreakerOpenException(Exception):
pass
Verwendung mit HolySheep
circuit_breaker = CircuitBreaker(
failure_threshold=5,
timeout=60.0,
expected_exception=Exception
)
circuit_breaker.set_provider("holysheep-primary")
async def safe_holysheep_call(prompt: str):
try:
result = await circuit_breaker.call(
lambda: client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
)
return result
except CircuitBreakerOpenException as e:
logger.error(f"Alle Provider nicht verfügbar: {e}")
# Hier Graceful Degradation implementieren
raise AllProvidersUnavailableException(str(e))
Fehler 3: Keine Graceful Degradation Strategie
Problem: Bei komplettem Ausfall aller Provider zeigt die Anwendung nur Fehler an, anstatt einen reduzierten Service anzubieten.
from enum import Enum
from dataclasses import dataclass
from typing import Optional, Union
import json
class DegradationLevel(Enum):
FULL = "full" # Alle Features verfügbar
REDUCED = "reduced" # Eingeschränkte Features
FALLBACK = "fallback" # Nur Grundfunktionen
MAINTENANCE = "maintenance" # Nur Status-Seite
@dataclass
class DegradationConfig:
level: DegradationLevel
fallback_model: str = "deepseek-v3"
max_tokens: int = 200
cache_enabled: bool = True
user_message: Optional[str] = None
class GracefulDegradationManager:
"""
Verwaltet Graceful Degradation basierend auf Provider-Verfügbarkeit
"""
def __init__(self):
self.current_level = DegradationLevel.FULL
self.circuit_breakers: dict[str, CircuitBreaker] = {}
self.response_cache: dict[str, str] = {}
self.cache_ttl: int = 3600 # 1 Stunde
async def get_response(
self,
prompt: str,
user_id: str,
require_premium: bool = False
) -> tuple[str, DegradationConfig]:
"""
Holt eine Antwort mit automatischer Degradation
Returns:
Tuple von (Antwort, DegradationConfig)
"""
# Prüfe Cache zuerst
cache_key = self._get_cache_key(prompt, require_premium)
cached = self._get_from_cache(cache_key)
if cached:
return cached, DegradationConfig(
level=self.current_level,
user_message="Antwort aus Cache"
)
# Versuche Primary Provider
try:
response = await self._call_primary_provider(prompt, require_premium)
self.current_level = DegradationLevel.FULL
return response, DegradationConfig(level=DegradationLevel.FULL)
except AllProvidersUnavailableException:
# Provider nicht verfügbar - degradiere schrittweise
return await self._degrade(prompt, require_premium)
async def _degrade(
self,
prompt: str,
require_premium: bool
) -> tuple[str, DegradationConfig]:
"""Implementiert gestaffelte Degradation"""
# Level 1: Versuche günstigen Fallback Provider
try:
response = await self._call_fallback_provider(prompt)
self.current_level = DegradationLevel.FALLBACK
return response, DegradationConfig(
level=DegradationLevel.FALLBACK,
fallback_model="deepseek-v3",
max_tokens=200,
user_message="Hinweis: Wir nutzen derzeit einen Backup-Service für optimale Verfügbarkeit."
)
except:
pass
# Level 2: Biete vordefinierte Antworten an
if cached_response := self._get_cached_common_response(prompt):
self.current_level = DegradationLevel.MAINTENANCE
return cached_response, DegradationConfig(
level=DegradationLevel.MAINTENANCE,
user_message="Entschuldigung! Unser KI-Service ist vorübergehend überlastet. "
"Hier ist eine vordefinierte Antwort auf Ihre Anfrage."
)
# Level 3: Grundlegende Fehlermeldung