klieo-embed-common 3.12.1

Shared Embedder trait + non-ranking/fake impls for klieo memory backends.
Documentation
# klieo-embed-common

Shared Embedder trait + NonRankingEmbedder / FakeEmbedder for klieo memory backends.

Part of the [klieo](https://crates.io/crates/klieo) Rust agent framework.

## Features

- `Embedder` trait: single contract for all embedding providers used by klieo memory crates
- `NonRankingEmbedder` (every text to the same zero vector, so recall returns
  `k` facts in insertion order rather than by relevance) — the zero-infra
  default, ungated; and `FakeEmbedder` (deterministic per-text hashing,
  behind `test-utils`) for test harnesses that need cosine recall to behave
- Internal crate: consumed by `klieo-memory-sqlite` and `klieo-memory-qdrant`

## Usage

Most callers don't depend on this crate directly — `MemorySqlite::open(path)`
and `MemoryQdrant::connect(url)` already bake in `NonRankingEmbedder` for
zero-config use. Reach for `klieo-embed-common` only when you implement
the `Embedder` trait yourself or need `FakeEmbedder` for tests.

```toml
[dependencies]
klieo-embed-common = "3"
```

```rust,no_run
use klieo_embed_common::{NonRankingEmbedder, Embedder};
use std::sync::Arc;

let embedder: Arc<dyn Embedder> = Arc::new(NonRankingEmbedder);
```

Pass the resulting `Arc<dyn Embedder>` to any memory backend's custom
constructor — e.g. `MemorySqlite::new(path, embedder)` or
`MemoryQdrant::new(QdrantConfig::new(url), embedder)` — when the
default `NonRankingEmbedder` baked into `::open` / `::connect` isn't what
you want.

## Status

`3.x` — stable.
See [`docs/SEMVER.md`](https://github.com/mohrimic/klieo/blob/main/docs/SEMVER.md).

## License

MIT — see [`LICENSE`](https://github.com/mohrimic/klieo/blob/main/LICENSE).