Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,17 +134,13 @@ jobs:
# run id. Nothing checked any of this: provenance_gate.py compares dims and
# the file size only.
#
# This job is RED on purpose, and stays red until the served bundle is
# re-promoted through pipeline/promote.py, re-exported by rebuild_all.py's
# export stage, re-stamped (scripts/stamp_assets.py) and then mirrored
# (scripts/sync_public.py), in that order [final#18]. On master the served
# bundle is the July v5 export (f32 blob a4918f09, meta 4c0e879f) and the
# only failure is that no assets/mtnn_lineage.json ties it to a promoted
# run. On forge/backend-hardening it is the 2dc6ad78 model, blob 09923d98
# (test top-5 retrieval 0.035 against 0.749 for the v5 blob), with
# hand-typed meta keys (composite 0.85, top1_790 0.55) as well [eval#0]. It is its own job,
# not a step above and not in `make ci`, so the offline build keeps meaning
# what it says while this one is red. Stdlib only, so no install step.
# Master serves the July v5 incumbent (f32 git blob a4918f09). The original
# promote.py run directory is not in this repo, so
# scripts/record_served_lineage.py wrote mtnn_lineage.json from those bytes
# (run july-v5-a4918f09). It refuses any other f32: a replacement model
# still has to go through pipeline/promote.py, rebuild_all.py --stage export,
# stamp_assets.py, then sync_public.py, in that order [final#18]. Its own
# job, not a step above and not in `make ci`. Stdlib only, so no install.
served-model:
runs-on: ubuntu-latest
steps:
Expand Down
2 changes: 1 addition & 1 deletion assets/archetype_assignments.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion assets/archetypes_time.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions assets/mtnn_arch.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"lineage": {
"run_id": "july-v5-a4918f09"
},
"built": "2026-07-25",
"model": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
"model_tag": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
Expand Down
6 changes: 6 additions & 0 deletions assets/mtnn_attr_pop.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
{
"lineage": {
"run_id": "pre-v5-48d-2026-07-11",
"stale": true,
"not_from_served_net": true,
"origin": "48-d checkpoint export built 2026-07-11 (checkpoint bytes 2262906); not the served 64-d v5 july-v5-a4918f09"
},
"built": "2026-07-11",
"checkpoint": {
"mtime": 1783736655,
Expand Down
6 changes: 6 additions & 0 deletions assets/mtnn_jacobian.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
{
"lineage": {
"run_id": "pre-v5-48d-2026-07-14",
"stale": true,
"not_from_served_net": true,
"origin": "48-d checkpoint export built 2026-07-14 (dEmb 48, checkpoint mtime 1784057599); not the served 64-d v5 july-v5-a4918f09"
},
"built": "2026-07-14",
"dEmb": 48,
"checkpoint": {
Expand Down
48 changes: 48 additions & 0 deletions assets/mtnn_lineage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"schema": 1,
"run_id": "july-v5-a4918f09",
"exported": "2026-07-25T00:00:00Z",
"model": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
"rows": 12966,
"dim": 64,
"embedding_f32_sha256": "2574ef581ac3d3ee0f793447c26c5c48b82ec309985d6afcf177ed08510458f4",
"f32_bytes": 3319296,
"keys_sha256": "d1b3d5cb7e37afcf726532d592c5cf4125221a4c811b859175b79f9a998da72e",
"embedding_npz_sha256": null,
"checkpoint_sha256": null,
"centroids_sha256": null,
"report_sha256": null,
"manifest_sha256": null,
"matrix": {
"rows": 12966,
"cols": null,
"keys_sha256": "d1b3d5cb7e37afcf726532d592c5cf4125221a4c811b859175b79f9a998da72e",
"columns_sha256": null,
"values_sha256": null
},
"metrics": {
"cqs": null,
"test_recall_at_10": 0.846,
"purity_at_20": 0.7834268306835064,
"archetype_top1_acc": 0.9701527070800555,
"position_top1_acc": null,
"transparent_14d_test_recall_at_10": null,
"continuity_spread": null
},
"promoted_at": null,
"forced": true,
"force_reason": "Adopted the July 2026 v5 incumbent already served on master (git blob a4918f09). The original promote.py run directory is not in this repo; lineage records the served bytes. Not a new promotion.",
"export_floors": {
"ok": false,
"failed": [
"test recall or the 14-d baseline recall is missing"
],
"waived_by_force": "Adopted the July 2026 v5 incumbent already served on master (git blob a4918f09). The original promote.py run directory is not in this repo; lineage records the served bytes. Not a new promotion."
},
"train_git_sha": null,
"adoption": {
"kind": "served-incumbent",
"git_blob_f32": "a4918f09dfbd04120ecad5556a0736f65fa0ef6d",
"note": "mtnn_jacobian.json / mtnn_attr_pop.json are 48-d Jul 11\u201314 exports, marked not_from_served_net, not this run. A future promote+export replaces them from the served net."
}
}
2 changes: 1 addition & 1 deletion assets/mtnn_map.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions assets/mtnn_meta.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"built": "2026-07-25",
"model": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
"run_id": "july-v5-a4918f09",
"dim": 64,
"rows": 12966,
"method": "L2-normalized MTNN v5 embedding; index-aligned with vectors.json and skills.json. Daily puzzles score in this embedding space.",
"f32": "assets/mtnn_embeddings.f32?v=2574ef58",
"centroids": [
[
0.11140838265419006,
Expand Down
14 changes: 10 additions & 4 deletions assets/network-viz.js
Original file line number Diff line number Diff line change
Expand Up @@ -3376,7 +3376,7 @@ function buildFlowSvg(host) {
diagram silently keeps its legacy input-magnitude weights. */
function loadJacobian() {
return Promise.all([
fetch('assets/mtnn_jacobian.json?v=229c6b3d').then(function (r) {
fetch('assets/mtnn_jacobian.json?v=63363868').then(function (r) {
if (!r.ok) throw new Error('no jacobian meta');
return r.json();
}),
Expand All @@ -3386,6 +3386,9 @@ function buildFlowSvg(host) {
})
]).then(function (parts) {
var meta = parts[0];
if (meta.lineage && (meta.lineage.stale || meta.lineage.not_from_served_net)) {
throw new Error('jacobian not from served net (stale 48-d export)');
}
var data = new Float32Array(parts[1]);
var shape = (meta.perRowLayout && meta.perRowLayout.shape) || [];
if (data.length !== shape[0] * shape[1] * shape[2]) {
Expand Down Expand Up @@ -3436,7 +3439,7 @@ function buildFlowSvg(host) {
archetype up" is a claim about the SHIPPED net. */
function loadAttribution() {
return Promise.all([
fetch('assets/mtnn_attr_pop.json?v=ee83d0db').then(function (r) {
fetch('assets/mtnn_attr_pop.json?v=c084e4e1').then(function (r) {
if (!r.ok) throw new Error('no attribution meta');
return r.json();
}),
Expand All @@ -3446,6 +3449,9 @@ function buildFlowSvg(host) {
})
]).then(function (parts) {
var meta = parts[0];
if (meta.lineage && (meta.lineage.stale || meta.lineage.not_from_served_net)) {
throw new Error('attribution not from served net (stale 48-d export)');
}
var buf = parts[1];
var layout = meta.topkLayout || {};
var shape = layout.shape || [];
Expand Down Expand Up @@ -3528,8 +3534,8 @@ function buildFlowSvg(host) {
// page — flow, explorer, map — over one stale optional dataset.
Promise.all([
fetch('assets/vectors.json?v=90b2879d').then(function (r) { return r.json(); }),
fetch('assets/mtnn_arch.json?v=d5b8ac11').then(function (r) { return r.json(); }),
fetch('assets/mtnn_map.json?v=5f589b3b').then(function (r) { return r.json(); }),
fetch('assets/mtnn_arch.json?v=32dbb20c').then(function (r) { return r.json(); }),
fetch('assets/mtnn_map.json?v=d9d2f55c').then(function (r) { return r.json(); }),
fetch('assets/mtnn_heads.f32?v=9b3f7454').then(function (r) {
if (!r.ok) throw new Error('heads');
return r.arrayBuffer();
Expand Down
2 changes: 1 addition & 1 deletion assets/past-modern-game.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
_liteP=(async ()=>{
const idx=await fetchJSON('assets/scoring_lite_index.json?v=56');
// freshness canary: warn (never block) if the lite core lags the full export
fetch('assets/mtnn_meta.json?v=731fab3d').then(r=>r.ok?r.json():null).then(m=>{
fetch('assets/mtnn_meta.json?v=a87f2861').then(r=>r.ok?r.json():null).then(m=>{
if(m&&m.built&&idx.built&&m.built!==idx.built)
console.warn('scoring_lite stale: built '+idx.built+' vs mtnn '+m.built+' — rerun pipeline/build_scoring_lite.py');
}).catch(()=>{});
Expand Down
2 changes: 1 addition & 1 deletion assets/players-skills.js
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@
fetch('assets/honors.json?v=55813196').then(function(r){return r.ok?r.json():null;}).then(function(ho){ HONORS=ho||false; if (HONORS && current.slug) renderProfile(); }).catch(function(){HONORS=false;});
fetch('assets/pedigree.json?v=56228873').then(function(r){return r.ok?r.json():null;}).then(function(ped){ PEDIGREE=ped||false; if (PEDIGREE) addDraftBoardModes(); }).catch(function(){PEDIGREE=false;});
fetch('assets/skills_wide.json?v=f8a5cf7f').then(function(r){return r.ok?r.json():null;}).then(function(w){ WIDE=w||false; if (WIDE) { addWideBoardModes(); if (current.slug) renderProfile(); } }).catch(function(){WIDE=false;});
fetch('assets/archetype_assignments.json?v=bde7f5f0').then(function(r){return r.ok?r.json():null;}).then(function(aa){ ARCH_ASSIGN=aa||false; if (ARCH_ASSIGN && current.slug) renderProfile(); }).catch(function(){ARCH_ASSIGN=false;});
fetch('assets/archetype_assignments.json?v=4118981a').then(function(r){return r.ok?r.json():null;}).then(function(aa){ ARCH_ASSIGN=aa||false; if (ARCH_ASSIGN && current.slug) renderProfile(); }).catch(function(){ARCH_ASSIGN=false;});
fetch('assets/season_norms.json?v=bcd38ecb').then(function(r){return r.ok?r.json():null;}).then(function(sn){ SEASON_NORMS=sn||null; if (SEASON_NORMS && current.slug) renderProfile(); }).catch(function(){SEASON_NORMS=null;});
fetch('assets/next_profile_eval.json?v=5de3c225').then(function(r){return r.ok?r.json():null;}).then(function(ne){ NEXT_EVAL=ne||false; if (NEXT_EVAL && current.slug) renderProfile(); }).catch(function(){NEXT_EVAL=false;});
if (window.VHMtnn && window.VHMtnn.load) { window.VHMtnn.load(function (ok) { MTNN_READY = !!ok; if (MTNN_READY && current.slug) renderProfile(); }); } else { MTNN_READY=false; }
Expand Down
2 changes: 1 addition & 1 deletion assets/projections.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion assets/scoring_lite_index.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion assets/trajectories.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion methods.html
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ <h2>Attribution and limits</h2>
<script>if('serviceWorker' in navigator){window.addEventListener('load',()=>{navigator.serviceWorker.register('/sw.js').catch(()=>{})})}</script>

<script src="assets/mtnn.js?v=81d491f8"></script>
<script src="assets/network-viz.js?v=7819b341"></script>
<script src="assets/network-viz.js?v=24672911"></script>
<script src="assets/site-facts.js?v=cbb639f4" defer></script>
<script>
(() => {
Expand Down
55 changes: 52 additions & 3 deletions pipeline/served_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,13 @@
sha of the served row order, and the metrics copied
from the promoted manifest
and every JSON sidecar exported from the same bundle (SIDECARS) records the
run_id it came from under "lineage". problems() is the whole check;
scripts/check_served_model.py runs it on assets/ and public/assets/.
run_id it came from under "lineage", unless it is marked stale /
not_from_served_net (the 48-d jacobian and attr_pop still served from
2026-07-11/14). problems() is the whole check; scripts/check_served_model.py
runs it on assets/ and public/assets/. On master, scripts/record_served_lineage.py
wrote that lineage for the July v5 incumbent (run july-v5-a4918f09) from the
served bytes. A forced adoption without a promoted checkpoint is pinned to
INCUMBENT_F32_SHA256.

Stdlib only, so the CI job that runs it needs no install.
"""
Expand All @@ -48,6 +53,13 @@
VECTORS = "vectors.json"
LINEAGE_SCHEMA = 1

# git rev-parse HEAD:assets/mtnn_embeddings.f32 on origin/master (a4918f09).
# Forced adoption (record_served_lineage.py) is pinned to these bytes so a
# hand-written forced lineage cannot bless a different f32. promote.py --force
# of a real bundle still carries checkpoint_sha256 and is not this path.
INCUMBENT_F32_SHA256 = "2574ef581ac3d3ee0f793447c26c5c48b82ec309985d6afcf177ed08510458f4"
INCUMBENT_RUN_ID = "july-v5-a4918f09"

# Metrics the promoted manifest carries (copied from the training report by
# promote.py). The meta and the lineage file both copy them from there.
METRIC_KEYS = (
Expand Down Expand Up @@ -141,6 +153,35 @@ def f32_url(sha256: str) -> str:
return f"assets/{F32}?v={sha256[:8]}"


def sidecar_not_from_served_net(lineage: Mapping[str, Any] | None) -> bool:
"""True when a sidecar explicitly refuses to describe the served embedding."""
if not isinstance(lineage, Mapping):
return False
return bool(lineage.get("stale") or lineage.get("not_from_served_net"))


def forced_adoption_pin_problem(lineage: Mapping[str, Any]) -> str | None:
"""Forced adoption without a promoted checkpoint is only valid for the July v5 f32.

promote.py --force of a real bundle writes checkpoint_sha256 and is not
pinned here (tests/test_e2e_smoke.py). A hand-written forced lineage, or
adoption.kind == served-incumbent, must name INCUMBENT_F32_SHA256.
"""
adoption = lineage.get("adoption") if isinstance(lineage.get("adoption"), dict) else {}
is_adoption = adoption.get("kind") == "served-incumbent" or (
bool(lineage.get("forced")) and not lineage.get("checkpoint_sha256")
)
if not is_adoption:
return None
sha = lineage.get("embedding_f32_sha256")
if sha != INCUMBENT_F32_SHA256:
return (
f"{LINEAGE}: forced adoption is pinned to the July v5 incumbent "
f"sha256 {INCUMBENT_F32_SHA256[:12]}, not {str(sha)[:12]}"
)
return None


def _load(path: Path) -> tuple[Any, str | None]:
if not path.exists():
return None, f"{path.name}: missing"
Expand Down Expand Up @@ -231,6 +272,9 @@ def problems(assets: Path) -> list[str]:
return out
if lineage.get("schema") != LINEAGE_SCHEMA:
out.append(f"{LINEAGE}: schema {lineage.get('schema')!r}, expected {LINEAGE_SCHEMA}")
pin = forced_adoption_pin_problem(lineage)
if pin:
out.append(pin)
run_id = lineage.get("run_id")
if size is not None:
got = sha256_file(f32)
Expand Down Expand Up @@ -264,7 +308,12 @@ def problems(assets: Path) -> list[str]:
if err:
out.append(err)
continue
side = (doc.get("lineage") or {}).get("run_id") if isinstance(doc, dict) else None
side_lin = doc.get("lineage") if isinstance(doc, dict) else None
side = side_lin.get("run_id") if isinstance(side_lin, dict) else None
if sidecar_not_from_served_net(side_lin if isinstance(side_lin, dict) else None):
if side == run_id:
out.append(f"{name} is marked not-from-served-net but claims run {run_id!r}")
continue
if side != run_id:
out.append(f"{name} is from run {side!r}, the served embedding from {run_id!r}")
return out
2 changes: 1 addition & 1 deletion play.html
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ <h2 id="past-name" class="hd" style="margin:0 0 6px;font-size:clamp(24px,5vw,32p
<script src="assets/error-boundary.js?v=d0cf8ca0"></script>
<script src="assets/keyboard-a11y.js?v=39777a87"></script>
<script src="assets/site-nav.js?v=c12413c4" defer></script>
<script src="assets/pwa-install.js?v=b954d9d1"></script><script src="assets/audio.js?v=52cfa0d8"></script><script type="module" src="assets/timesfm-forecast.js?v=259274e6"></script><script src="assets/pixel-avatar.js?v=6216d2ba"></script><script src="assets/team-logo.js?v=864a7981"></script><script src="assets/viral-share.js?v=245316b8"></script><script src="assets/past-modern-game.js?v=46aa5254"></script><script src="/assets/twin-bands.js?v=d8e155bd"></script><script src="/assets/twin-explainer.js?v=758a0b6c"></script>
<script src="assets/pwa-install.js?v=b954d9d1"></script><script src="assets/audio.js?v=52cfa0d8"></script><script type="module" src="assets/timesfm-forecast.js?v=259274e6"></script><script src="assets/pixel-avatar.js?v=6216d2ba"></script><script src="assets/team-logo.js?v=864a7981"></script><script src="assets/viral-share.js?v=245316b8"></script><script src="assets/past-modern-game.js?v=dc2d6eac"></script><script src="/assets/twin-bands.js?v=d8e155bd"></script><script src="/assets/twin-explainer.js?v=758a0b6c"></script>
<script src="assets/map-lenses.js?v=656e8d30"></script>
<script src="assets/game-mechanics.js?v=e49ec57f"></script>
<script src="assets/play-engine.js?v=df5972e6"></script>
Expand Down
2 changes: 1 addition & 1 deletion players.html
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ <h3 class="hd" id="dossier-title" style="margin:0;font-size:18px">Dossier</h3>
<script src="assets/player-dossier.js?v=563c2a3f"></script>
<script src="assets/player-roster.js?v=263dd347"></script>
<script src="assets/players-directory.js?v=06c7dd33"></script>
<script src="assets/players-skills.js?v=62966d52"></script>
<script src="assets/players-skills.js?v=9f9cd695"></script>
<script src="assets/players-page.js?v=ba682099"></script>
<script src="assets/arc-projections.js?v=a9489bcb"></script>
<script>
Expand Down
2 changes: 1 addition & 1 deletion public/assets/archetype_assignments.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/archetypes_time.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions public/assets/mtnn_arch.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"lineage": {
"run_id": "july-v5-a4918f09"
},
"built": "2026-07-25",
"model": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
"model_tag": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
Expand Down
6 changes: 6 additions & 0 deletions public/assets/mtnn_attr_pop.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
{
"lineage": {
"run_id": "pre-v5-48d-2026-07-11",
"stale": true,
"not_from_served_net": true,
"origin": "48-d checkpoint export built 2026-07-11 (checkpoint bytes 2262906); not the served 64-d v5 july-v5-a4918f09"
},
"built": "2026-07-11",
"checkpoint": {
"mtime": 1783736655,
Expand Down
6 changes: 6 additions & 0 deletions public/assets/mtnn_jacobian.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
{
"lineage": {
"run_id": "pre-v5-48d-2026-07-14",
"stale": true,
"not_from_served_net": true,
"origin": "48-d checkpoint export built 2026-07-14 (dEmb 48, checkpoint mtime 1784057599); not the served 64-d v5 july-v5-a4918f09"
},
"built": "2026-07-14",
"dEmb": 48,
"checkpoint": {
Expand Down
48 changes: 48 additions & 0 deletions public/assets/mtnn_lineage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"schema": 1,
"run_id": "july-v5-a4918f09",
"exported": "2026-07-25T00:00:00Z",
"model": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
"rows": 12966,
"dim": 64,
"embedding_f32_sha256": "2574ef581ac3d3ee0f793447c26c5c48b82ec309985d6afcf177ed08510458f4",
"f32_bytes": 3319296,
"keys_sha256": "d1b3d5cb7e37afcf726532d592c5cf4125221a4c811b859175b79f9a998da72e",
"embedding_npz_sha256": null,
"checkpoint_sha256": null,
"centroids_sha256": null,
"report_sha256": null,
"manifest_sha256": null,
"matrix": {
"rows": 12966,
"cols": null,
"keys_sha256": "d1b3d5cb7e37afcf726532d592c5cf4125221a4c811b859175b79f9a998da72e",
"columns_sha256": null,
"values_sha256": null
},
"metrics": {
"cqs": null,
"test_recall_at_10": 0.846,
"purity_at_20": 0.7834268306835064,
"archetype_top1_acc": 0.9701527070800555,
"position_top1_acc": null,
"transparent_14d_test_recall_at_10": null,
"continuity_spread": null
},
"promoted_at": null,
"forced": true,
"force_reason": "Adopted the July 2026 v5 incumbent already served on master (git blob a4918f09). The original promote.py run directory is not in this repo; lineage records the served bytes. Not a new promotion.",
"export_floors": {
"ok": false,
"failed": [
"test recall or the 14-d baseline recall is missing"
],
"waived_by_force": "Adopted the July 2026 v5 incumbent already served on master (git blob a4918f09). The original promote.py run directory is not in this repo; lineage records the served bytes. Not a new promotion."
},
"train_git_sha": null,
"adoption": {
"kind": "served-incumbent",
"git_blob_f32": "a4918f09dfbd04120ecad5556a0736f65fa0ef6d",
"note": "mtnn_jacobian.json / mtnn_attr_pop.json are 48-d Jul 11\u201314 exports, marked not_from_served_net, not this run. A future promote+export replaces them from the served net."
}
}
2 changes: 1 addition & 1 deletion public/assets/mtnn_map.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions public/assets/mtnn_meta.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"built": "2026-07-25",
"model": "mtnn_v5_concat_b2_h160_t32_d64_mlp128_fus256",
"run_id": "july-v5-a4918f09",
"dim": 64,
"rows": 12966,
"method": "L2-normalized MTNN v5 embedding; index-aligned with vectors.json and skills.json. Daily puzzles score in this embedding space.",
"f32": "assets/mtnn_embeddings.f32?v=2574ef58",
"centroids": [
[
0.11140838265419006,
Expand Down
Loading
Loading