warm-rust 0.6.5

Local-first search engine and agent memory: fast approximate nearest-neighbor and BM25 full-text search, encrypted stores, provable deletion, built on vector-symbolic architectures.
Documentation
# smolagents

`writerslogic_warm_integrations.smolagents` provides `Tool` subclasses `RememberTool`, `RecallTool`, `ForgetTool` and `memory_tools()`.

Tested against `smolagents==1.26.0`, Python 3.12.

## Install

```sh
pip install "writerslogic-warm-integrations[smolagents]"
```

Needs a running `warm-server` whose `--input-dim` matches the embedder (default: 384).

## Use

```python
from smolagents import CodeAgent, InferenceClientModel
from writerslogic_warm_integrations.core import WarmConfig
from writerslogic_warm_integrations.smolagents import memory_tools

config = WarmConfig(url="http://127.0.0.1:8080", tenant_id="acme")
agent = CodeAgent(tools=memory_tools(config, user_id="alice"), model=InferenceClientModel())
```

The tools follow smolagents' `Tool` contract: class attributes `name`, `description`, `inputs` (`type` and `description` per input; optional inputs have `nullable: True`) and `output_type`, with `forward` taking exactly those arguments. `CodeAgent` calls them as Python functions (`remember(text=...)`), `ToolCallingAgent` through JSON tool calls. `user_id` scopes `recall` and `forget` to one user (service-side equality filter); `k` is clamped to `max_k` (default 20).

## Sync only

smolagents tools are synchronous (`forward`), so the adapter uses `WarmBackend`; the framework has no async tool path.

## Knobs

All on `WarmConfig`: `url`, `api_key`, `tenant_id`, `collection`, `embedder`, `text_queries`, `zero_trust_key`, `max_fetch`, `overfetch`; or pass a ready `backend=`. BM25 and title weight are native-engine options and not available over HTTP.

## Filters

No filter argument; `user_id` is a top-level equality filter evaluated by the service.

## Conformance

Run through real `CodeAgent` and `ToolCallingAgent` loops with a scripted `Model` subclass (smolagents' own `generate` contract), a real `warm-server`, and the framework's class-level validation (`validate_after_init`): `pytest tests/smolagents`.

## Limitations

- `Tool.to_dict()`/`save()`/`push_to_hub()` are not supported: smolagents requires serializable tools with literal `__init__` defaults, and these tools hold a live backend connection.
- The default `HashingEmbedder` is lexical; supply an `embedder` for semantic recall.