diff --git a/apps/cf-ai-backend/src/routes/chat.ts b/apps/cf-ai-backend/src/routes/chat.ts index 7603667f..75c7b426 100644 --- a/apps/cf-ai-backend/src/routes/chat.ts +++ b/apps/cf-ai-backend/src/routes/chat.ts @@ -2,6 +2,8 @@ import { Content, GenerativeModel } from '@google/generative-ai'; import { OpenAIEmbeddings } from '../OpenAIEmbedder'; import { CloudflareVectorizeStore } from '@langchain/cloudflare'; import { Request } from '@cloudflare/workers-types'; +import { AiTextGenerationOutput } from '@cloudflare/ai/dist/ai/tasks/text-generation'; +import { Ai } from '@cloudflare/ai'; export async function POST(request: Request, _: CloudflareVectorizeStore, embeddings: OpenAIEmbeddings, model: GenerativeModel, env?: Env) { const queryparams = new URL(request.url).searchParams; @@ -112,28 +114,39 @@ export async function POST(request: Request, _: CloudflareVectorizeStore, embedd }, ] as Content[]; - const chat = model.startChat({ - history: [...defaultHistory, ...(body.chatHistory ?? [])], - }); + // const chat = model.startChat({ + // history: [...defaultHistory, ...(body.chatHistory ?? [])], + // }); const prompt = `Context:\n${preparedContext ?? ''}\n\nQuestion: ${query}\nAnswer:`; - const output = await chat.sendMessageStream(prompt); + // const output = await chat.sendMessageStream(prompt); - const response = new Response( - new ReadableStream({ - async start(controller) { - const converter = new TextEncoder(); - for await (const chunk of output.stream) { - const chunkText = await chunk.text(); - const encodedChunk = converter.encode('data: ' + JSON.stringify({ response: chunkText }) + '\n\n'); - controller.enqueue(encodedChunk); - } - const doneChunk = converter.encode('data: [DONE]'); - controller.enqueue(doneChunk); - controller.close(); - }, - }), - ); - return response; + // const response = new Response( + // new ReadableStream({ + // async start(controller) { + // const converter = new TextEncoder(); + // for await (const chunk of output.stream) { + // const chunkText = await chunk.text(); + // const encodedChunk = converter.encode('data: ' + JSON.stringify({ response: chunkText }) + '\n\n'); + // controller.enqueue(encodedChunk); + // } + // const doneChunk = converter.encode('data: [DONE]'); + // controller.enqueue(doneChunk); + // controller.close(); + // }, + // }), + // ); + // return response; + const ai = new Ai(env?.AI); + const output: AiTextGenerationOutput = (await ai.run('@hf/thebloke/mistral-7b-instruct-v0.1-awq', { + prompt, + stream: true, + })) as ReadableStream; + + return new Response(output, { + headers: { + 'content-type': 'text/event-stream', + }, + }); } diff --git a/apps/extension/manifest.json b/apps/extension/manifest.json index 561ca8fe..5cf05298 100644 --- a/apps/extension/manifest.json +++ b/apps/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "SuperMemory", - "version": "1.0.0", + "version": "2.0.0", "action": { "default_popup": "index.html" }, diff --git a/apps/extension/src/components/FilterCombobox.tsx b/apps/extension/src/components/FilterCombobox.tsx index f6215c03..5467655b 100644 --- a/apps/extension/src/components/FilterCombobox.tsx +++ b/apps/extension/src/components/FilterCombobox.tsx @@ -62,7 +62,7 @@ export function FilterSpaces({
{selectedSpaces.map((spaceid) => { const space = spaces.find((s) => s.id === spaceid)!; - return {}} />; + return ; })}
); @@ -143,7 +143,7 @@ export function FilterSpaces({ ); } -function SpaceItem({ name, onRemove }: { onRemove: () => void } & Space) { +function SpaceItem({ name }: Space) { return (