Spaces:
Running on Zero
Running on Zero
File size: 6,605 Bytes
c8fbdf1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | #!/usr/bin/env python3
"""
Codette Unified Pipeline Harness — RC+xi Integration Engine.
Wires Orchestrator, Spiderweb, Manifold Engine, and AEGIS sub-layers
into a single cognitive cycle that routes, generates, measures, and
feeds back.
Usage:
from reasoning_forge.WOSME import CodetteRuntimePipeline
pipeline = CodetteRuntimePipeline(use_openvino=True)
result = pipeline.execute_cognitive_cycle("Why does ice float?")
"""
import os
import sys
import time
from typing import Dict, List, Any, Tuple
try:
import numpy as np
except ImportError:
np = None
_HERE = os.path.dirname(os.path.abspath(__file__))
_REPO = os.path.dirname(_HERE)
if _REPO not in sys.path:
sys.path.insert(0, _REPO)
from reasoning_forge.quantum_spiderweb import QuantumSpiderweb, NodeState
from reasoning_forge.quantum_optimizer import QuantumOptimizer, QualitySignal
from reasoning_forge.codette_subsystem_upgrade import CodetteSubsystemUpgrade, ForgeManifoldEngine
from reasoning_forge.epistemic_metrics import EpistemicMetrics
class CodetteRuntimePipeline:
"""End-to-end cognitive cycle: route → generate → measure → synthesize → feedback."""
def __init__(self, use_openvino: bool = False, enforce_veto: bool = False):
# 1. Generative backend
if use_openvino:
from openvino_backend.backend import OpenVINOBackend
self.engine = OpenVINOBackend()
self.backend_type = "OpenVINO"
else:
from inference.codette_orchestrator import CodetteOrchestrator
self.engine = CodetteOrchestrator(verbose=False)
self.backend_type = "Llama.cpp"
# 2. Mathematical & topographic analytics
self.spiderweb = QuantumSpiderweb(tension_threshold=0.15)
self.manifold_engine = ForgeManifoldEngine(window_size=6, safe_ema=0.1)
self.epistemic_evaluator = EpistemicMetrics()
# 3. Safety gates and meta-optimizers
self.upgrade_layer = CodetteSubsystemUpgrade(
enforce_veto=enforce_veto, eta_threshold=0.5
)
self.optimizer = QuantumOptimizer(learning_rate=0.02, momentum_enabled=True)
def execute_cognitive_cycle(self, user_query: str) -> Dict[str, Any]:
start_time = time.time()
from inference.codette_shared import extract_primary_user_query
primary_query = extract_primary_user_query(user_query)
# --- PHASE 1: ROUTING CONFIGURATION ---
tuning_cfg = self.optimizer.state
self.spiderweb.contraction_ratio = tuning_cfg.contraction_ratio
self.spiderweb.tension_threshold = tuning_cfg.tension_threshold
route = self.engine.router.route(
primary_query, strategy="keyword", max_adapters=3
)
active_adapters = route.all_adapters
# --- PHASE 2: DIVERGENT AGENT PERSPECTIVES ---
analyses = {}
node_embeddings = []
node_ids = []
for adapter in active_adapters:
text, tokens, _ = self.engine.generate(
user_query, adapter_name=adapter, enable_tools=False
)
analyses[adapter] = text
state_node = NodeState.from_text(text, embedder=None)
self.spiderweb.add_node(adapter, state_node)
if state_node.embedding is not None:
node_embeddings.append(state_node.embedding)
node_ids.append(adapter)
self.spiderweb.build_from_agents(active_adapters)
# --- PHASE 3: MANIFOLD RESOLUTION ---
manifold_data = {}
synthesis_weights = None
if node_embeddings and np is not None:
real_uncertainty = getattr(self.engine, "last_uncertainty", None)
if real_uncertainty is not None:
uncertainty_report = real_uncertainty
else:
uncertainty_report = self.upgrade_layer.calculate_uncertainty_from_logprobs(
[-0.5]
)
manifold_data = self.manifold_engine.update_manifold(
node_embeddings, eta=0.85
)
synthesis_weights = manifold_data.get("synthesis_weights")
# --- PHASE 4: PERSPECTIVE SYNTHESIS ---
raw_synthesis = self.engine._synthesize(user_query, analyses)
text_metrics = self.epistemic_evaluator.full_epistemic_report(
analyses, raw_synthesis
)
# --- PHASE 5: AEGIS VETO ASSESSMENT ---
aegis_scores = None
try:
from reasoning_forge.aegis import AEGIS
aegis = AEGIS()
audit = aegis.audit(raw_synthesis)
aegis_scores = audit.get("framework_scores")
except Exception:
pass
if aegis_scores is None:
aegis_scores = {
"utilitarian": 0.88, "deontological": 0.72, "virtue": 0.65,
"care": 0.91, "ubuntu": 0.82, "reciprocity": 0.78,
}
final_output, final_eta, veto_fired = (
self.upgrade_layer.audit_and_enforce_aegis_veto(
response_text=raw_synthesis,
framework_scores=aegis_scores,
eta=None,
)
)
# --- PHASE 6: CLOSED-LOOP OPTIMIZER FEEDBACK ---
latency = (time.time() - start_time) * 1000.0
signal_packet = QualitySignal(
timestamp=time.time(),
adapter=route.primary,
coherence=manifold_data.get(
"gamma_t", text_metrics.get("ensemble_coherence", 0.5)
),
tension=manifold_data.get(
"xi_t", text_metrics.get("tension_magnitude", 0.5)
),
productivity=text_metrics.get("tension_productivity", {}).get(
"productivity", 0.5
),
response_length=len(final_output.split()),
multi_perspective=route.multi_perspective,
user_continued=True,
latency_ms=latency,
error_rate=1.0 if veto_fired else 0.0,
)
self.optimizer.record_signal(signal_packet)
return {
"output_text": final_output,
"veto_enforced": veto_fired,
"global_coherence": signal_packet.coherence,
"global_tension": signal_packet.tension,
"active_route": route.primary,
"latency_ms": latency,
"optimization_summary": self.optimizer.get_tuning_report(),
}
|