Live natural language search on canvas. Type a query, get attestation matches ranked by cosine similarity.
The SE glyph requires the embedding service. Enable it in am.toml:
[embeddings]
enabled = true
path = "ats/embeddings/models/all-MiniLM-L6-v2/model.onnx"
name = "all-MiniLM-L6-v2"
The ONNX model file must exist at the configured path. See ats/embeddings/README.md for download instructions.
After enabling, restart the server (make dev). The glyph checks availability on spawn and shows an error state if the service is unreachable.
When embeddings have been clustered (via POST /api/embeddings/cluster), a dropdown appears to scope search to a single cluster.
The SE glyph feeds results into downstream glyphs:
| Composition | Effect |
|---|---|
| SE → py | Matched attestations passed as input to Python glyph |
| SE → prompt | Matched attestations injected into prompt template |
| SE → SE | Intersection — downstream shows only attestations matching both queries |
When SE₁ melds rightward to SE₂, SE₂ switches from standalone mode to intersection mode. Its own watcher is disabled; a compound watcher takes over that requires both SE₁'s and SE₂'s queries to pass their respective thresholds. SE₁ continues showing its own results independently.
On unmeld, SE₂'s standalone watcher is re-enabled and it reverts to its own query results.
See Glyph Melding: Semantic Query Composition for the full vision including chaining (SE→SE→SE) and union (SE↓SE).
| Composition | Effect |
|---|---|
| AX → SE | AX query results fed as context for semantic refinement |
| File | Role |
|---|---|
web/ts/components/glyph/semantic-glyph.ts | Glyph factory + result rendering |
ats/watcher/engine.go | Backend semantic matching engine |
server/embeddings_handlers.go | Embedding generation + search API |
ats/storage/embedding_store.go | sqlite-vec vector storage |