{"record":{"id":"c055b4ba889e0d8f","repo":"ruvnet/ruflo","slug":"hyperbolic-attention-not-initialized","errorCode":null,"errorMessage":"Hyperbolic attention not initialized","messagePattern":"Hyperbolic attention not initialized","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/cli/src/services/ruvector-training.ts","lineNumber":621,"sourceCode":"  values: Float32Array[]\n): Float32Array {\n  if (!moeAttention) {\n    throw new Error('MoE attention not initialized');\n  }\n\n  return moeAttention.computeRaw(query, keys, values);\n}\n\n/**\n * Compute hyperbolic attention (for hierarchical patterns)\n */\nexport function computeHyperbolicAttention(\n  query: Float32Array,\n  keys: Float32Array[],\n  values: Float32Array[]\n): Float32Array {\n  if (!hyperbolicAttention) {\n    throw new Error('Hyperbolic attention not initialized');\n  }\n\n  return hyperbolicAttention.computeRaw(query, keys, values);\n}\n\n/**\n * Compute contrastive loss for training\n */\nexport function computeContrastiveLoss(\n  anchor: Float32Array,\n  positives: Float32Array[],\n  negatives: Float32Array[]\n): { loss: number; gradient: Float32Array } {\n  if (!contrastiveLoss) {\n    throw new Error('Contrastive loss not initialized');\n  }\n\n  const loss = contrastiveLoss.compute(anchor, positives, negatives);","sourceCodeStart":603,"sourceCodeEnd":639,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/cli/src/services/ruvector-training.ts#L603-L639","documentation":"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.","triggerScenarios":"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.","commonSituations":"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).","solutions":["Initialize with { useHyperbolic: true } and assert features includes 'HyperbolicAttention'.","Verify @ruvector/attention is installed if the flag was already set — look for the '[ruvector] @ruvector/attention unavailable' warning during init.","Branch on the features array: fall back to computeFlashAttention when hyperbolic is absent.","Re-initialize after cleanup()."],"exampleFix":"// before\nawait initializeTraining({ useFlashAttention: true });\nconst h = computeHyperbolicAttention(query, keys, values); // throws — flag missing\n\n// after\nconst init = await initializeTraining({ useHyperbolic: true, useFlashAttention: true });\nconst h = init.features.includes('HyperbolicAttention')\n  ? computeHyperbolicAttention(query, keys, values)\n  : computeFlashAttention(query, keys, values);","handlingStrategy":"validation","validationCode":"const init = await initializeTraining({ useHyperbolic: true });\nconst hyperbolic = init.features.includes('HyperbolicAttention');\nconst output = hyperbolic\n  ? computeHyperbolicAttention(query, keys, values)\n  : computeFlashAttention(query, keys, values); // explicit capability fallback","typeGuard":"async function hyperbolicReady(cfg: TrainingConfig = {}): Promise<boolean> {\n  const init = await initializeTraining(cfg);\n  return init.features.includes('HyperbolicAttention');\n}","tryCatchPattern":"try {\n  return computeHyperbolicAttention(q, keys, values);\n} catch (e) {\n  if (e instanceof Error && e.message === 'Hyperbolic attention not initialized') {\n    return computeFlashAttention(q, keys, values);\n  }\n  throw e;\n}","preventionTips":["Enable useHyperbolic in the central TrainingConfig, not per call site.","Check init.features — the flag is necessary but not sufficient when @ruvector/attention is absent.","Keep a Euclidean fallback path for attention so hierarchical experiments degrade gracefully.","Re-run init with the flag after cleanup()."],"tags":["initialization","ruvector","hyperbolic","attention","optional-dependency"],"backgroundTag":"component-not-initialized","analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}