activeloopai / activeloopai/hivemind

Embeddings silently disabled for upgrading users (HIVEMIND_EMBEDDINGS unset → enabled=false)

Abierto
#184 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
TypeScript
Estrellas
1.6k
Forks
107
Merge medio
17 h 30 min
PR fusionados (30 d)
6

Descripción

## Symptom

Users upgrading past `bfc8e07` (and fresh installs that don't set `HIVEMIND_EMBEDDINGS=true`) get embeddings **persistently disabled** on first SDK call. `~/.deeplake/config.json` ends up with `{embeddings: {enabled: false}}` forever — until the user explicitly runs `hivemind embeddings install` (which writes `enabled: true`).

## Root cause

`src/user-config.ts:67` documents the migration rule as:

```
HIVEMIND_EMBEDDINGS=false OR unset → enabled: false
HIVEMIND_EMBEDDINGS=true (or any other truthy) → enabled: true
```

And `migrationValueFromEnv()` at line 96 implements that literally:

```ts
if (raw === undefined) return false;
```

So on first call to `getEmbeddingsEnabled()` (no config yet, env var unset), it returns `false` and persists that to disk. The decision becomes sticky.

## Impact

- Users who had working embeddings before upgrading silently lose semantic memory search
- No banner fires because the embeddings-broken signal is the one we removed in #182
- Discovery requires the user to notice grep/recall feels degraded and find the CLI command

## Suggested fix

Per CodeRabbit on #182:

```diff
function migrationValueFromEnv() {
const raw = process.env.HIVEMIND_EMBEDDINGS;
- if (raw === undefined) return false;
+ if (raw === undefined) return undefined;
if (raw === "false") return false;
return true;
}
```

And update `getEmbeddingsEnabled()` to treat `undefined` from migration as "default true" (no opt-out signal present).

## Why not in PR #182

#182's scope is the user-visible banner removal. Changing the migration default touches Emanuele's intentional design rule (`bfc8e07`) — needs his judgment call on opt-in vs opt-out.

## Related

- PR #182 (banner removal) — surfaces this regression because there's now no audible "embeddings off" signal
- `bfc8e07` (feat(embeddings): hello handshake + stuck-daemon recycle + visible signal) — where the rule was introduced
- @emanuele-fenocchi-activeloop's call on the design

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.