embed-key 0.1.0

Deterministic cache key for an embedding request: hash text + mix in provider, model, and dimensionality. So a cache survives model upgrades without false hits. Zero deps.
Documentation
use embed_key::key;

#[test]
fn returns_64_hex() {
    let k = key("openai", "text-embedding-3-large", 3072, "hello");
    assert_eq!(k.len(), 64);
    assert!(k.chars().all(|c| c.is_ascii_hexdigit()));
}

#[test]
fn text_change_changes_key() {
    let a = key("openai", "m", 1, "a");
    let b = key("openai", "m", 1, "b");
    assert_ne!(a, b);
}

#[test]
fn provider_change_changes_key() {
    let a = key("openai", "m", 1, "x");
    let b = key("anthropic", "m", 1, "x");
    assert_ne!(a, b);
}

#[test]
fn model_change_changes_key() {
    let a = key("p", "v1", 1, "x");
    let b = key("p", "v2", 1, "x");
    assert_ne!(a, b);
}

#[test]
fn dim_change_changes_key() {
    let a = key("p", "m", 768, "x");
    let b = key("p", "m", 1536, "x");
    assert_ne!(a, b);
}

#[test]
fn identical_inputs_identical_keys() {
    let a = key("p", "m", 1, "x");
    let b = key("p", "m", 1, "x");
    assert_eq!(a, b);
}