activeloopai / activeloopai/hivemind

Perf: suffix-keyed reverse index for matchPythonSuffix (avoid O(files) scan per import)

Abierto
#236 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

## Context

`matchPythonSuffix` in `src/graph/resolve/cross-file.ts` resolves a dotted-absolute Python import by suffix-matching against the known-files set. For each lookup it does up to 4 target forms × a full linear scan of `knownFiles`:

```ts
for (const t of targets) { // 4 target forms
if (knownFiles.has(t)) return t;
for (const f of knownFiles) { // O(files) scan
if (f.endsWith(`/${t}`)) { ... }
}
}
```

So cross-file resolution over a Python repo is `O(calls × files × 4)`. Fine at current scale (graphiti = 117 files, instant), but it degrades on large monorepos.

## Proposal

Build a suffix-keyed reverse index **once** (alongside `buildExportIndex`), mapping every path suffix (`mod.py`, `sub/mod.py`, `pkg/sub/mod.py`) → list of files, then make `matchPythonSuffix` an O(1) lookup + ambiguity check with no per-call scan.

## Notes
- Raised by CodeRabbit on PR #228 (Perf, Medium). Deferred from that PR since it's an optimization, not a correctness fix.
- Keep the existing high-confidence semantics: exact (root-anchored) wins; single suffix match wins; multiple → drop (ambiguous).

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.