एक engine, एक directory में rooted, आपके process से linked।
Telys — AI agents के लिए एक embedded memory और retrieval engine। चूँकि engine physical layout का स्वामी है, nearest-neighbours-where-key-equals-x एक directory lookup और एक contiguous block के sequential scan में resolve होता है — आपके process के भीतर, query के समय कोई external call नहीं।
Public API एक facade है: एक engine जो named collections रखता है — प्रत्येक एक filtered vector index, external ids, metadata-driven partition keys और filter columns, तथा स्पष्ट add / upsert / delete semantics के साथ।
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
Ingest स्पष्ट है। add किसी मौजूदा id पर exception उठाता है; upsert MVCC के अंतर्गत मौजूदा id को एक नया visible version देता है — engine कभी भी एक logical id के लिए दो physical rows नहीं रखता।
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)
हर query एक columnar where filter लेती है और उसे serve करने वाली physical strategy का नाम बताने वाला explain plan लौटा सकती है। target_recall वह recall floor निर्धारित करता है जिसे planner को मानना होगा; composite scopes scope_key द्वारा निर्मित एक single physical key पर partition करते हैं।
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
Maintenance surface का हिस्सा है। Deletes तुरंत tombstone होते हैं और compaction पर physically हटाए जाते हैं; IVF प्रति partition बनता है, केवल जहाँ partition exact path से बड़ा हो जाए; save atomic है, और reopening data, applied tuning, और embedding space को पुनर्स्थापित करता है।
| Capability | विवरण |
|---|---|
| फ़िल्टर्ड खोज | Partition-key queries एक directory lookup और एक contiguous block के sequential scan में resolve होती हैं — exact path पर recall 1.0 (D≤384; D=768 पर reduction-order ties में 0.999–0.9995, कोई genuine miss नहीं)। समान contiguous subset पर यह scan raw FAISS के बराबर है — जीत layout की है, kernel की नहीं। |
| persistence | WAL-backed writes, MVCC snapshots, sealed segments। save() atomically commit करता है; open_collection() data, applied tuning, और embedding space को पुनर्स्थापित करता है। |
| कालिक मॉडल | Versioned upserts: मौजूदा id को एक नया visible version मिलता है जो पुराने को supersede करता है — कोई duplicate row नहीं। Tombstones deleted rows को तुरंत छुपाते हैं; compaction उन्हें physically हटाता है। |
| embeddings | Embedding-agnostic। अपने vectors लाएँ, या EmbeddingProvider / CallableEmbedder attach करें। एक on-device bigram embedder शामिल है — lexical, in-process, कोई model download नहीं। |
| platforms | macOS arm64 · Linux x86_64 / arm64 · Windows WSL2 के अंतर्गत। |
| license | PyPI पर Apache-2.0 public SDK (pip install telys), साथ ही एक signed, licensed on-device runtime जो telys login द्वारा install होता है। Public Beta। |
| मापी गई latency | p50/p95 प्रति selectivity recall 1.0 पर रिपोर्ट किए गए, single-thread, in-process, एक disclosed M4 Max rig पर — raw samples और script सहित। benchmarks page देखें। |
एक हस्ताक्षरित रनटाइम पर पतला सार्वजनिक आवरण।
सार्वजनिक SDK में कोई इंजन कार्यान्वयन नहीं है। यह रनटाइम से एक स्थिर सीम — RuntimeHandle — के पार संवाद करता है, और रनटाइम अपने हॉट लूप Mojo SIMD कर्नेल में रखता है: आपकी Python प्रक्रिया के भीतर एक zero-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 facades, Eq और scope_key, EmbeddingProvider और Tuner इंटरफ़ेस, एक रनटाइम लोडर, और telys CLI। एक रिलीज़ गार्ड सुनिश्चित करता है कि कोई भी इंजन स्रोत सार्वजनिक व्हील में कभी न जाए।
telys login इसे इंस्टॉल करता है
एक साइन-इन एक निःशुल्क डिवाइस लाइसेंस प्रदान करता है और हस्ताक्षरित रनटाइम लाता है; हस्ताक्षर और लाइसेंस ऑफ़लाइन पुनः सत्यापित होते हैं। रनटाइम में पार्टीशन इंडेक्स, MVCC, कॉम्पैक्शन और IVF हैं — और निष्पादन के लिए यह अनिवार्य है।
पार्टीशन सन्निहित हैं
डायरेक्टरी एक पार्टीशन कुंजी को उसके ब्लॉक से मैप करती है; प्रत्येक पार्टीशन की पंक्तियाँ सन्निहित रूप से संग्रहीत हैं। एक स्कोप्ड क्वेरी एक अनुक्रमिक स्कैन है — किसी ऐसे इंडेक्स में बिखराव नहीं जो आपकी कुंजियों को अनदेखा करे।
समय ही डेटा मॉडल है।
एक वेक्टर और एक मेटाडेटा ब्लॉब एजेंट मेमोरी नहीं है। मेमोरी मॉडल प्रत्येक तथ्य को एक वैधता विंडो, एक स्पष्ट अधिक्रमण श्रृंखला, और एक 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 — प्रत्येक अपडेट अपने पूर्ववर्ती का अधिक्रमण करता है; कुछ भी मूक रूप से अधिलेखित नहीं होता