ruvnet/ruflo · error · Error

Hyperbolic attention not initialized

Error message

Hyperbolic attention not initialized

What it means

Thrown by computeHyperbolicAttention() when hyperbolicAttention is null. Like MoE, hyperbolic attention (Poincaré-ball style attention for hierarchical patterns) is opt-in: it is constructed only when config.useHyperbolic is truthy AND the optional @ruvector/attention package imports. init constructs HyperbolicAttention(dim, 1.0) and lists 'HyperbolicAttention' in features on success.

Source

Thrown at v3/@claude-flow/cli/src/services/ruvector-training.ts:621

  values: Float32Array[]
): Float32Array {
  if (!moeAttention) {
    throw new Error('MoE attention not initialized');
  }

  return moeAttention.computeRaw(query, keys, values);
}

/**
 * Compute hyperbolic attention (for hierarchical patterns)
 */
export function computeHyperbolicAttention(
  query: Float32Array,
  keys: Float32Array[],
  values: Float32Array[]
): Float32Array {
  if (!hyperbolicAttention) {
    throw new Error('Hyperbolic attention not initialized');
  }

  return hyperbolicAttention.computeRaw(query, keys, values);
}

/**
 * Compute contrastive loss for training
 */
export function computeContrastiveLoss(
  anchor: Float32Array,
  positives: Float32Array[],
  negatives: Float32Array[]
): { loss: number; gradient: Float32Array } {
  if (!contrastiveLoss) {
    throw new Error('Contrastive loss not initialized');
  }

  const loss = contrastiveLoss.compute(anchor, positives, negatives);

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Initialize with { useHyperbolic: true } and assert features includes 'HyperbolicAttention'.
  2. Verify @ruvector/attention is installed if the flag was already set — look for the '[ruvector] @ruvector/attention unavailable' warning during init.
  3. Branch on the features array: fall back to computeFlashAttention when hyperbolic is absent.
  4. Re-initialize after cleanup().

Example fix

// before
await initializeTraining({ useFlashAttention: true });
const h = computeHyperbolicAttention(query, keys, values); // throws — flag missing

// after
const init = await initializeTraining({ useHyperbolic: true, useFlashAttention: true });
const h = init.features.includes('HyperbolicAttention')
  ? computeHyperbolicAttention(query, keys, values)
  : computeFlashAttention(query, keys, values);
Defensive patterns

Strategy: validation

Validate before calling

const init = await initializeTraining({ useHyperbolic: true });
const hyperbolic = init.features.includes('HyperbolicAttention');
const output = hyperbolic
  ? computeHyperbolicAttention(query, keys, values)
  : computeFlashAttention(query, keys, values); // explicit capability fallback

Type guard

async function hyperbolicReady(cfg: TrainingConfig = {}): Promise<boolean> {
  const init = await initializeTraining(cfg);
  return init.features.includes('HyperbolicAttention');
}

Try / catch

try {
  return computeHyperbolicAttention(q, keys, values);
} catch (e) {
  if (e instanceof Error && e.message === 'Hyperbolic attention not initialized') {
    return computeFlashAttention(q, keys, values);
  }
  throw e;
}

Prevention

When it happens

Trigger: Calling computeHyperbolicAttention after an init that omitted useHyperbolic: true; useHyperbolic set but @ruvector/attention unresolvable (optional dep stripped — init warns and disables all attention features); post-cleanup() usage.

Common situations: Hierarchical-pattern experiments wired up against a shared training bootstrap that never enabled the flag; Docker images pruning optionalDependencies; config drift between environments (flag set in dev, missing in prod).

Related errors


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/c055b4ba889e0d8f. Report an issue: GitHub.