Goal
Remove the split between the crate's primary Encoder / EncodedOutput interface and the separate EmbeddingRateEncoder::forward(&EncoderState) API before 1.0.
The embedding encoder currently introduces its own state and execution vocabulary, which makes the public surface less coherent and increases adapter complexity.
Scope
- Decide whether
EmbeddingRateEncoder should implement Encoder, a new explicit stateful-encoder trait, or move into a separate optional module/crate.
- Replace panic-only construction with the crate's standard fallible constructor conventions.
- Define state ownership and reset behavior consistently.
- Validate input/state length mismatches through typed errors.
- Preserve serialization support and migration guidance.
- Update prelude exports and examples.
Design constraints
- Do not weaken the simple
Encoder API merely to accommodate one specialized encoder.
- Avoid embedding-model or LLM-specific dependencies and terminology.
- Keep the implementation domain-agnostic.
- Maintain the Tier 2 encoding boundary.
Acceptance criteria
Relationships
🤖 Authored with ChatGPT: GPT-5.6 (Medium)
Goal
Remove the split between the crate's primary
Encoder/EncodedOutputinterface and the separateEmbeddingRateEncoder::forward(&EncoderState)API before 1.0.The embedding encoder currently introduces its own state and execution vocabulary, which makes the public surface less coherent and increases adapter complexity.
Scope
EmbeddingRateEncodershould implementEncoder, a new explicit stateful-encoder trait, or move into a separate optional module/crate.Design constraints
EncoderAPI merely to accommodate one specialized encoder.Acceptance criteria
Relationships
1.0.0API freeze.🤖 Authored with ChatGPT: GPT-5.6 (Medium)