MCPcopy Index your code
hub / github.com/RafalWilinski/cloudflare-rag

github.com/RafalWilinski/cloudflare-rag @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
52 symbols 146 edges 26 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Fullstack Cloudflare RAG

This is a fullstack example of how to build a RAG (Retrieval Augmented Generation) app with Cloudflare. It uses Cloudflare Workers, Pages, D1, KV, R2, AI Gateway and Workers AI.

https://github.com/user-attachments/assets/cbaa0380-7ad6-448d-ad44-e83772a9cf3f

Demo

Deploy to Cloudflare Workers

Features:

  • Every interaction is streamed to the UI using Server-Sent Events
  • Hybrid RAG using Full-Text Search on D1 and Vector Search on Vectorize
  • Switchable between various providers (OpenAI, Groq, Anthropic) using AI Gateway with fallbacks
  • Per-IP Rate limiting using Cloudflare's KV
  • OCR is running inside Cloudflare Worker using unpdf
  • Smart Placement automatically places your workloads in an optimal location that minimizes latency and speeds up your applications

Development

Make sure you have Node, pnpm and wrangler CLI installed.

Install dependencies:

pnpm install # or npm install

Deploy necessary primitives:

./setup.sh

Then, in wrangler.toml, set the d1_databases.database_id to your D1 database id and kv_namespaces.rate_limiter to your rate limiter KV namespace id.

Then, create a .dev.vars file with your API keys:

CLOUDFLARE_ACCOUNT_ID=your-cloudflare-account-id # Required
GROQ_API_KEY=your-groq-api-key # Optional
OPENAI_API_KEY=your-openai-api-key # Optional
ANTHROPIC_API_KEY=your-anthropic-api-key # Optional

If you don't have these keys, /api/stream will fallback to Workers AI.

Run the dev server:

npm run dev

And access the app at http://localhost:5173/.

Deployment

Having the necessary primitives setup, first setup secrets:

npx wrangler secret put CLOUDFLARE_ACCOUNT_ID
npx wrangler secret put GROQ_API_KEY
npx wrangler secret put OPENAI_API_KEY
npx wrangler secret put ANTHROPIC_API_KEY

Then, deploy your app to Cloudflare Pages:

npm run deploy

Hybrid Search RAG

Hybrid Search RAG

This project uses a combination of classical Full Text Search (sparse) against Cloudflare D1 and Hybrid Search with embeddings against Vectorize (dense) to provide the best of both worlds providing the most applicable context to the LLM.

The way it works is this: 1. We take user input and we rewrite it to 5 different queries using an LLM 2. We run each of these queries against our both datastores - D1 database using BM25 for full-text search and Vectorize for dense retrieval 3. We take the results from both datastores and we merge them together using Reciprocal Rank Fusion which provides us with a single list of results 4. We then take the top 10 results from this list and we pass them to the LLM to generate a response

License

This project is licensed under the terms of the MIT License.

Consulting

If you need help in building AI applications, please reach out to me on Twitter or via my website. Happy to help!

Extension points exported contracts — how you extend this code

AppLoadContext (Interface)
(no doc)
load-context.ts
Env (Interface)
(no doc)
worker-configuration.d.ts
EmbeddingResponse (Interface)
(no doc)
functions/api/stream.ts
ButtonProps (Interface)
(no doc)
app/components/button.tsx
DocumentChunk (Interface)
(no doc)
functions/api/stream.ts
AnimatedShinyTextProps (Interface)
(no doc)
app/components/magicui/animated-shiny-text.tsx

Core symbols most depended-on inside this repo

cn
called by 22
app/lib/utils.ts
streamResponse
called by 7
functions/api/upload.ts
ensureApiKeys
called by 4
app/lib/aiGateway.ts
startAnimation
called by 2
app/components/Input.tsx
vanishAndSubmit
called by 2
app/components/Input.tsx
removeErrorFiles
called by 2
app/components/fileUpload.tsx
handleFileChange
called by 2
app/components/fileUpload.tsx
isNearBottom
called by 2
app/routes/_index.tsx

Shape

Function 46
Interface 6

Languages

TypeScript100%

Modules by API surface

functions/api/stream.ts10 symbols
app/components/Input.tsx8 symbols
app/routes/_index.tsx7 symbols
functions/api/upload.ts6 symbols
app/components/fileUpload.tsx5 symbols
app/lib/aiGateway.ts3 symbols
app/components/ui/drawer.tsx3 symbols
app/root.tsx2 symbols
app/entry.server.tsx2 symbols
app/components/magicui/animated-shiny-text.tsx2 symbols
worker-configuration.d.ts1 symbols
load-context.ts1 symbols

For agents

$ claude mcp add cloudflare-rag \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page