RAG POC

2 Squirrels AI

Technology Stack

Framework LangChain
Vector DB ChromaDB
Vision OpenCLIP
LLM OpenAI GPT-4
Text Embeddings text-embedding-ada

Architecture Note: Multi-modal RAG system supporting both text and image embeddings for cross-modal retrieval and semantic understanding.

Multi-Modal Embedding Components

๐Ÿ“
Text Embeddings
OpenAI text-embedding-ada
๐Ÿ–ผ๏ธ
Image Embeddings
OpenCLIP ViT-B/32
๐Ÿ”—
Cross-Modal
Unified Vector Space
๐Ÿ—„๏ธ
Vector Store
ChromaDB Collections

Basic RAG Pipeline

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart LR
    subgraph Input["๐Ÿ“ฅ Input"]
        Q["๐Ÿ” User Query"]
    end

    subgraph Embed["๐Ÿ”ข Embedding"]
        QE["๐Ÿ”ข Query Embedding
text-embedding-ada"] end subgraph Retrieve["๐Ÿ“š Retrieval"] VS[("๐Ÿ—„๏ธ ChromaDB")] SS["๐ŸŽฏ Similarity Search
top_k=5"] RD["๐Ÿ“„ Retrieved Docs"] end subgraph Augment["๐Ÿ“ Augmentation"] CT["๐Ÿ“‹ Context Template"] PR["๐Ÿ“ Prompt Builder"] end subgraph Generate["๐Ÿง  Generation"] LLM["๐Ÿค– GPT-4"] RS["โœ… Response"] end Q --> QE QE --> VS VS --> SS SS --> RD RD --> CT CT --> PR Q --> PR PR --> LLM LLM --> RS

Multi-Modal Document Ingestion

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph Sources["๐Ÿ“ฅ Data Sources"]
        PDF["๐Ÿ“„ PDF Documents"]
        IMG["๐Ÿ–ผ๏ธ Images"]
        TXT["๐Ÿ“ Text Files"]
    end

    subgraph Parse["โš™๏ธ Parsing"]
        PL["๐Ÿ“„ PDF Loader"]
        IL["๐Ÿ–ผ๏ธ Image Loader"]
        TL["๐Ÿ“ Text Loader"]
    end

    subgraph Chunk["โœ‚๏ธ Chunking"]
        TS["โœ‚๏ธ Text Splitter
RecursiveCharacter"] IC["๐Ÿ–ผ๏ธ Image Chunks
Caption + Embed"] end subgraph Embed["๐Ÿ”ข Embedding"] TE["๐Ÿ“ Text Embeddings
OpenAI"] IE["๐Ÿ–ผ๏ธ Image Embeddings
OpenCLIP"] end subgraph Store["๐Ÿ’พ Storage"] TC[("๐Ÿ“ Text Collection")] IC2[("๐Ÿ–ผ๏ธ Image Collection")] META[("๐Ÿ“‹ Metadata")] end PDF --> PL IMG --> IL TXT --> TL PL --> TS IL --> IC TL --> TS TS --> TE IC --> IE TE --> TC IE --> IC2 TE --> META IE --> META

Text Vectorization Pipeline

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart LR
    subgraph Doc["๐Ÿ“„ Document"]
        RAW["๐Ÿ“œ Raw Text"]
    end

    subgraph Preprocess["โš™๏ธ Preprocessing"]
        CLN["๐Ÿงน Clean Text"]
        NRM["๐Ÿ“ Normalize"]
    end

    subgraph Split["โœ‚๏ธ Splitting"]
        RC["โœ‚๏ธ RecursiveCharacter
chunk=1000, overlap=200"] CH["๐Ÿ“ฆ Chunks"] end subgraph Embed["๐Ÿ”ข Embedding"] API["๐Ÿ”Œ OpenAI API"] VEC["๐Ÿ“Š 1536-dim Vectors"] end subgraph Store["๐Ÿ’พ ChromaDB"] COL[("๐Ÿ“ฆ Collection")] IDX["๐Ÿ” HNSW Index"] end RAW --> CLN CLN --> NRM NRM --> RC RC --> CH CH --> API API --> VEC VEC --> COL COL --> IDX

Cross-Modal Retrieval

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph Input["๐Ÿ“ฅ Query Input"]
        TQ["๐Ÿ“ Text Query"]
        IQ["๐Ÿ–ผ๏ธ Image Query"]
    end

    subgraph Embed["๐Ÿ”ข Query Embedding"]
        TE["๐Ÿ“ Text Embedding
OpenAI"] IE["๐Ÿ–ผ๏ธ Image Embedding
OpenCLIP"] end subgraph Project["๐Ÿ”— Projection"] UP["๐Ÿ“ Unified Space
CLIP Alignment"] end subgraph Search["๐Ÿ” Parallel Search"] ST["๐Ÿ“ Search Text Collection"] SI["๐Ÿ–ผ๏ธ Search Image Collection"] end subgraph Merge["๐Ÿ”— Result Fusion"] RR["๐ŸŽฏ Reciprocal Rank Fusion"] FD["๐Ÿ“Š Fused Documents"] end subgraph Output["๐Ÿ“ค Output"] RS["โœ… Multi-Modal Results"] end TQ --> TE IQ --> IE TE --> UP IE --> UP UP --> ST UP --> SI ST --> RR SI --> RR RR --> FD FD --> RS

Retrieval with Reranking

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart LR
    subgraph Query["๐Ÿ“ฅ Query"]
        Q["๐Ÿ” User Question"]
    end

    subgraph Initial["๐Ÿ“š Initial Retrieval"]
        VS[("๐Ÿ—„๏ธ ChromaDB")]
        IR["๐ŸŽฏ top_k=20
Candidates"] end subgraph Rerank["๐Ÿ”„ Reranking"] CR["๐Ÿ” Cross-Encoder
Relevance Score"] TP["๐Ÿ“Š Rerank Scores"] SR["๐Ÿ† Top N Results"] end subgraph Generate["๐Ÿง  Generation"] CTX["๐Ÿ“ Context Window"] LLM["๐Ÿค– GPT-4"] end subgraph Output["๐Ÿ“ค Output"] ANS["โœ… Answer"] end Q --> VS VS --> IR IR --> CR Q --> CR CR --> TP TP --> SR SR --> CTX CTX --> LLM LLM --> ANS

Complete Multi-Modal RAG Architecture

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph User["๐Ÿ‘ค User Interface"]
        UI["๐Ÿ’ป Chat Interface"]
    end

    subgraph Query["๐Ÿ” Query Processing"]
        QA["๐Ÿ“ Query Analysis"]
        QE["๐Ÿ”ข Query Embedding"]
    end

    subgraph Retrieval["๐Ÿ“š Retrieval Layer"]
        direction TB
        TC[("๐Ÿ“ Text
Collection")] IC[("๐Ÿ–ผ๏ธ Image
Collection")] HY["๐Ÿ”— Hybrid Search"] end subgraph Embeddings["๐Ÿ”ข Embedding Models"] OAI["๐Ÿ“ OpenAI
text-embedding-ada"] CLIP["๐Ÿ–ผ๏ธ OpenCLIP
ViT-B/32"] end subgraph Generation["๐Ÿง  Generation"] CTX["๐Ÿ“‹ Context Builder"] GPT["๐Ÿค– GPT-4"] end subgraph Output["๐Ÿ“ค Response"] ANS["โœ… Answer"] SRC["๐Ÿ“Ž Sources"] end UI --> QA QA --> QE QE --> OAI QE --> CLIP OAI --> TC CLIP --> IC TC --> HY IC --> HY HY --> CTX CTX --> GPT GPT --> ANS GPT --> SRC ANS --> UI SRC --> UI