RAG Chatbot with Supabase + TogetherAI + Openrouter

Go to Workflow
461 views
Built by iamvaar iamvaar
Created on July 04, 2025

Description

⚠️ RUN the FIRST WORKFLOW ONLY ONCE
(as it will convert your content in Embedding format and save it in DB and is ready for the RAG Chat)

📌 Telegram Trigger

Type:** telegramTrigger
Purpose:** Waits for new Telegram messages to trigger the workflow.
Note:** Currently disabled.

📄 Content for the Training

Type:** googleDocs
Purpose:** Fetches document content from Google Docs using its URL.
Details:** Uses Service Account authentication.

✂️ Splitting into Chunks

Type:** code
Purpose:** Splits the fetched document text into smaller chunks (1000 chars each) for processing.
Logic:** Loops over text and slices it.

🧠 Embedding Uploaded Document

Type:** httpRequest
Purpose:** Calls Together AI embedding API to get vector embeddings for each text chunk.
Details:** Sends JSON with model name and chunk as input.

🛢 Save the embedding in DB

Type:** supabase
Purpose:** Saves each text chunk and its embedding vector into the Supabase embed table.

SECOND WORKFLOW EXPLAINATION:

💬 When chat message received

Type:** chatTrigger
Purpose:** Starts the workflow when a user sends a chat message.
Details:** Sends an initial greeting message to the user.

🧩 Embend User Message

Type:** httpRequest
Purpose:** Generates embedding for the user’s input message.
Details:** Calls Together AI embeddings API.

🔍 Search Embeddings

Type:** httpRequest
Purpose:** Searches Supabase DB for the top 5 most similar text chunks based on the generated embedding.
Details:** Calls Supabase RPC function matchembeddings1.

📦 Aggregate

Type:** aggregate
Purpose:** Combines all retrieved text chunks into a single aggregated context for the LLM.

🧠 Basic LLM Chain

Type:** chainLlm
Purpose:** Passes the user's question + aggregated context to the LLM to generate a detailed answer.
Details:** Contains prompt instructing the LLM to answer only based on context.

🤖 OpenRouter Chat Model

Type:** lmChatOpenRouter
Purpose:** Provides the actual AI language model that processes the prompt.
Details:** Uses qwen/qwen3-8b:free model via OpenRouter and you can use any of your choice.

Nodes Used (6)

Basic LLM Chain
@n8n/n8n-nodes-langchain.chainLlm
Code
n8n-nodes-base.code
Google Docs
n8n-nodes-base.googleDocs
HTTP Request
n8n-nodes-base.httpRequest
OpenRouter Chat Model
@n8n/n8n-nodes-langchain.lmChatOpenRouter
Supabase
n8n-nodes-base.supabase