anchor-chain 0.4.2

A statically typed async framework for building LLM-based applications.
Documentation
use anchor_chain::{
    ChainBuilder, Document, OpenAIEmbeddingModel, OpenSearchClientBuilder, OpenSearchIndexer,
};
use std::env;

#[tokio::main]
async fn main() {
    let embedding_model = OpenAIEmbeddingModel::default();
    let open_search_indexer = OpenSearchIndexer::new(
        OpenSearchClientBuilder::new()
            .with_local_connection_without_cert_validation(
                "https://localhost:9200",
                &env::var("OPENSEARCH_USERNAME").expect("OPENSEARCH_USERNAME not set"),
                &env::var("OPENSEARCH_PASSWORD").expect("OPENSEARCH_PASSWORD not set"),
            )
            .build()
            .await
            .expect("Failed to create OpenSearchClient client"),
        embedding_model,
        "test_index",
        "embedding",
    );

    let chain = ChainBuilder::new().link(open_search_indexer).build();

    let docs = vec!["Hello, world!", "Goodbye, world!", "Hello, universe!"];
    let docs: Vec<Document> = docs
        .into_iter()
        .map(|doc| doc.to_string())
        .map(Document::from)
        .collect();

    let result = chain.process(docs).await;
    println!("Output: {:?}", result.expect("Failed to process chain"));
}