matt HOFFNER commited on
Commit
5d239ba
Β·
1 Parent(s): 8c64b1d

remove server route

Browse files
src/components/ChatWindow.jsx CHANGED
@@ -4,7 +4,9 @@ import { useCallback, useEffect, useState } from "react";
4
  import MessageList from './MessageList';
5
  import {FileLoader} from './FileLoader';
6
  import Loader from "./Loader";
7
- const {ChromaClient} = require('chromadb');
 
 
8
  const client = new ChromaClient();
9
 
10
  function ChatWindow({
@@ -12,7 +14,7 @@ function ChatWindow({
12
  maxTokens,
13
  }) {
14
  const { loadingStatus, send, isGenerating, setOnMessage } = useLLM();
15
- const [fileId, setFileId] = useState();
16
  const [userInput, setUserInput] = useState("");
17
 
18
  const handleChange = (event) => {
@@ -26,9 +28,15 @@ function ChatWindow({
26
  return;
27
  }
28
 
29
- if (fileId) {
30
- // const fileContents = await db.docs.get(fileId);
31
- const collection = await client.getCollection("docs")
 
 
 
 
 
 
32
  const result = await collection.query({
33
  nResults: 2,
34
  queryTexts: [userPrompt]
@@ -58,7 +66,8 @@ function ChatWindow({
58
  isGenerating,
59
  isReady,
60
  maxTokens,
61
- stopStrings
 
62
  ]);
63
 
64
  useEffect(() => {
@@ -82,7 +91,7 @@ function ChatWindow({
82
  useEffect(() => {
83
  loadFile();
84
 
85
- }, [fileId])
86
 
87
  return (
88
  <div className="window sm:w-[500px] w-full">
@@ -134,7 +143,7 @@ function ChatWindow({
134
  height="40"
135
  />
136
  </button>
137
- <FileLoader setFileId={setFileId} />
138
  </div>
139
 
140
  <div
@@ -153,7 +162,6 @@ function ChatWindow({
153
  </div>
154
  )}
155
  {!isReady && <Loader />}
156
- {fileId && <div>loaded {fileId}</div>}
157
  </div>
158
  </div>
159
  </div>
 
4
  import MessageList from './MessageList';
5
  import {FileLoader} from './FileLoader';
6
  import Loader from "./Loader";
7
+ import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';
8
+ import { ChromaClient } from "chromadb";
9
+
10
  const client = new ChromaClient();
11
 
12
  function ChatWindow({
 
14
  maxTokens,
15
  }) {
16
  const { loadingStatus, send, isGenerating, setOnMessage } = useLLM();
17
+ const [fileText, setFileText] = useState();
18
  const [userInput, setUserInput] = useState("");
19
 
20
  const handleChange = (event) => {
 
28
  return;
29
  }
30
 
31
+ if (fileText) {
32
+ const textSplitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000 });
33
+ const docs = await textSplitter.createDocuments([text]);
34
+ const collection = await client.createCollection({name: "docs", embeddingFunction: TransformersEmbeddingFunction})
35
+ await collection.add({
36
+ ids: [...docs.map((v, k) => k)],
37
+ metadatas: [...docs.map(doc => doc.metadata)],
38
+ documents: [...docs.map(doc => doc.pageContent)],
39
+ });
40
  const result = await collection.query({
41
  nResults: 2,
42
  queryTexts: [userPrompt]
 
66
  isGenerating,
67
  isReady,
68
  maxTokens,
69
+ stopStrings,
70
+ fileText
71
  ]);
72
 
73
  useEffect(() => {
 
91
  useEffect(() => {
92
  loadFile();
93
 
94
+ }, [fileText])
95
 
96
  return (
97
  <div className="window sm:w-[500px] w-full">
 
143
  height="40"
144
  />
145
  </button>
146
+ <FileLoader setFileText={setFileText} />
147
  </div>
148
 
149
  <div
 
162
  </div>
163
  )}
164
  {!isReady && <Loader />}
 
165
  </div>
166
  </div>
167
  </div>
src/components/FileLoader.jsx CHANGED
@@ -1,5 +1,4 @@
1
  import { useState } from 'react';
2
- import { db } from '@/utils/db-client';
3
  import { DashButton } from './DashButton'
4
  import { FileEmbedder } from './FileEmbedder';
5
  import * as PDFJS from 'pdfjs-dist/build/pdf';
@@ -26,7 +25,7 @@ export default class Pdf {
26
  }
27
  }
28
 
29
- export const FileLoader = ({ setFileId }) => {
30
  const [files, setFiles] = useState();
31
  const [uploadStatus, setUploadStatus] = useState("Embed");
32
  const handleEmbed = (files) => {
@@ -53,18 +52,8 @@ export const FileLoader = ({ setFileId }) => {
53
 
54
  reader.readAsBinaryString(file);
55
  }
56
- const response = await fetch('/api/docHandle', {
57
- method: 'POST',
58
- body: JSON.stringify({ text }),
59
- });
60
- const docChat = await response.json();
61
- const id = await db.docs.add({
62
- fileName: file.name || '',
63
- fileSourceData: text,
64
- model: docChat,
65
- });
66
- setUploadStatus("Embedding Completed");
67
- setFileId(id)
68
  }
69
  }}
70
  >
 
1
  import { useState } from 'react';
 
2
  import { DashButton } from './DashButton'
3
  import { FileEmbedder } from './FileEmbedder';
4
  import * as PDFJS from 'pdfjs-dist/build/pdf';
 
25
  }
26
  }
27
 
28
+ export const FileLoader = ({ setFileText }) => {
29
  const [files, setFiles] = useState();
30
  const [uploadStatus, setUploadStatus] = useState("Embed");
31
  const handleEmbed = (files) => {
 
52
 
53
  reader.readAsBinaryString(file);
54
  }
55
+ setFileText(text)
56
+ setUploadStatus("Embed Complete");
 
 
 
 
 
 
 
 
 
 
57
  }
58
  }}
59
  >
src/pages/api/docHandle.ts DELETED
@@ -1,41 +0,0 @@
1
- import type { NextApiRequest, NextApiResponse } from 'next';
2
- import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';
3
- import { TransformersEmbeddingFunction } from '../../embed/hf';
4
- const {ChromaClient} = require('chromadb');
5
- const client = new ChromaClient();
6
-
7
- async function handleDocs(text: string) {
8
- const textSplitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000 });
9
- const docs = await textSplitter.createDocuments([text]);
10
- const collection = await client.createCollection({name: "docs", embeddingFunction: TransformersEmbeddingFunction})
11
- await collection.add({
12
- ids: [...docs.map((v, k) => k)],
13
- metadatas: [...docs.map(doc => doc.metadata)],
14
- documents: [...docs.map(doc => doc.pageContent)],
15
- });
16
-
17
- return collection;
18
- }
19
-
20
- export default async function handler(
21
- req: NextApiRequest,
22
- res: NextApiResponse,
23
- ) {
24
- const { text } = JSON.parse(req.body);
25
- // console.log(text);
26
-
27
- if (!text) {
28
- return res.status(400).json({ message: 'No question in the request' });
29
- }
30
-
31
- const vectorStore = await handleDocs(text);
32
- res.status(200).send({
33
- model: vectorStore,
34
- });
35
- }
36
-
37
- export const config = {
38
- api: {
39
- bodyParser: true, // Disallow body parsing, consume as stream
40
- },
41
- };