FastEmbed - Fast, light, accurate library built for retrieval embedding generation.
The library provides the FlagEmbedding struct to interface with the Flag embedding models.
use fastembed::{FlagEmbedding, InitOptions, EmbeddingModel, EmbeddingBase};
# fn model_demo() -> anyhow::Result<()> {
let model: FlagEmbedding = FlagEmbedding::try_new(Default::default())?;
dbg!(FlagEmbedding::list_supported_models());
let model: FlagEmbedding = FlagEmbedding::try_new(InitOptions {
model_name: EmbeddingModel::BGEBaseEN,
show_download_message: false,
..Default::default()
})?;
# Ok(())
# }
Find more info about the available options in the InitOptions documentation.
Embeddings generation
# use fastembed::{FlagEmbedding, InitOptions, EmbeddingModel, EmbeddingBase};
# fn embedding_demo() -> anyhow::Result<()> {
# let model: FlagEmbedding = FlagEmbedding::try_new(Default::default())?;
let documents = vec![
"passage: Hello, World!",
"query: Hello, World!",
"passage: This is an example passage.",
"fastembed-rs is licensed under MIT"
];
let embeddings = model.embed(documents, None)?;
println!("Embeddings length: {}", embeddings.len()); # Ok(())
# }
Generate query and passage embeddings
# use fastembed::{FlagEmbedding, InitOptions, EmbeddingModel, EmbeddingBase};
# fn query_passage_demo() -> anyhow::Result<()> {
# let model: FlagEmbedding = FlagEmbedding::try_new(Default::default())?;
let passages = vec![
"This is the first passage. It contains provides more context for retrieval.",
"Here's the second passage, which is longer than the first one. It includes additional information.",
"And this is the third passage, the longest of all. It contains several sentences and is meant for more extensive testing."
];
let embeddings = model.passage_embed(passages, Some(1))?;
println!("Passage embeddings length: {}", embeddings.len());
let query = "What is the answer to this generic question?";
let query_embedding = model.query_embed(query)?;
println!("Query embedding dimension: {}", query_embedding.len()); # Ok(())
# }