v0.6.9: Memories as first-class entities
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_memorynow URL-quotes the memory id.SlayerClient.query/sql/explain/query_df(and their_syncvariants) now accept the same input shapes asengine.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)