| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import type { InnerDriveSignal } from "./inner-life/index.js"; |
|
|
| export interface JepaTensionMetrics { |
| frustration: number; |
| confidence: number; |
| surprise?: number; |
| error?: string; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function enhanceDriveWithJepaTension( |
| driveSignal: InnerDriveSignal, |
| jepaTension: JepaTensionMetrics, |
| ): InnerDriveSignal { |
| const surprise = Math.max(0, Math.min(1, jepaTension.surprise ?? 0)); |
|
|
| |
| if (jepaTension.error || jepaTension.confidence < 0.3) { |
| return driveSignal; |
| } |
|
|
| |
| |
| if ( |
| driveSignal.kind === "idle" && |
| (jepaTension.frustration > 1.5 || (jepaTension.frustration > 1.0 && surprise > 0.28)) |
| ) { |
| return { |
| kind: "entropy_alert", |
| silentMs: 0, |
| reason: `JEPA-EMERGENCY: frustration=${jepaTension.frustration.toFixed(2)} surprise=${surprise.toFixed(2)}`, |
| urgency: Math.min(0.98, 0.58 + jepaTension.frustration * 0.12 + surprise * 0.2), |
| }; |
| } |
|
|
| |
| |
| if (driveSignal.kind !== "idle" && (jepaTension.frustration > 0.5 || surprise > 0.22)) { |
| const baseUrgency = driveSignal.urgency ?? 0.5; |
| const boostAmount = Math.max(jepaTension.frustration * 0.12, surprise * 0.22); |
| const newUrgency = Math.min(0.99, baseUrgency + boostAmount); |
|
|
| return { |
| ...driveSignal, |
| urgency: newUrgency, |
| reason: `${driveSignal.reason} [JEPA-ENHANCED: +${(boostAmount * 100).toFixed(0)}% surprise=${surprise.toFixed(2)}]`, |
| }; |
| } |
|
|
| |
| |
| if ( |
| driveSignal.kind === "idle" && |
| (jepaTension.frustration > 0.5 || surprise > 0.24) && |
| !(jepaTension.frustration > 1.5 || (jepaTension.frustration > 1.0 && surprise > 0.28)) |
| ) { |
| |
| const nextDrive = |
| jepaTension.frustration > 0.95 || surprise > 0.35 ? "curiosity" : "homeostasis"; |
| const urgency = 0.36 + jepaTension.frustration * 0.12 + surprise * 0.2; |
|
|
| if (nextDrive === "curiosity") { |
| return { |
| kind: "curiosity", |
| target: "memory/", |
| reason: `JEPA-ENGAGED: moderate frustration=${jepaTension.frustration.toFixed(2)} surprise=${surprise.toFixed(2)}`, |
| urgency: Math.min(0.84, urgency), |
| }; |
| } else { |
| return { |
| kind: "homeostasis", |
| reason: `JEPA-ENGAGED: moderate frustration=${jepaTension.frustration.toFixed(2)} surprise=${surprise.toFixed(2)}`, |
| urgency: Math.min(0.82, urgency), |
| }; |
| } |
| } |
|
|
| |
| return driveSignal; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| type TimelineEntryForJepa = { |
| outcome?: { status: string; errorKind?: string }; |
| turn?: number; |
| }; |
|
|
| export function parseJepaTensionFromKernelTimeline( |
| timeline: TimelineEntryForJepa[], |
| ): JepaTensionMetrics { |
| if (!timeline || timeline.length < 2) { |
| return { frustration: 0, confidence: 0, surprise: 0 }; |
| } |
|
|
| const recentEntries = timeline.slice(-Math.min(5, timeline.length)); |
| const priorEntries = timeline.slice( |
| Math.max(0, timeline.length - Math.min(10, timeline.length)), |
| Math.max(0, timeline.length - Math.min(5, timeline.length)), |
| ); |
| const failures = recentEntries.filter((e) => e.outcome?.status === "error").length; |
| const failureRate = failures / recentEntries.length; |
| const priorFailureRate = |
| priorEntries.length === 0 |
| ? failureRate |
| : priorEntries.filter((e) => e.outcome?.status === "error").length / priorEntries.length; |
|
|
| return { |
| frustration: Math.min(2, failureRate * 2), |
| confidence: 1 - failureRate, |
| surprise: Math.max(0, Math.min(1, failureRate - priorFailureRate)), |
| }; |
| } |
|
|