Skip to main content

EmbeddingsBuilder

Struct EmbeddingsBuilder 

Source
pub struct EmbeddingsBuilder<M, T>
where M: EmbeddingModel, T: Embed,
{ /* private fields */ }
Expand description

Builder for creating embeddings from one or more documents of type T. Note: T can be any type that implements the Embed trait.

Using the builder is preferred over using EmbeddingModel::embed_text directly as it will batch the documents in a single request to the model provider.

§Example

use rig_core::{
    client::{EmbeddingsClient, ProviderClient},
    embeddings::EmbeddingsBuilder,
    providers::openai,
};

// Create OpenAI client
let openai_client = openai::Client::from_env()?;

let model = openai_client.embedding_model(openai::TEXT_EMBEDDING_3_SMALL);

let embeddings = EmbeddingsBuilder::new(model.clone())
    .documents(vec![
        "1. *flurbo* (noun): A green alien that lives on cold planets.".to_string(),
        "2. *flurbo* (noun): A fictional digital currency.".to_string(),
        "1. *glarb-glarb* (noun): An ancient tool used by the ancestors of the inhabitants of planet Jiro to farm the land.".to_string(),
        "2. *glarb-glarb* (noun): A fictional creature from marshlands.".to_string(),
        "1. *linlingdong* (noun): A term used by inhabitants of the sombrero galaxy to describe humans.".to_string(),
        "2. *linlingdong* (noun): A rare instrument.".to_string(),
    ])?
    .build()
    .await?;

Implementations§

Source§

impl<M, T> EmbeddingsBuilder<M, T>
where M: EmbeddingModel, T: Embed,

Source

pub fn new(model: M) -> Self

Create a new embedding builder with the given embedding model

Source

pub fn document(self, document: T) -> Result<Self, EmbedError>

Add a document to be embedded to the builder. document must implement the Embed trait.

Source

pub fn documents( self, documents: impl IntoIterator<Item = T>, ) -> Result<Self, EmbedError>

Add multiple documents to be embedded to the builder. documents must be iterable with items that implement the Embed trait.

Source§

impl<M, T> EmbeddingsBuilder<M, T>
where M: EmbeddingModel, T: Embed + Send,

Source

pub async fn build(self) -> Result<Vec<(T, Vec<Embedding>)>, EmbeddingError>

Generate embeddings for all documents in the builder.

Returns (document, embeddings) pairs. A document may produce one or many embeddings depending on how its Embed implementation uses TextEmbedder.

§Order

Both levels are ordered, and callers may rely on it:

  • pairs come back in the order the documents were added — positional callers depend on this, for example InMemoryVectorStore::add_documents, which derives its document ids from this sequence; and
  • each document’s embeddings come back in the order its Embed impl produced the texts.

Neither depends on how the texts were batched or on which batch the provider answered first. Both have been silently violated before (rig#2344, rig#2345), so treat the guarantee as load-bearing rather than incidental.

The second bullet inherits one assumption this type cannot check: providers pair a batch’s embeddings to its texts positionally, so a provider that reordered within a single response would still be believed. That is the provider’s contract, not this builder’s.

§Errors

Alongside whatever the provider and the transport return, two cases originate here:

  • A document that produces no text fails the whole build rather than coming back with an empty list. This is easy to hit by accident: an empty collection in an #[embed] field embeds nothing, because Embed is implemented for Vec<T> element-wise.
  • A provider returning fewer embeddings than the texts it was sent fails rather than handing back a short list, since a short list cannot be told apart from a document that legitimately has fewer texts.

Both name the offending document.

Source

pub async fn build_with_usage( self, ) -> Result<(Vec<(T, Vec<Embedding>)>, Usage), EmbeddingError>

Generate embeddings for all documents in the builder and return accumulated token usage.

Returns (document, embeddings) pairs and the total token usage across all batches. A document may produce one or many embeddings depending on how its Embed implementation uses TextEmbedder.

Ordering is guaranteed at both levels, and the same two errors originate here; both are described on Self::build.

Auto Trait Implementations§

§

impl<M, T> Freeze for EmbeddingsBuilder<M, T>
where M: Freeze,

§

impl<M, T> RefUnwindSafe for EmbeddingsBuilder<M, T>

§

impl<M, T> Send for EmbeddingsBuilder<M, T>
where T: Send,

§

impl<M, T> Sync for EmbeddingsBuilder<M, T>
where T: Sync,

§

impl<M, T> Unpin for EmbeddingsBuilder<M, T>
where M: Unpin, T: Unpin,

§

impl<M, T> UnsafeUnpin for EmbeddingsBuilder<M, T>
where M: UnsafeUnpin,

§

impl<M, T> UnwindSafe for EmbeddingsBuilder<M, T>
where M: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WasmCompatSend for T
where T: Send,

Source§

impl<T> WasmCompatSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more