use graphrag_core::embeddings::{EmbeddingConfig, EmbeddingProvider, EmbeddingProviderType};
#[cfg(feature = "huggingface-hub")]
use graphrag_core::embeddings::huggingface::HuggingFaceEmbeddings;
#[cfg(feature = "ureq")]
use graphrag_core::embeddings::api_providers::HttpEmbeddingProvider;
#[tokio::main]
async fn main() -> graphrag_core::core::error::Result<()> {
println!("đ GraphRAG Core - Embedding Providers Demo\n");
let text = "GraphRAG combines knowledge graphs with retrieval-augmented generation.";
#[cfg(feature = "huggingface-hub")]
{
println!("đĻ Hugging Face Hub Provider");
println!(" Model: sentence-transformers/all-MiniLM-L6-v2");
let mut hf_embeddings = HuggingFaceEmbeddings::new(
"sentence-transformers/all-MiniLM-L6-v2",
None, );
if std::env::var("ENABLE_DOWNLOAD_TESTS").is_ok() {
match hf_embeddings.initialize().await {
Ok(_) => println!(" â
Model downloaded and initialized"),
Err(e) => println!(" â ī¸ Download skipped: {}", e),
}
match hf_embeddings.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ Embedding failed: {}", e),
}
} else {
println!(" âšī¸ Set ENABLE_DOWNLOAD_TESTS=1 to test downloads");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("đĩ OpenAI Provider");
println!(" Model: text-embedding-3-small");
if let Ok(api_key) = std::env::var("OPENAI_API_KEY") {
let openai =
HttpEmbeddingProvider::openai(api_key, "text-embedding-3-small".to_string());
match openai.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ API call failed: {}", e),
}
} else {
println!(" âšī¸ Set OPENAI_API_KEY to test OpenAI embeddings");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("đŖ Voyage AI Provider (Recommended by Anthropic)");
println!(" Model: voyage-3-large");
if let Ok(api_key) = std::env::var("VOYAGE_API_KEY") {
let voyage = HttpEmbeddingProvider::voyage_ai(api_key, "voyage-3-large".to_string());
match voyage.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ API call failed: {}", e),
}
} else {
println!(" âšī¸ Set VOYAGE_API_KEY to test Voyage AI embeddings");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("đĸ Cohere Provider");
println!(" Model: embed-english-v3.0");
if let Ok(api_key) = std::env::var("COHERE_API_KEY") {
let cohere = HttpEmbeddingProvider::cohere(api_key, "embed-english-v3.0".to_string());
match cohere.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ API call failed: {}", e),
}
} else {
println!(" âšī¸ Set COHERE_API_KEY to test Cohere embeddings");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("đ´ Jina AI Provider");
println!(" Model: jina-embeddings-v3");
if let Ok(api_key) = std::env::var("JINA_API_KEY") {
let jina = HttpEmbeddingProvider::jina_ai(api_key, "jina-embeddings-v3".to_string());
match jina.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ API call failed: {}", e),
}
} else {
println!(" âšī¸ Set JINA_API_KEY to test Jina AI embeddings");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("đ Mistral AI Provider");
println!(" Model: mistral-embed");
if let Ok(api_key) = std::env::var("MISTRAL_API_KEY") {
let mistral = HttpEmbeddingProvider::mistral(api_key, "mistral-embed".to_string());
match mistral.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ API call failed: {}", e),
}
} else {
println!(" âšī¸ Set MISTRAL_API_KEY to test Mistral AI embeddings");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("đĄ Together AI Provider");
println!(" Model: BAAI/bge-large-en-v1.5");
if let Ok(api_key) = std::env::var("TOGETHER_API_KEY") {
let together =
HttpEmbeddingProvider::together_ai(api_key, "BAAI/bge-large-en-v1.5".to_string());
match together.embed(text).await {
Ok(embedding) => {
println!(" â
Generated embedding: {} dimensions", embedding.len())
},
Err(e) => println!(" â ī¸ API call failed: {}", e),
}
} else {
println!(" âšī¸ Set TOGETHER_API_KEY to test Together AI embeddings");
}
println!();
}
#[cfg(feature = "ureq")]
{
println!("âī¸ Using EmbeddingConfig");
if let Ok(api_key) = std::env::var("OPENAI_API_KEY") {
let config = EmbeddingConfig {
provider: EmbeddingProviderType::OpenAI,
model: "text-embedding-3-small".to_string(),
api_key: Some(api_key),
cache_dir: None,
batch_size: 32,
};
match HttpEmbeddingProvider::from_config(&config) {
Ok(provider) => {
println!(" â
Provider created from config");
println!(" Provider: {}", provider.provider_name());
println!(" Dimensions: {}", provider.dimensions());
},
Err(e) => println!(" â ī¸ Config error: {}", e),
}
}
}
println!("\n⨠Demo complete!");
println!("\nđĄ Tips:");
println!(" - Hugging Face: Free, download models once");
println!(" - API providers: Require API keys, pay-per-use");
println!(" - See LLM_PROVIDERS.md for detailed comparison");
Ok(())
}