Skip to main content

Embedding Providers

Embedding providers generate vector embeddings from text. The odin-prompt-toolkit SDK uses an ONNX-based local inference provider by default, with support for custom providers.

Provider Interface

All providers implement the same interface:

trait EmbeddingProvider {
fn name(&self) -> &str;
fn model(&self) -> &str;
fn dimensions(&self) -> usize;
async fn generate_embedding(&self, text: &str) -> Result<EmbeddingResult>;
async fn close(&self) -> Result<()>;
}

This allows you to switch between providers without changing your signature generation code.

ONNX Provider (V1)

Best for: Local development, API-free deployment, cost-sensitive applications

  • Model: 0dinai/0din-jailbreak-embeddings-small (custom fine-tuned variant)
  • Dimensions: 1024
  • Cost: Free (local inference)
  • Setup: Model auto-downloads to ~/.cache/odin-prompt-toolkit/models/v1/
  • Latency: ~50-100ms (CPU inference, Apple M4 Pro)
  • Quality: Good multilingual performance, optimized for prompt similarity

Usage

use odin_prompt_toolkit::{sign_text, SignatureVersion};
use odin_prompt_toolkit::providers::{ModelCache, OnnxProvider};

let cache = ModelCache::new()?;
let provider = OnnxProvider::new(&cache, None, None, 0, 0).await?;

// Uses latest model (V1) by default
let result = sign_text("Your text here", &provider, SignatureVersion::Latest, None).await?;

Installation:

[dependencies]
odin-prompt-toolkit = { version = "0.1", features = ["onnx"] }

Custom Providers

You can implement your own embedding provider by implementing the EmbeddingProvider trait/interface:

use async_trait::async_trait;
use odin_prompt_toolkit::{EmbeddingProvider, EmbeddingResult};

struct MyProvider;

#[async_trait]
impl EmbeddingProvider for MyProvider {
fn name(&self) -> &str { "my-provider" }
fn model(&self) -> &str { "my-model" }
fn dimensions(&self) -> usize { 384 }

async fn generate_embedding(&self, text: &str) -> Result<EmbeddingResult> {
// Your embedding logic here
}

async fn close(&self) -> Result<()> { Ok(()) }
}

See Signature Versions for details on versioning and backward compatibility.

See Also

  • SusFactor Backend Selection — the SusFactorProvider trait follows the same abstraction pattern as EmbeddingProvider, applied to classifier backends.