cognis-rag 0.3.1

RAG primitives for Cognis: embeddings, vector stores (in-memory, FAISS, Chroma, Qdrant, Pinecone, Weaviate), retrievers, text splitters, document loaders, and incremental indexing pipelines.
Documentation
# cognis-rag

Retrieval-Augmented Generation (RAG) primitives for Cognis v2, including embeddings, vector stores, and document processing.

## Purpose
`cognis-rag` provides the building blocks for creating RAG pipelines. It includes tools for loading documents from various formats, splitting them into manageable chunks, generating vector embeddings, and storing/retrieving them from vector databases.

## Key Features
- **Document Loaders**: Support for Text, Markdown, JSON, CSV, PDF, HTML, and directory-based loading.
- **Text Splitters**: Smart splitting strategies including `RecursiveCharSplitter` and `MarkdownSplitter`.
- **Embeddings**: Interface for generating text embeddings with support for OpenAI, Ollama, and more.
- **Vector Stores**: Pluggable vector database support (Chroma, Qdrant, Pinecone, Weaviate) plus a fast `InMemoryVectorStore`.
- **Retrievers**: Advanced retrieval logic like `VectorRetriever`, `BM25Retriever`, and `EnsembleRetriever`.
- **Indexing Pipeline**: A streamlined way to load, split, embed, and store documents in one operation.

## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
cognis-rag = "0.1.0"
```

### Basic Example: Vector Search
```rust
use cognis_rag::prelude::*;

#[tokio::main]
async fn main() -> Result<()> {
    let store = InMemoryVectorStore::default();
    let embeddings = FakeEmbeddings::new(1536); // Replace with OpenAIEmbeddings etc.
    
    // Add documents
    let docs = vec![
        Document::new("Rust is a systems programming language."),
        Document::new("Python is great for data science."),
    ];
    store.add_documents(docs, &embeddings).await?;
    
    // Search
    let retriever = VectorRetriever::new(store, embeddings);
    let results = retriever.invoke("What is Rust?").await?;
    
    for doc in results {
        println!("Found: {}", doc.page_content);
    }
    Ok(())
}
```