محرك واحد، جذره دليل، مرتبط بعمليتك.
Telys محرك ذاكرة واسترجاع مُضمَّن لوكلاء الذكاء الاصطناعي. لأن المحرك يمتلك التخطيط المادي، يُحلَّل nearest-neighbours-where-key-equals-x إلى بحث في الدليل ومسح تسلسلي لكتلة متصلة واحدة — داخل عمليتك، دون استدعاءات خارجية وقت الاستعلام.
الواجهة العامة واجهة تجريدية: محرك يحمل مجموعات مُسمَّاة، كل منها فهرس متجهي مُصفَّى بمعرفات خارجية، ومفاتيح تقسيم مدفوعة بالبيانات الوصفية وأعمدة تصفية، ودلالات صريحة للإضافة والإحلال والحذف.
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 يرفع على معرف موجود؛ upsert يمنح معرفاً موجوداً إصداراً مرئياً جديداً تحت MVCC — لا يحتفظ المحرك بصفين ماديين لمعرف منطقي واحد.
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 يضبط حد الاستدعاء الذي يجب أن يحترمه المخطط؛ النطاقات المركبة تُقسَّم على مفتاح مادي واحد مبني بـ 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 ذري، وإعادة الفتح تستعيد البيانات والضبط المُطبَّق وفضاء التضمين.
| القدرة | التفاصيل |
|---|---|
| بحث مُصفَّى | استعلامات nearest-neighbors-where-key-equals-x تُحلَّل إلى بحث في الدليل ومسح تسلسلي واحد لكتلة متصلة — recall 1.0 على المسار الدقيق (D≤384؛ D=768 يُعطي 0.999–0.9995 عند تعادلات ترتيب الاختزال، دون أي إغفال حقيقي). على مجموعة فرعية متصلة مطابقة يتعادل هذا المسح مع FAISS الخام، فالميزة في التخطيط لا في النواة. |
| الاستمرارية | كتابات مدعومة بـ WAL، ولقطات MVCC، ومقاطع مختومة. save() يُودع ذرياً؛ open_collection() يستعيد البيانات والضبط المُطبَّق وفضاء التضمين. |
| النموذج الزمني | إحلالات مُصدَرة: معرف موجود يحصل على إصدار مرئي جديد يُحلّ القديم — لا صف مكرر. علامات الحذف تُخفي الصفوف المحذوفة فوراً؛ الضغط يُزيلها مادياً. |
| التضمينات | مستقل عن التضمين. أحضر متجهاتك، أو أرفق EmbeddingProvider / CallableEmbedder. مُضمَّن مُضمِّن bigram على الجهاز — معجمي، داخل العملية، دون تنزيل نموذج. |
| المنصات | macOS arm64 · Linux x86_64 / arm64 · Windows تحت WSL2. |
| الترخيص | SDK عام بـ Apache-2.0 على PyPI (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. يتحقق حارس الإصدار من عدم شحن أي مصدر للمحرك في الحزمة العامة.
telys login يثبّته
تسجيل دخول واحد يُوفِّر ترخيص جهاز مجاني ويجلب وقت التشغيل الموقَّع؛ يُعاد التحقق من التوقيع والترخيص دون اتصال. يحتوي وقت التشغيل على فهرس التقسيم و MVCC والضغط و IVF — وهو شرط لازم للتنفيذ.
الأقسام متجاورة
يربط الدليل مفتاح القسم بكتلته؛ تُخزَّن صفوف كل قسم بشكل متجاور. الاستعلام المحدود النطاق هو مسح تسلسلي واحد — لا تشتيت عبر فهرس يتجاهل مفاتيحك.
الزمن هو نموذج البيانات.
متجه مع كتلة بيانات وصفية ليس ذاكرة وكيل. يمنح نموذج الذاكرة كل حقيقة نافذة صلاحية، وسلسلة إحلال صريحة، وعرض as_of يُعيد بناء ما كان معروفاً في لحظة من الزمن الفعلي. يُقدَّم هنا على حقيقته: الاتجاه المحدد، مع آلية التخزين الخاصة به قيد الشحن بالفعل.
الحقائق صالحة على فترات زمنية
تحمل الذاكرة نافذة [valid_from, valid_to) في الزمن الفعلي. التناقض يُغلق النافذة القديمة بدلاً من حذف الصف — الحضور أو الغياب لا يكفي لوكيل.
لا كتابة فوقية صامتة
الحقيقة المصحِّحة تشير إلى الحقيقة التي تحل محلها. السلسلة صريحة وقابلة لإعادة البناء: ما آمن به الوكيل ومتى توقف عن الإيمان به — كل ذلك استعلام.
ما كان معروفاً عند T
يُعيد عرض as_of بناء الذكريات الصالحة تحديداً عند الزمن الفعلي T ضمن لقطة MVCC محددة — استرجاع قابل للتكرار والتدقيق بعد الوقوع.
مواصفة، مُصنَّفة كمواصفة.
remember و recall و as_of مُعرَّفة في مسودة MEMORY-SEMANTICS — وهي الاتجاه، لا مرجع API مشحون. تنزل على آلية تُشحن اليوم: تحديثات مُصدَّرة، وإحلال، وعلامات حذف، ولقطات MVCC.
اقرأ آلية العمل- add / upsert — المعرّف الموجود يصبح إصداراً جديداً مرئياً، لا صفاً مكرراً
- search / search_text — فلاتر where=، وخطط explain، وحدود target_recall الدنيا
- delete — علامات حذف: مخفية عن القراءة فوراً، تُحذف عند الضغط
- compact / build_ivf — صيانة المقاطع؛ IVF لكل قسم للأقسام الكبيرة الحجم
- snapshot / save / stats — عروض قراءة MVCC، وحفظ دائم ذري، وإعادة فتح
- إحلال MVCC — كل تحديث يحل محل سابقه؛ لا شيء يُكتب فوقه بصمت