{"slug":"business/AI_SEARCH_RAG_INTEGRATION","title":"AI Search + AI Gateway + Workers AI Integration","section":"business","sectionLabel":"Business","status":"unclassified","type":"document","path":"business/AI_SEARCH_RAG_INTEGRATION.mdx","bytes":11879,"description":null,"updated":null,"source":"integratewise/Integratewise-docs-wiki","content":"\n> **Date:** 2026-06-09 14:20 UTC  \n> **Status:** ✅ INTEGRATED INTO INTELLIGENCE WORKER  \n> **Architecture:** v3.6 Consolidated (no new workers)\n\n---\n\n## Architecture Decision\n\n**REJECTED:** Standalone `integratewise-ai-orchestrator` worker  \n**ADOPTED:** Integrate AI Search RAG into existing `intelligence` worker\n\n**Rationale:**\n\n- v3.6 architecture already consolidates AI functionality into `intelligence`\n- Existing AI router (Workers AI + OpenRouter + AI Gateway) is working\n- AI Search namespace already created: `integratewise-intelligence`\n- Adding RAG is a feature enhancement, not a new service\n\n---\n\n## What's Wired (2026-06-09)\n\n### ✅ Intelligence Worker Bindings\n\n**File:** `services/intelligence/wrangler.toml`\n\n```toml\n# AI Search for RAG\n[[ai_search_namespaces]]\nbinding = \"AI_SEARCH\"\nnamespace = \"integratewise-intelligence\"\n\n# Workers AI for fast inference\n[ai]\nbinding = \"AI\"\n\n# OpenRouter API key (free tier)\n[[secrets_store_secrets]]\nbinding = \"OPENROUTER_API_KEY\"\nstore_id = \"1fd83fc5881e4cd296ae3c2fbe80693c\"\nsecret_name = \"OPENROUTER_API_KEY\"\n\n# Env vars\n[vars]\nAI_GATEWAY_ID = \"integratewise-ai-dev\"\n```\n\n### ✅ AI Router with RAG Support\n\n**File:** `services/intelligence/src/lib/ai-router.ts`\n\n**Features:**\n\n- 3-tier fallback: Workers AI → OpenRouter free → OpenRouter fusion\n- Optional RAG context from AI Search\n- All requests through AI Gateway (caching + logging)\n- Source attribution for RAG responses\n\n**New Interface:**\n\n```typescript\nexport interface AIRequest {\n  prompt: string;\n  systemPrompt?: string;\n  maxTokens?: number;\n  temperature?: number;\n  tier?: \"fast\" | \"balanced\" | \"critical\";\n  useRAG?: boolean; // NEW: Enable AI Search RAG\n}\n\nexport interface AIResponse {\n  content: string;\n  model: string;\n  cached: boolean;\n  provider: \"workers-ai\" | \"openrouter\";\n  cost: number;\n  sources?: Array<{ title: string; url?: string; score?: number }>; // NEW: RAG sources\n}\n```\n\n**RAG Flow:**\n\n1. If `useRAG: true`, search AI Search namespace with user query\n2. Retrieve top 5 results\n3. Augment prompt with retrieved context\n4. Route through AI tier (fast/balanced/critical)\n5. Return answer + source attribution\n\n### ✅ Test Endpoint\n\n**File:** `services/intelligence/src/index.ts`\n\n**New Route:** `POST /v1/test/rag`\n\n**Request:**\n\n```json\n{\n  \"question\": \"What integrations does integratewise.ai support?\",\n  \"tier\": \"fast\"\n}\n```\n\n**Response:**\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"content\": \"IntegrateWise supports...\",\n    \"model\": \"@cf/meta/llama-3.1-8b-instruct\",\n    \"cached\": false,\n    \"provider\": \"workers-ai\",\n    \"cost\": 0,\n    \"sources\": [\n      {\n        \"title\": \"Supported Integrations\",\n        \"url\": \"https://integratewise.ai/integrations\",\n        \"score\": 0.92\n      }\n    ]\n  }\n}\n```\n\n---\n\n## Deployment\n\n### Step 1: Deploy Intelligence Worker\n\n```bash\ncd /Users/nirmal/Github/integratewise-live\nunset CLOUDFLARE_API_TOKEN\nwrangler deploy --config services/intelligence/wrangler.toml --env=\"\"\n```\n\n**Expected Output:**\n\n- ✅ Worker deployed\n- ✅ AI_SEARCH binding verified\n- ✅ AI binding verified\n- ✅ OPENROUTER_API_KEY binding verified\n\n---\n\n### Step 2: Test RAG Search\n\n```bash\n# Test RAG-enabled query (fast tier)\ncurl -X POST https://intelligence.dev.integratewise.ai/v1/test/rag \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"question\": \"What is IntegrateWise and what does it do?\",\n    \"tier\": \"fast\"\n  }'\n\n# Test with balanced tier (OpenRouter free)\ncurl -X POST https://intelligence.dev.integratewise.ai/v1/test/rag \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"question\": \"How does IntegrateWise handle entity resolution?\",\n    \"tier\": \"balanced\"\n  }'\n\n# Test with critical tier (OpenRouter fusion)\ncurl -X POST https://intelligence.dev.integratewise.ai/v1/test/rag \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"question\": \"Compare IntegrateWise to other integration platforms\",\n    \"tier\": \"critical\"\n  }'\n```\n\n**Expected Behavior:**\n\n- Query hits AI Search namespace\n- Retrieves relevant docs from integratewise.ai\n- Augments prompt with context\n- Returns answer + sources\n\n---\n\n### Step 3: Verify AI Gateway Logs\n\n1. Open Cloudflare Dashboard\n2. Navigate to **AI Gateway** → `integratewise-ai-dev`\n3. Check logs for:\n   - Cache hit rate\n   - Request counts by provider (workers-ai, openrouter)\n   - Token usage\n   - Error rates\n\n---\n\n## AI Search Content Status\n\n### Current Status\n\n**Namespace:** `integratewise-intelligence`  \n**Status:** ✅ Created  \n**Content:** ⚠️ EMPTY (needs bulk upload)\n\n### Next: Bulk Upload Content\n\n**Option A: Crawl Website (Recommended)**\n\n```bash\n# Enable Cloudflare AI Search crawler\n# 1. Go to Cloudflare Dashboard → AI → AI Crawl Control\n# 2. Allow \"Cloudflare-AI-Search\" bot for integratewise.ai domain\n# 3. Trigger initial crawl:\n\ncurl -X POST \\\n  \"https://api.cloudflare.com/client/v4/accounts/a1bbbb12a32cdbb68dd170b09fe8b5f3/ai-search/rags/integratewise-intelligence/refresh\" \\\n  -H \"Authorization: Bearer ${CLOUDFLARE_API_TOKEN}\" \\\n  -H \"Content-Type: application/json\"\n```\n\n**Option B: Bulk Upload from org_memory (Manual)**\n\n```bash\n# Create script to upload org_memory content\n# File: services/intelligence/scripts/upload-to-ai-search.ts\n\nconst documents = await fetchOrgMemoryDocs(); // From Supabase\n\nfor (const doc of documents) {\n  await env.AI_SEARCH.upsert({\n    id: doc.id,\n    text: doc.content_md,\n    metadata: {\n      title: doc.title,\n      url: doc.url,\n      tags: doc.tags,\n      topics: doc.topics,\n      governance_state: doc.governance_state,\n    },\n  });\n}\n```\n\n**Option C: Sync from R2 Bucket**\n\n```bash\n# If org_memory content is already in R2, sync to AI Search\n# (Requires AI Search API integration)\n```\n\n---\n\n## What's Missing (Optional)\n\n### Hugging Face API Key\n\n**Status:** Not configured  \n**Priority:** 🟢 LOW (optional, OpenRouter covers this)\n\n**To Add:**\n\n```bash\nwrangler secrets-store secret create 1fd83fc5881e4cd296ae3c2fbe80693c \\\n  --name=HUGGINGFACE_API_KEY \\\n  --scopes=workers\n\n# Add binding to intelligence/wrangler.toml\n[[secrets_store_secrets]]\nbinding = \"HF_API_KEY\"\nstore_id = \"1fd83fc5881e4cd296ae3c2fbe80693c\"\nsecret_name = \"HUGGINGFACE_API_KEY\"\n```\n\n### Grok API Key\n\n**Status:** Not configured  \n**Priority:** 🟢 LOW (optional, covered by OpenRouter + Workers AI)\n\n**To Add:**\n\n```bash\nwrangler secrets-store secret create 1fd83fc5881e4cd296ae3c2fbe80693c \\\n  --name=GROK_API_KEY \\\n  --scopes=workers\n\n# Add binding to intelligence/wrangler.toml\n[[secrets_store_secrets]]\nbinding = \"GROK_API_KEY\"\nstore_id = \"1fd83fc5881e4cd296ae3c2fbe80693c\"\nsecret_name = \"GROK_API_KEY\"\n```\n\n**Note:** These are optional fallback providers. Current setup (Workers AI + OpenRouter free) is sufficient for Phase 2.\n\n---\n\n## Usage in Production\n\n### Morning Brief with RAG\n\n```typescript\n\nasync function generateMorningBrief(env: Env) {\n  const response = await routeAI(\n    {\n      prompt: \"Summarize overnight system changes and pending actions\",\n      systemPrompt: \"You are a system monitor. Use knowledge base context.\",\n      useRAG: true,\n      tier: \"fast\",\n      maxTokens: 500,\n    },\n    env\n  );\n\n  return {\n    content: response.content,\n    sources: response.sources, // Attribution\n    provider: response.provider,\n  };\n}\n```\n\n### Signal Analysis with RAG\n\n```typescript\nasync function analyzeSignal(env: Env, signalData: unknown) {\n  const response = await routeAI(\n    {\n      prompt: `Analyze this signal: ${JSON.stringify(signalData)}`,\n      systemPrompt: \"You are a signal analyzer. Reference knowledge base for context.\",\n      useRAG: true,\n      tier: \"balanced\",\n      maxTokens: 500,\n    },\n    env\n  );\n\n  return {\n    analysis: response.content,\n    sources: response.sources,\n  };\n}\n```\n\n### Critical Decision with Fusion\n\n```typescript\nasync function criticalDecision(env: Env, context: unknown) {\n  const response = await routeAI(\n    {\n      prompt: `Critical decision required: ${JSON.stringify(context)}`,\n      systemPrompt: \"Multi-model deliberation. Use knowledge base + reasoning.\",\n      useRAG: true,\n      tier: \"critical\", // OpenRouter fusion\n      maxTokens: 1000,\n    },\n    env\n  );\n\n  return {\n    recommendation: response.content,\n    sources: response.sources,\n    model: response.model, // Will show \"openrouter/fusion\"\n  };\n}\n```\n\n---\n\n## Cost Analysis\n\n| Tier     | Provider   | Model                                          | Cost                 | Use Case                                      |\n| -------- | ---------- | ---------------------------------------------- | -------------------- | --------------------------------------------- |\n| Fast     | Workers AI | llama-3.1-8b                                   | **FREE**             | Default, morning briefs, quick queries        |\n| Balanced | Workers AI | moonshotai/kimi-k3                             | **Paid** (per-token) | Signal analysis, medium reasoning, 1M context |\n| Critical | Workers AI | moonshotai/kimi-k3 (`reasoning_effort: 'max'`) | **Paid** (per-token) | Critical decisions, deep deliberation         |\n| Fallback | OpenRouter | openrouter/auto                                | **FREE** (tier)      | Fallback when Workers AI unavailable          |\n\n> **Kimi K3** (`moonshotai/kimi-k3`): 2.8T parameter frontier model on Workers AI. 1M token context window, always-on reasoning with `reasoning_effort` parameter. Edge-native — no external API call needed. See [Cloudflare docs](https://developers.cloudflare.com/ai/models/moonshotai/kimi-k3/).\n\n**AI Gateway Benefits:**\n\n- Request caching (reduces API calls)\n- Rate limiting (prevents abuse)\n- Unified logs (all providers in one place)\n- Cost tracking\n\n---\n\n## Success Criteria\n\n### Phase 2 Complete When:\n\n- ✅ Intelligence worker deployed with AI Search binding\n- ✅ AI router supports RAG (`useRAG: true`)\n- ✅ Test endpoint `/v1/test/rag` working\n- ✅ AI Gateway logs showing traffic\n- ⏳ AI Search namespace populated with content (bulk upload)\n- ⏳ Production code uses RAG for morning briefs + signal analysis\n\n---\n\n## Next Steps\n\n### Immediate (After Deployment)\n\n1. **Deploy intelligence worker:**\n\n   ```bash\n   wrangler deploy --config services/intelligence/wrangler.toml --env=\"\"\n   ```\n\n2. **Test RAG endpoint:**\n\n   ```bash\n   curl -X POST https://intelligence.dev.integratewise.ai/v1/test/rag \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"question\":\"What is IntegrateWise?\",\"tier\":\"fast\"}'\n   ```\n\n3. **Verify AI Gateway logs:**\n   - Check cache hit rate\n   - Verify requests routing correctly\n\n### Phase 3: Content Upload\n\n1. **Option A: Website crawl** (simplest)\n   - Enable AI Search crawler for integratewise.ai\n   - Trigger initial crawl\n   - Wait ~1 hour for indexing\n\n2. **Option B: Bulk upload org_memory** (more control)\n   - Write script to fetch org_memory (governance_state=approved)\n   - Upload to AI Search via API\n   - Map metadata (title, url, tags, topics)\n\n### Phase 4: Production Integration\n\n1. Update morning brief handler to use RAG\n2. Update signal analysis to use RAG\n3. Add RAG to MCP tools (knowledge search)\n4. Monitor usage + costs\n\n---\n\n## Files Modified\n\n1. **`services/intelligence/src/lib/ai-router.ts`**\n   - Added `useRAG` parameter to AIRequest\n   - Added `sources` field to AIResponse\n   - Implemented AI Search integration in routeAI()\n   - RAG context augmentation before AI call\n\n2. **`services/intelligence/src/index.ts`**\n   - Added `POST /v1/test/rag` endpoint\n   - Integrated routeAI with RAG support\n\n3. **`services/intelligence/wrangler.toml`**\n   - Already has AI_SEARCH binding ✅\n   - Already has AI binding ✅\n   - Already has OPENROUTER_API_KEY binding ✅\n\n---\n\n**Status:** READY FOR DEPLOYMENT  \n**Breaking Changes:** None  \n**Rollback Available:** Yes  \n**Last Updated:** 2026-06-09T14:20:00Z\n"}