エンジン

単一エンジン。ディレクトリをルートとし、プロセスにリンク。

Telys は AIエージェント向けの組み込みメモリ・検索エンジンです。エンジンが物理レイアウトを所有するため、nearest-neighbours-where-key-equals-x はディレクトリルックアップと連続ブロックの逐次スキャン一回に解決されます — プロセス内で、クエリ時に外部呼び出しは発生しません。

02 SDK サーフェス

パブリック API はファサードです。エンジンは名前付きコレクションを保持し、各コレクションは外部 id・メタデータ駆動のパーティションキー・フィルタ列、そして明示的な add / upsert / delete セマンティクスを持つフィルタ付きベクトルインデックスです。

create + ingest
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 に対して二つの物理行を保持しません。

query
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 で構築された単一の物理キーでパーティション分割します。

maintain + persist
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 はアトミックで、再オープン時にデータ・適用済みチューニング・埋め込み空間を復元します。

03 機能仕様
機能詳細
フィルタ付き検索パーティションキークエリはディレクトリルックアップと連続ブロックの逐次スキャン一回に解決されます — 正確パスでは 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 環境 — 生サンプルとスクリプト付き。ベンチマークページを参照。
04 アーキテクチャ

署名済みランタイム上の、薄い公開ファサード。

公開SDKにエンジン実装は含まれない。RuntimeHandleという単一の固定境界を介してランタイムと通信し、ランタイムはホットループをMojo SIMDカーネルで保持する——Pythonプロセス内のゼロPythonホットパスだ。

call path
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 scope
SDKファサード

telys — Apache-2.0

TelysおよびCollectionファサード、Eqとscope_key、EmbeddingProviderとTunerインターフェース、ランタイムローダー、そしてtelys CLI。リリースガードが、エンジンソースが公開wheelに含まれないことを保証する。

署名済みランタイム

telys login でインストール

一度のサインインで無償デバイスライセンスが発行され、署名済みランタイムが取得される。署名とライセンスはオフラインでも再検証される。ランタイムはパーティションインデックス、MVCC、コンパクション、IVFを保持し、実行に必須だ。

物理レイアウト

パーティションは連続配置

ディレクトリはパーティションキーをそのブロックにマップし、各パーティションの行は連続して格納される。スコープクエリは一度のシーケンシャルスキャンであり、キーを無視したインデックス上のスキャッタではない。

05 メモリモデル

時間がデータモデルだ。

ベクトルとメタデータのblobはエージェントメモリではない。メモリモデルはすべての事実に有効期間ウィンドウ、明示的な上書き連鎖、そしてワールドタイムの任意時点での既知状態を再構築するas_ofビューを与える。これはあるべき姿として提示される——指定された方向性であり、そのストレージ機構はすでに出荷済みだ。

有効期間ウィンドウ

事実は区間にわたって有効

メモリはワールドタイムの [valid_from, valid_to) ウィンドウを持つ。矛盾が生じると古いウィンドウが閉じられ、行は破棄されない——存在か不在かだけではエージェントには不十分だ。

上書き連鎖

暗黙の上書きなし

修正する事実は、置き換える事実を参照する。連鎖は明示的で再構築可能だ——エージェントが何を信じていたか、いつ信じなくなったかはクエリで取得できる。

as_of 再構築

時刻Tにおける既知状態

as_ofビューは、指定されたMVCCスナップショット下でワールドタイムTに有効だったメモリを正確に再構築する——事後でも再現・監査可能なリコールだ。

仕様は、仕様として明示する。

remember、recall、as_of はMEMORY-SEMANTICSドラフトで定義されている——これらは方向性であり、出荷済みAPIリファレンスではない。今日出荷済みの機構——バージョン管理された更新、上書き連鎖、トゥームストーン、MVCCスナップショット——に落とし込まれる。

仕組みを読む
0.1.0b4 で出荷済み
  • add / upsert — 既存のidは新しい可視バージョンになり、重複行にはならない
  • search / search_text — where= フィルター、explain プラン、target_recall フロア
  • delete — トゥームストーン: 読み取りから即座に隠蔽され、コンパクション時に削除
  • compact / build_ivf — セグメントメンテナンス; 過大パーティション向けのパーティション単位IVF
  • snapshot / save / stats — MVCC読み取りビュー、アトミックな永続保存、再オープン
  • MVCC supersession — すべての更新が前バージョンを上書き連鎖で置き換え、暗黙の上書きは発生しない