aboutsummaryrefslogtreecommitdiff
path: root/apps/web/src
diff options
context:
space:
mode:
authorDhravya <[email protected]>2024-02-27 10:51:07 -0700
committerDhravya <[email protected]>2024-02-27 10:51:07 -0700
commit5bfb731e031aa91dac717c8c98bcc275ef88daf8 (patch)
treeedd6d2572d2d6cff5b129a6a02446d922386a71c /apps/web/src
parentEVERYTHING WORKING PERFECTLY (diff)
downloadsupermemory-5bfb731e031aa91dac717c8c98bcc275ef88daf8.tar.xz
supermemory-5bfb731e031aa91dac717c8c98bcc275ef88daf8.zip
set up cf ai worker
Diffstat (limited to 'apps/web/src')
-rw-r--r--apps/web/src/app/api/hello/route.ts99
-rw-r--r--apps/web/src/app/api/store/route.ts2
-rw-r--r--apps/web/src/server/auth.ts4
-rw-r--r--apps/web/src/server/db/index.ts2
4 files changed, 86 insertions, 21 deletions
diff --git a/apps/web/src/app/api/hello/route.ts b/apps/web/src/app/api/hello/route.ts
index 705b3cb8..64fda1a2 100644
--- a/apps/web/src/app/api/hello/route.ts
+++ b/apps/web/src/app/api/hello/route.ts
@@ -1,22 +1,89 @@
import type { NextRequest } from 'next/server'
import { getRequestContext } from '@cloudflare/next-on-pages'
+import { Ai } from '@cloudflare/ai'
+import type {
+ VectorizeIndex,
+ Fetcher,
+ Request,
+} from "@cloudflare/workers-types";
+
+import {
+ CloudflareVectorizeStore,
+ CloudflareWorkersAIEmbeddings,
+} from "@langchain/cloudflare";
+import { db } from '@/server/db';
+import { sessions, users } from '@/server/db/schema';
+import { eq } from 'drizzle-orm';
+import { NextResponse } from 'next/server';
export const runtime = 'edge'
-export async function GET(request: NextRequest) {
- let responseText = 'Hello World'
-
- // In the edge runtime you can use Bindings that are available in your application
- // (for more details see:
- // - https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#use-bindings-in-your-nextjs-application
- // - https://developers.cloudflare.com/pages/functions/bindings/
- // )
- //
- // KV Example:
- // const myKv = getRequestContext().env.MY_KV
- // await myKv.put('suffix', ' from a KV store!')
- // const suffix = await myKv.get('suffix')
- // responseText += suffix
-
- return new Response(responseText)
+declare global {
+ interface CloudflareEnv {
+ VECTORIZE_INDEX: VectorizeIndex;
+ }
}
+
+export async function POST(req: NextRequest) {
+
+ const token = req.cookies.get("next-auth.session-token")?.value ?? req.cookies.get("__Secure-authjs.session-token")?.value ?? req.cookies.get("authjs.session-token")?.value ?? req.headers.get("Authorization")?.replace("Bearer ", "");
+
+ console.log(process.env.AI)
+ // if (!process.env.AI || !vec) {
+ // return new Response(JSON.stringify({ message: "Missing cloudflare bindings" }), { status: 500 });
+ // }
+
+ const user = await db.select().from(sessions).where(eq(sessions.sessionToken, token!))
+ .leftJoin(users, eq(sessions.userId, users.id)).limit(1)
+
+ const vec = getRequestContext().env.VECTORIZE_INDEX;
+
+ console.log(vec ? vec : "Vector index not found")
+
+
+ if (!user || user.length === 0) {
+ return NextResponse.json({ message: "Invalid Key, session not found." }, { status: 404 });
+ }
+
+ const embeddings = new CloudflareWorkersAIEmbeddings({
+ binding: process.env.AI,
+ modelName: "@cf/baai/bge-small-en-v1.5",
+ });
+ const store = new CloudflareVectorizeStore(embeddings, {
+ index: vec,
+ });
+
+ const body = await req.json() as {
+ pageContent: string,
+ title?: string,
+ description?: string,
+ url: string,
+ };
+
+
+ if (!body.pageContent || !body.url) {
+ return new Response(JSON.stringify({ message: "Invalid Page Content" }), { status: 400 });
+ }
+
+ await store.addDocuments([
+ {
+ pageContent: body.pageContent,
+ metadata: {
+ title: body.title ?? "",
+ description: body.description ?? "",
+ url: body.url,
+ user: user[0].user!.name
+ },
+ }
+ ])
+
+ const filter: VectorizeVectorMetadataFilter = {
+ user: {
+ $eq: user[0].user!.name
+ }
+ }
+
+ const resp = await store.similaritySearch(body.pageContent, 5, filter)
+
+ return new Response(JSON.stringify({ message: "OK", data: resp }), { status: 200 });
+} \ No newline at end of file
diff --git a/apps/web/src/app/api/store/route.ts b/apps/web/src/app/api/store/route.ts
index c1c3eee1..4f9a8968 100644
--- a/apps/web/src/app/api/store/route.ts
+++ b/apps/web/src/app/api/store/route.ts
@@ -7,7 +7,7 @@ export const runtime = "edge";
export async function GET(req: NextRequest) {
try {
- const token = req.cookies.get("next-auth.session-token")?.value ?? req.cookies.get("authjs.session-token")?.value ?? req.headers.get("Authorization")?.replace("Bearer ", "");
+ const token = req.cookies.get("next-auth.session-token")?.value ?? req.cookies.get("__Secure-authjs.session-token")?.value ?? req.cookies.get("authjs.session-token")?.value ?? req.headers.get("Authorization")?.replace("Bearer ", "");
console.log(token ? token : 'token not found lol')
console.log(process.env.DATABASE)
diff --git a/apps/web/src/server/auth.ts b/apps/web/src/server/auth.ts
index 2a6f61b9..e5bac1f0 100644
--- a/apps/web/src/server/auth.ts
+++ b/apps/web/src/server/auth.ts
@@ -14,9 +14,9 @@ export const {
session: ({ session, token }) => ({
...session,
user: {
- ...session.user,
+ // ...session.user,
id: token.id as string,
- token
+ token: token,
},
})
},
diff --git a/apps/web/src/server/db/index.ts b/apps/web/src/server/db/index.ts
index 6eea27b2..5aa87fc1 100644
--- a/apps/web/src/server/db/index.ts
+++ b/apps/web/src/server/db/index.ts
@@ -2,8 +2,6 @@ import { drizzle } from 'drizzle-orm/d1';
import * as schema from "./schema";
-console.log(process.env.DATABASE);
-
export const db = drizzle(
process.env.DATABASE,
{ schema, logger: true }