SudharshanR
ElideDB query by example: no text, no model at query time
a1dd5ba
Raw
History Blame Contribute Delete
5.06 kB
"""SELF-RECOGNIZED action contrast — pseudo-relevance feedback in the
video-native feature space. No class names, no verb maps, no dataset
priors in code (user rule: priors must be recognized from the corpus,
not typed — a self-driving corpus must work with this exact file).
Mechanism (Rocchio, 1971 — the oldest trick in retrieval, applied
cross-modally): the TEXT channels' top-K for the query are weak
positives; the swap-query's top-K are weak negatives; the action
contrast IS the difference of their mean V-JEPA vectors. V-JEPA
features are self-supervised and domain-general — the same anchors
form for "closing the drawer"/"opening the drawer" on bridge and for
"merging left"/"merging right" on driving footage. The corpus itself
defines what the direction looks like here.
Also here: per-query CHANNEL INFORMATIVENESS — a channel that ranks
episodes identically for the query and its swap carries no direction
information for THIS query (measured, not declared)."""
from __future__ import annotations
import numpy as np
_VJ = {}
def _vjepa_matrix(store, keys):
"""Episode-aligned V-JEPA vectors (normalized), cached per store
version. NaN rows for episodes without a vector."""
from .embeddings import _vec_table
ver = store.table("vjepa_vectors").state().version
ck = (str(store.dir), ver, len(keys))
if ck in _VJ:
return _VJ[ck]
tbl, vecs = _vec_table(store, "vjepa_vectors")
idx = {}
for r, (s, a) in enumerate(zip(tbl.column("stream").to_pylist(),
(int(v) for v in
tbl.column("ts").to_pylist()))):
idx[(str(s), a)] = r
V = np.asarray(vecs)
V = V / (np.linalg.norm(V, axis=1, keepdims=True) + 1e-8)
M = np.full((len(keys), V.shape[1]), np.nan, np.float32)
for i, (s, a, b) in enumerate(keys):
r = idx.get((s, a))
if r is not None:
M[i] = V[r]
if len(_VJ) > 4:
_VJ.clear()
_VJ[ck] = M
return M
def prf_contrast(store, keys, seed_scores, swap_seed_scores=None,
k=16):
"""Per-episode contrast scores from corpus-derived anchors.
seed_scores: text-channel scores for the query (weak relevance);
swap_seed_scores: same for the swapped query, or None (falls back
to the corpus mean as the neutral anchor). Returns scores aligned
to keys (NaN where no video-native vector exists)."""
M = _vjepa_matrix(store, keys)
have = np.isfinite(M[:, 0])
def anchor(sc):
s = np.where(np.isfinite(sc) & have, sc, -np.inf)
top = np.argsort(-s)[:k]
top = top[np.isfinite(s[top])]
if len(top) == 0:
return None
a = M[top].mean(0)
return a / (np.linalg.norm(a) + 1e-8)
a_pos = anchor(np.asarray(seed_scores, float))
if a_pos is None:
return np.full(len(keys), np.nan)
if swap_seed_scores is not None:
a_neg = anchor(np.asarray(swap_seed_scores, float))
else:
a_neg = None
if a_neg is None:
a_neg = np.nanmean(M[have], 0)
a_neg = a_neg / (np.linalg.norm(a_neg) + 1e-8)
d = a_pos - a_neg
n = np.linalg.norm(d)
if n < 1e-6:
return np.full(len(keys), np.nan)
out = M @ (d / n)
out[~have] = np.nan
return out
def informativeness(scores_text, scores_swap):
"""1 - |rank correlation| between the channel's view of the query
and of its swap: ~0 means the channel cannot tell the directions
apart FOR THIS QUERY on THIS corpus. Measured in microseconds,
needs no truth."""
a = np.asarray(scores_text, float)
b = np.asarray(scores_swap, float)
fin = np.isfinite(a) & np.isfinite(b)
if fin.sum() < 8:
return 0.0
ra = np.argsort(np.argsort(a[fin]))
rb = np.argsort(np.argsort(b[fin]))
r = np.corrcoef(ra, rb)[0, 1]
if not np.isfinite(r):
return 0.0
return float(1.0 - abs(r))
def anchor_support(store, keys, seed_scores, k=16, trials=64):
"""Self-recognized no-match signal: how much more coherent is the
pseudo-positive set than random corpus draws, in video-native
space? z << 1 means the text channels found no distinctive
neighborhood — the queried thing plausibly does not happen here."""
rng = np.random.default_rng(0)
M = _vjepa_matrix(store, keys)
have = np.where(np.isfinite(M[:, 0]))[0]
s = np.where(np.isfinite(np.asarray(seed_scores, float)),
seed_scores, -np.inf)
top = np.argsort(-s)[:k]
top = top[np.isfinite(np.asarray(s)[top])]
top = [t for t in top if np.isfinite(M[t, 0])]
if len(top) < 4 or len(have) < 4 * k:
return None
def coh(rows):
X = M[rows]
g = X @ X.T
n = len(rows)
return float((g.sum() - n) / max(1, n * n - n))
obs = coh(np.asarray(top))
null = np.array([coh(rng.choice(have, size=len(top),
replace=False))
for _ in range(trials)])
return float((obs - null.mean()) / (null.std() + 1e-9))