Skip to content

v0.6.9: Memories as first-class entities

Choose a tag to compare

@ZmeiGorynych ZmeiGorynych released this 20 May 10:08
· 313 commits to main since this release
efef83e

SLayer 0.6.9

Memories are now first-class entities. Memory IDs are strings instead of integers (you can pass your own, e.g. from a knowledge base; auto ids still work; same-id saves upsert). You can reference a memory anywhere an entity name is accepted - in another memory's linked_entities, in search(entities=...), etc. - using the form memory:<id>, and search ranks memories and other entities through the same machinery.

Minor changes

  • Stale entity references inside memories are cleaned up automatically when you delete a model, datasource, or memory.
  • search() now treats unresolved entity or example-query references as warnings instead of erroring.
  • SQLite memories tables from older databases are rebuilt with a TEXT primary key on first open.
  • SlayerClient.forget_memory now URL-quotes the memory id.
  • SlayerClient.query / sql / explain / query_df (and their _sync variants) now accept the same input shapes as engine.execute - a query, a dict, a list for multi-stage DAGs, or a model name; previously HTTP-mode crashed on list and string input.
  • Filters and ORDER BY on a renamed measure ({"formula": "col:agg", "name": "alias"}) now accept either the alias or the original colon form; colon-form filters are classified as HAVING.
  • The outermost rendered SELECT now projects exactly your declared dimensions, time dimensions, and measures in declared order; hidden hoists for window arguments, sub-aggregates, ORDER BY aggregates, and filter-extracted refs stay in CTEs.
  • Add integration tests for Clickhouse and MySQL (using Docker)