[3.1-3.5] FAM-Edge 全链路 - API-Gateway/Video-Preprocessor/AI-Orchestrator/模型适配器(基类+Ollama+Gemini)/熔断器/JSON解析容错 + 配置

This commit is contained in:
ericwyuan
2026-08-19 22:25:38 +08:00
parent da6b1c8d39
commit cdd1f21d4c
20 changed files with 1384 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
"""
熔断器 - 每个云端模型独立实例
状态机: CLOSED -> OPEN -> HALF_OPEN -> CLOSED/OPEN
- 连续 threshold 次失败 -> OPEN
- 冷却 cooldown 秒后 -> HALF_OPEN允许一次探测
- 探测成功 -> CLOSED探测失败 -> 重新 OPEN
"""
from collections import deque
import time
class CircuitBreaker:
def __init__(self, threshold: int = 5, cooldown: int = 900, enabled: bool = True):
self.enabled = enabled
if enabled:
self.failures = deque(maxlen=threshold)
else:
self.failures = None
self.threshold = threshold
self.cooldown = cooldown
self.state = 'CLOSED'
self.last_failure = None
def record_failure(self):
if not self.enabled:
return
self.failures.append(time.time())
if len(self.failures) >= self.threshold:
self.state = 'OPEN'
self.last_failure = time.time()
def record_success(self):
if not self.enabled:
return
self.failures.clear()
self.state = 'CLOSED'
def is_open(self):
if not self.enabled:
return False
if self.state == 'OPEN' and self.last_failure and time.time() - self.last_failure > self.cooldown:
self.state = 'HALF_OPEN'
return self.state == 'OPEN'
def __repr__(self):
return f"CircuitBreaker(state={self.state}, enabled={self.enabled})"