単一エンジン。ディレクトリをルートとし、プロセスにリンク。
Telys は AIエージェント向けの組み込みメモリ・検索エンジンです。エンジンが物理レイアウトを所有するため、nearest-neighbours-where-key-equals-x はディレクトリルックアップと連続ブロックの逐次スキャン一回に解決されます — プロセス内で、クエリ時に外部呼び出しは発生しません。
パブリック API はファサードです。エンジンは名前付きコレクションを保持し、各コレクションは外部 id・メタデータ駆動のパーティションキー・フィルタ列、そして明示的な add / upsert / delete セマンティクスを持つフィルタ付きベクトルインデックスです。
from telys import Telys, scope_key db = Telys("./memory") col = db.create_collection("docs", dim=768, partition_by="tenant_id", filter_columns=["lang"]) col.add(vectors, ids=ids, metadata=metadata) # new rows only — raises on an existing id col.upsert(vectors, ids=ids, metadata=metadata) # existing id → a new visible version
インジェストは明示的です。add は既存 id に対して例外を発生させ、upsert は既存 id に MVCC 下で新しい可視バージョンを付与します — エンジンは一つの論理 id に対して二つの物理行を保持しません。
hits = col.search(qvec, top_k=10, where={"tenant_id": "acme"}, explain=True) hits["explain"]["plan"] # "PartitionSliceExactF32" # composite scope → one physical partition key sk = scope_key("acme/shop", "payments", "python") res = symbols.search_text("refund pending after migration", top_k=40, where={"scope_key": sk}, explain=True, target_recall=0.98)
すべてのクエリはカラム型 where フィルタを受け取り、それを処理した物理戦略を示す explain プランを返せます。target_recall はプランナーが遵守すべき recall の下限を設定し、複合スコープは scope_key で構築された単一の物理キーでパーティション分割します。
col.delete(stale_ids) # tombstone — hidden from reads now, dropped at compact() col.compact() col.build_ivf(min_rows=20000, target_recall=0.98) # oversized partitions only snap = col.snapshot() # frozen MVCC read view col.save() # atomic — collection.json is written last, as the commit point col.stats() # partitions · external_ids · embedding_space
メンテナンスはサーフェスの一部です。削除は即座にトゥームストーンされ、コンパクション時に物理的に除去されます。IVF はパーティションごとに構築され、パーティションが正確パスを超えた場合にのみ適用されます。save はアトミックで、再オープン時にデータ・適用済みチューニング・埋め込み空間を復元します。
| 機能 | 詳細 |
|---|---|
| フィルタ付き検索 | パーティションキークエリはディレクトリルックアップと連続ブロックの逐次スキャン一回に解決されます — 正確パスでは recall 1.0(D≤384;D=768 では削減順序の同点により 0.999–0.9995、真の欠落はゼロ)。同一の連続サブセット上ではこのスキャンは生の FAISS と同等であり、優位性はレイアウトによるものでカーネルによるものではありません。キー外フィルタはスキャッタギャザーにフォールバックし、explain プランにその旨が示されます。 |
| 永続化 | WAL バックアップ書き込み、MVCC スナップショット、シールドセグメント。save() はアトミックにコミットし、open_collection() はデータ・適用済みチューニング・埋め込み空間を復元します。 |
| 時制モデル | バージョン付き upsert: 既存 id は旧バージョンを上書きする新しい可視バージョンを取得します — 重複行は生じません。トゥームストーンは削除行を即座に隠し、コンパクションが物理的に除去します。 |
| 埋め込み | 埋め込み非依存。独自ベクトルを持ち込むか、EmbeddingProvider / CallableEmbedder をアタッチできます。オンデバイスのバイグラム埋め込みが同梱 — 語彙的、プロセス内、モデルダウンロード不要。 |
| プラットフォーム | macOS arm64 · Linux x86_64 / arm64 · Windows (WSL2)。 |
| ライセンス | PyPI 上の Apache-2.0 パブリック SDK(pip install telys)に加え、telys login でインストールされる署名済みライセンスオンデバイスランタイム。パブリックベータ。 |
| 計測レイテンシ | p50/p95 をセレクティビティ別・recall 1.0 で報告。シングルスレッド、インプロセス、開示済み M4 Max 環境 — 生サンプルとスクリプト付き。ベンチマークページを参照。 |
署名済みランタイム上の、薄い公開ファサード。
公開SDKにエンジン実装は含まれない。RuntimeHandleという単一の固定境界を介してランタイムと通信し、ランタイムはホットループをMojo SIMDカーネルで保持する——Pythonプロセス内のゼロPythonホットパスだ。
Telys / Collection # public SDK facade — no engine code
└─ RuntimeHandle # the frozen SDK–engine seam
└─ signed runtime # hot loops in Mojo SIMD kernels — zero-Python hot path
├─ partition directory # key → contiguous block
└─ contiguous segments # one sequential scan per scopetelys — Apache-2.0
TelysおよびCollectionファサード、Eqとscope_key、EmbeddingProviderとTunerインターフェース、ランタイムローダー、そしてtelys CLI。リリースガードが、エンジンソースが公開wheelに含まれないことを保証する。
telys login でインストール
一度のサインインで無償デバイスライセンスが発行され、署名済みランタイムが取得される。署名とライセンスはオフラインでも再検証される。ランタイムはパーティションインデックス、MVCC、コンパクション、IVFを保持し、実行に必須だ。
パーティションは連続配置
ディレクトリはパーティションキーをそのブロックにマップし、各パーティションの行は連続して格納される。スコープクエリは一度のシーケンシャルスキャンであり、キーを無視したインデックス上のスキャッタではない。
時間がデータモデルだ。
ベクトルとメタデータのblobはエージェントメモリではない。メモリモデルはすべての事実に有効期間ウィンドウ、明示的な上書き連鎖、そしてワールドタイムの任意時点での既知状態を再構築するas_ofビューを与える。これはあるべき姿として提示される——指定された方向性であり、そのストレージ機構はすでに出荷済みだ。
事実は区間にわたって有効
メモリはワールドタイムの [valid_from, valid_to) ウィンドウを持つ。矛盾が生じると古いウィンドウが閉じられ、行は破棄されない——存在か不在かだけではエージェントには不十分だ。
暗黙の上書きなし
修正する事実は、置き換える事実を参照する。連鎖は明示的で再構築可能だ——エージェントが何を信じていたか、いつ信じなくなったかはクエリで取得できる。
時刻Tにおける既知状態
as_ofビューは、指定されたMVCCスナップショット下でワールドタイムTに有効だったメモリを正確に再構築する——事後でも再現・監査可能なリコールだ。
仕様は、仕様として明示する。
remember、recall、as_of はMEMORY-SEMANTICSドラフトで定義されている——これらは方向性であり、出荷済みAPIリファレンスではない。今日出荷済みの機構——バージョン管理された更新、上書き連鎖、トゥームストーン、MVCCスナップショット——に落とし込まれる。
仕組みを読む- add / upsert — 既存のidは新しい可視バージョンになり、重複行にはならない
- search / search_text — where= フィルター、explain プラン、target_recall フロア
- delete — トゥームストーン: 読み取りから即座に隠蔽され、コンパクション時に削除
- compact / build_ivf — セグメントメンテナンス; 過大パーティション向けのパーティション単位IVF
- snapshot / save / stats — MVCC読み取りビュー、アトミックな永続保存、再オープン
- MVCC supersession — すべての更新が前バージョンを上書き連鎖で置き換え、暗黙の上書きは発生しない