| """ |
| 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 |
|
|