diff --git a/src/app/api/uploads/route.ts b/src/app/api/uploads/route.ts
index 9fbaf2d..6db17dd 100644
--- a/src/app/api/uploads/route.ts
+++ b/src/app/api/uploads/route.ts
@@ -2,11 +2,11 @@ import { NextResponse } from 'next/server';
import fs from 'fs';
import path from 'path';
import crypto from 'crypto';
-import { getAvailableEmbeddingModelProviders } from '@/lib/providers';
import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
import { DocxLoader } from '@langchain/community/document_loaders/fs/docx';
import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
import { Document } from 'langchain/document';
+import ModelRegistry from '@/lib/models/registry';
interface FileRes {
fileName: string;
@@ -30,8 +30,8 @@ export async function POST(req: Request) {
const formData = await req.formData();
const files = formData.getAll('files') as File[];
- const embedding_model = formData.get('embedding_model');
- const embedding_model_provider = formData.get('embedding_model_provider');
+ const embedding_model = formData.get('embedding_model_key') as string;
+ const embedding_model_provider = formData.get('embedding_model_provider_id') as string;
if (!embedding_model || !embedding_model_provider) {
return NextResponse.json(
@@ -40,20 +40,9 @@ export async function POST(req: Request) {
);
}
- const embeddingModels = await getAvailableEmbeddingModelProviders();
- const provider =
- embedding_model_provider ?? Object.keys(embeddingModels)[0];
- const embeddingModel =
- embedding_model ?? Object.keys(embeddingModels[provider as string])[0];
+ const registry = new ModelRegistry();
- let embeddingsModel =
- embeddingModels[provider as string]?.[embeddingModel as string]?.model;
- if (!embeddingsModel) {
- return NextResponse.json(
- { message: 'Invalid embedding model selected' },
- { status: 400 },
- );
- }
+ const model = await registry.loadEmbeddingModel(embedding_model_provider, embedding_model);
const processedFiles: FileRes[] = [];
@@ -98,7 +87,7 @@ export async function POST(req: Request) {
}),
);
- const embeddings = await embeddingsModel.embedDocuments(
+ const embeddings = await model.embedDocuments(
splitted.map((doc) => doc.pageContent),
);
const embeddingsDataPath = filePath.replace(
diff --git a/src/components/MessageInputActions/Attach.tsx b/src/components/MessageInputActions/Attach.tsx
index 5004e4d..48f14d9 100644
--- a/src/components/MessageInputActions/Attach.tsx
+++ b/src/components/MessageInputActions/Attach.tsx
@@ -5,7 +5,15 @@ import {
PopoverPanel,
Transition,
} from '@headlessui/react';
-import { CopyPlus, File, LoaderCircle, Plus, Trash } from 'lucide-react';
+import {
+ CopyPlus,
+ File,
+ Link,
+ LoaderCircle,
+ Paperclip,
+ Plus,
+ Trash,
+} from 'lucide-react';
import { Fragment, useRef, useState } from 'react';
import { useChat } from '@/lib/hooks/useChat';
@@ -24,12 +32,12 @@ const Attach = ({ showText }: { showText?: boolean }) => {
}
const embeddingModelProvider = localStorage.getItem(
- 'embeddingModelProvider',
+ 'embeddingModelProviderId',
);
- const embeddingModel = localStorage.getItem('embeddingModel');
+ const embeddingModel = localStorage.getItem('embeddingModelKey');
- data.append('embedding_model_provider', embeddingModelProvider!);
- data.append('embedding_model', embeddingModel!);
+ data.append('embedding_model_provider_id', embeddingModelProvider!);
+ data.append('embedding_model_key', embeddingModel!);
const res = await fetch(`/api/uploads`, {
method: 'POST',
@@ -169,7 +177,7 @@ const Attach = ({ showText }: { showText?: boolean }) => {
multiple
hidden
/>
-
Attach
} ); diff --git a/src/components/MessageInputActions/AttachSmall.tsx b/src/components/MessageInputActions/AttachSmall.tsx index 2df8186..20aa141 100644 --- a/src/components/MessageInputActions/AttachSmall.tsx +++ b/src/components/MessageInputActions/AttachSmall.tsx @@ -5,7 +5,7 @@ import { PopoverPanel, Transition, } from '@headlessui/react'; -import { CopyPlus, File, LoaderCircle, Plus, Trash } from 'lucide-react'; +import { CopyPlus, File, LoaderCircle, Paperclip, Plus, Trash } from 'lucide-react'; import { Fragment, useRef, useState } from 'react'; import { File as FileType } from '../ChatWindow'; import { useChat } from '@/lib/hooks/useChat'; @@ -25,12 +25,12 @@ const AttachSmall = () => { } const embeddingModelProvider = localStorage.getItem( - 'embeddingModelProvider', + 'embeddingModelProviderId', ); - const embeddingModel = localStorage.getItem('embeddingModel'); + const embeddingModel = localStorage.getItem('embeddingModelKey'); - data.append('embedding_model_provider', embeddingModelProvider!); - data.append('embedding_model', embeddingModel!); + data.append('embedding_model_provider_id', embeddingModelProvider!); + data.append('embedding_model_key', embeddingModel!); const res = await fetch(`/api/uploads`, { method: 'POST', @@ -116,8 +116,8 @@ const AttachSmall = () => {{file.fileName.length > 25 ? file.fileName.replace(/\.\w+$/, '').substring(0, 25) + - '...' + - file.fileExtension + '...' + + file.fileExtension : file.fileName}
@@ -141,7 +141,7 @@ const AttachSmall = () => { multiple hidden /> -