| """
|
| QuantumOptimizer — Self-Tuning Engine for the Codette RC+xi Framework.
|
|
|
| Inspired by VIVARA Genesis-Omega v2.0, rebuilt as a proper self-tuning system.
|
|
|
| The optimizer tracks response quality signals (user engagement, coherence
|
| scores, tension productivity) and adjusts:
|
| - Router confidence thresholds
|
| - Spiderweb parameters (contraction ratio, tension threshold)
|
| - Adapter selection weights
|
| - Multi-perspective synthesis quality
|
|
|
| Uses simulated annealing with momentum: explores the parameter space
|
| stochastically but remembers which configurations worked best.
|
|
|
| All changes are bounded and reversible. The optimizer logs every
|
| adjustment for full transparency.
|
| """
|
|
|
| from __future__ import annotations
|
|
|
| import math
|
| import random
|
| import time
|
| from dataclasses import dataclass, field
|
| from typing import Dict, List, Optional, Tuple
|
|
|
|
|
| @dataclass
|
| class QualitySignal:
|
| """A quality signal from a Codette response."""
|
| timestamp: float
|
| adapter: str
|
| coherence: float
|
| tension: float
|
| productivity: float
|
| response_length: int
|
| multi_perspective: bool
|
| user_continued: bool = True
|
|
|
|
|
| @dataclass
|
| class TuningState:
|
| """Current tuning parameters."""
|
|
|
| confidence_threshold: float = 0.4
|
| multi_perspective_threshold: float = 0.6
|
|
|
|
|
| contraction_ratio: float = 0.85
|
| tension_threshold: float = 0.15
|
| entanglement_alpha: float = 0.9
|
|
|
|
|
| adapter_boosts: Dict[str, float] = field(default_factory=dict)
|
|
|
| def to_dict(self) -> Dict:
|
| return {
|
| "confidence_threshold": self.confidence_threshold,
|
| "multi_perspective_threshold": self.multi_perspective_threshold,
|
| "contraction_ratio": self.contraction_ratio,
|
| "tension_threshold": self.tension_threshold,
|
| "entanglement_alpha": self.entanglement_alpha,
|
| "adapter_boosts": dict(self.adapter_boosts),
|
| }
|
|
|
| @classmethod
|
| def from_dict(cls, data: Dict) -> "TuningState":
|
| state = cls()
|
| for k, v in data.items():
|
| if k == "adapter_boosts":
|
| state.adapter_boosts = dict(v)
|
| elif hasattr(state, k):
|
| setattr(state, k, v)
|
| return state
|
|
|
|
|
| @dataclass
|
| class OptimizationStep:
|
| """Record of a single optimization step."""
|
| timestamp: float
|
| parameter: str
|
| old_value: float
|
| new_value: float
|
| reason: str
|
| quality_score: float
|
|
|
|
|
| class QuantumOptimizer:
|
| """Self-tuning engine with simulated annealing."""
|
|
|
| def __init__(
|
| self,
|
| learning_rate: float = 0.02,
|
| temperature: float = 0.5,
|
| cooling_rate: float = 0.995,
|
| min_signals_before_tuning: int = 5,
|
| ):
|
| self.learning_rate = learning_rate
|
| self.temperature = temperature
|
| self.cooling_rate = cooling_rate
|
| self.min_signals = min_signals_before_tuning
|
|
|
| self.state = TuningState()
|
| self.best_state = TuningState()
|
| self.best_score = 0.0
|
|
|
| self.signals: List[QualitySignal] = []
|
| self.history: List[OptimizationStep] = []
|
|
|
|
|
| self._quality_window: List[float] = []
|
| self._window_size = 20
|
|
|
| def record_signal(self, signal: QualitySignal):
|
| """Record a quality signal from a Codette response."""
|
| self.signals.append(signal)
|
|
|
|
|
| quality = self._compute_quality(signal)
|
| self._quality_window.append(quality)
|
| if len(self._quality_window) > self._window_size:
|
| self._quality_window.pop(0)
|
|
|
|
|
| if len(self.signals) >= self.min_signals:
|
| self._maybe_tune()
|
|
|
| def _compute_quality(self, signal: QualitySignal) -> float:
|
| """Composite quality score from a response signal.
|
|
|
| Weights:
|
| - coherence: 30% (high is good — responses make sense)
|
| - productivity: 30% (high is good — tension was resolved productively)
|
| - moderate tension: 20% (sweet spot ~0.3-0.5 is best)
|
| - user_continued: 20% (binary — did they keep talking?)
|
| """
|
|
|
| tension_score = 1.0 - 2.0 * abs(signal.tension - 0.4)
|
| tension_score = max(0.0, tension_score)
|
|
|
| quality = (
|
| 0.30 * signal.coherence +
|
| 0.30 * signal.productivity +
|
| 0.20 * tension_score +
|
| 0.20 * (1.0 if signal.user_continued else 0.0)
|
| )
|
| return min(max(quality, 0.0), 1.0)
|
|
|
| def _maybe_tune(self):
|
| """Run one optimization step if enough data."""
|
| if len(self._quality_window) < 3:
|
| return
|
|
|
| current_quality = sum(self._quality_window) / len(self._quality_window)
|
|
|
|
|
| if current_quality > self.best_score:
|
| self.best_score = current_quality
|
| self.best_state = TuningState(**{
|
| k: getattr(self.state, k) for k in vars(self.state)
|
| if not k.startswith('_')
|
| })
|
| elif self.temperature > 0.01:
|
|
|
| delta = self.best_score - current_quality
|
| accept_prob = math.exp(-delta / max(self.temperature, 0.001))
|
| if random.random() > accept_prob:
|
|
|
| self._revert_to_best()
|
| return
|
|
|
|
|
| self.temperature *= self.cooling_rate
|
|
|
|
|
| self._tune_one_parameter(current_quality)
|
|
|
| def _tune_one_parameter(self, current_quality: float):
|
| """Tune one parameter based on recent quality signals."""
|
| recent = self.signals[-10:]
|
|
|
|
|
| avg_coherence = sum(s.coherence for s in recent) / len(recent)
|
| avg_tension = sum(s.tension for s in recent) / len(recent)
|
| avg_productivity = sum(s.productivity for s in recent) / len(recent)
|
| multi_ratio = sum(1 for s in recent if s.multi_perspective) / len(recent)
|
|
|
|
|
| param = None
|
| old_val = 0.0
|
| new_val = 0.0
|
| reason = ""
|
|
|
| if avg_coherence < 0.5:
|
|
|
| param = "contraction_ratio"
|
| old_val = self.state.contraction_ratio
|
| delta = self.learning_rate * (0.7 - avg_coherence)
|
| new_val = min(0.98, max(0.5, old_val + delta))
|
| reason = f"Low coherence ({avg_coherence:.2f}), tightening propagation"
|
|
|
| elif avg_tension < 0.2 and avg_productivity < 0.3:
|
|
|
|
|
| param = "multi_perspective_threshold"
|
| old_val = self.state.multi_perspective_threshold
|
| new_val = max(0.3, old_val - self.learning_rate)
|
| reason = f"Low tension+productivity ({avg_tension:.2f}/{avg_productivity:.2f}), encouraging multi-perspective"
|
|
|
| elif avg_tension > 0.7:
|
|
|
| param = "tension_threshold"
|
| old_val = self.state.tension_threshold
|
| new_val = min(0.5, old_val + self.learning_rate * 0.5)
|
| reason = f"High tension ({avg_tension:.2f}), raising convergence threshold"
|
|
|
| elif multi_ratio > 0.8 and avg_productivity < 0.4:
|
|
|
| param = "multi_perspective_threshold"
|
| old_val = self.state.multi_perspective_threshold
|
| new_val = min(0.8, old_val + self.learning_rate)
|
| reason = f"Multi-perspective overuse ({multi_ratio:.0%}) with low productivity"
|
|
|
|
|
| elif len(recent) >= 5:
|
| adapter_quality = {}
|
| for s in recent:
|
| q = self._compute_quality(s)
|
| if s.adapter not in adapter_quality:
|
| adapter_quality[s.adapter] = []
|
| adapter_quality[s.adapter].append(q)
|
|
|
|
|
| if adapter_quality:
|
| best_adapter = max(
|
| adapter_quality,
|
| key=lambda a: sum(adapter_quality[a]) / len(adapter_quality[a])
|
| )
|
| param = f"adapter_boost_{best_adapter}"
|
| old_val = self.state.adapter_boosts.get(best_adapter, 0.0)
|
| new_val = min(0.3, old_val + self.learning_rate * 0.5)
|
| self.state.adapter_boosts[best_adapter] = new_val
|
| reason = f"Boosting high-quality adapter: {best_adapter}"
|
|
|
| if param and param not in ("adapter_boost_" + a for a in self.state.adapter_boosts):
|
| if hasattr(self.state, param):
|
| setattr(self.state, param, new_val)
|
|
|
| if param:
|
| self.history.append(OptimizationStep(
|
| timestamp=time.time(),
|
| parameter=param,
|
| old_value=old_val,
|
| new_value=new_val,
|
| reason=reason,
|
| quality_score=current_quality,
|
| ))
|
|
|
| def _revert_to_best(self):
|
| """Revert to the best known tuning state."""
|
| self.state = TuningState(**{
|
| k: getattr(self.best_state, k) for k in vars(self.best_state)
|
| if not k.startswith('_')
|
| })
|
|
|
| def get_adapter_boost(self, adapter_name: str) -> float:
|
| """Get the current boost for an adapter (0.0 = no boost)."""
|
| return self.state.adapter_boosts.get(adapter_name, 0.0)
|
|
|
| def get_tuning_report(self) -> Dict:
|
| """Get current tuning state and recent history."""
|
| recent_quality = (
|
| sum(self._quality_window) / len(self._quality_window)
|
| if self._quality_window else 0.0
|
| )
|
| return {
|
| "current_state": self.state.to_dict(),
|
| "best_score": round(self.best_score, 4),
|
| "current_quality": round(recent_quality, 4),
|
| "temperature": round(self.temperature, 4),
|
| "total_signals": len(self.signals),
|
| "recent_adjustments": [
|
| {
|
| "param": h.parameter,
|
| "old": round(h.old_value, 4),
|
| "new": round(h.new_value, 4),
|
| "reason": h.reason,
|
| }
|
| for h in self.history[-5:]
|
| ],
|
| }
|
|
|
| def to_dict(self) -> Dict:
|
| """Serialize for persistence."""
|
| return {
|
| "state": self.state.to_dict(),
|
| "best_score": self.best_score,
|
| "temperature": self.temperature,
|
| "quality_window": self._quality_window,
|
| }
|
|
|
| @classmethod
|
| def from_dict(cls, data: Dict) -> "QuantumOptimizer":
|
| opt = cls()
|
| if "state" in data:
|
| opt.state = TuningState.from_dict(data["state"])
|
| opt.best_state = TuningState.from_dict(data["state"])
|
| opt.best_score = data.get("best_score", 0.0)
|
| opt.temperature = data.get("temperature", 0.5)
|
| opt._quality_window = data.get("quality_window", [])
|
| return opt
|
|
|