Timothy J. Baek 10 miesięcy temu
rodzic
commit
83986620ee

+ 3 - 0
backend/apps/rag/main.py

@@ -1136,6 +1136,7 @@ def store_doc(
 
 
 class ProcessDocForm(BaseModel):
 class ProcessDocForm(BaseModel):
     file_id: str
     file_id: str
+    collection_name: Optional[str] = None
 
 
 
 
 @app.post("/process/doc")
 @app.post("/process/doc")
@@ -1148,6 +1149,8 @@ def process_doc(
         file_path = file.meta.get("path", f"{UPLOAD_DIR}/{file.filename}")
         file_path = file.meta.get("path", f"{UPLOAD_DIR}/{file.filename}")
 
 
         f = open(file_path, "rb")
         f = open(file_path, "rb")
+
+        collection_name = form_data.collection_name
         if collection_name == None:
         if collection_name == None:
             collection_name = calculate_sha256(f)[:63]
             collection_name = calculate_sha256(f)[:63]
         f.close()
         f.close()

+ 9 - 0
backend/apps/webui/models/files.py

@@ -99,5 +99,14 @@ class FilesTable:
         except:
         except:
             return False
             return False
 
 
+    def delete_all_files(self) -> bool:
+        try:
+            query = File.delete()
+            query.execute()  # Remove the rows, return number of rows removed.
+
+            return True
+        except:
+            return False
+
 
 
 Files = FilesTable(DB)
 Files = FilesTable(DB)

+ 18 - 0
backend/apps/webui/routers/files.py

@@ -53,6 +53,7 @@ def upload_file(
 
 
         # replace filename with uuid
         # replace filename with uuid
         id = str(uuid.uuid4())
         id = str(uuid.uuid4())
+        filename = f"{id}_{filename}"
         file_path = f"{UPLOAD_DIR}/{filename}"
         file_path = f"{UPLOAD_DIR}/{filename}"
 
 
         contents = file.file.read()
         contents = file.file.read()
@@ -143,3 +144,20 @@ async def delete_file_by_id(id: str, user=Depends(get_verified_user)):
             status_code=status.HTTP_401_UNAUTHORIZED,
             status_code=status.HTTP_401_UNAUTHORIZED,
             detail=ERROR_MESSAGES.NOT_FOUND,
             detail=ERROR_MESSAGES.NOT_FOUND,
         )
         )
+
+
+############################
+# Delete All Files
+############################
+
+
+@router.delete("/all")
+async def delete_all_files(user=Depends(get_admin_user)):
+    result = Files.delete_all_files()
+    if result:
+        return {"message": "All files deleted successfully"}
+    else:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail=ERROR_MESSAGES.DEFAULT("Error deleting files"),
+        )

+ 0 - 1
src/lib/apis/files/index.ts

@@ -9,7 +9,6 @@ export const uploadFile = async (token: string, file: File) => {
 		method: 'POST',
 		method: 'POST',
 		headers: {
 		headers: {
 			Accept: 'application/json',
 			Accept: 'application/json',
-			'Content-Type': 'application/json',
 			authorization: `Bearer ${token}`
 			authorization: `Bearer ${token}`
 		},
 		},
 		body: data
 		body: data

+ 1 - 0
src/lib/apis/rag/index.ts

@@ -171,6 +171,7 @@ export const processDocToVectorDB = async (token: string, file_id: string) => {
 		method: 'POST',
 		method: 'POST',
 		headers: {
 		headers: {
 			Accept: 'application/json',
 			Accept: 'application/json',
+			'Content-Type': 'application/json',
 			authorization: `Bearer ${token}`
 			authorization: `Bearer ${token}`
 		},
 		},
 		body: JSON.stringify({
 		body: JSON.stringify({

+ 2 - 3
src/lib/components/chat/MessageInput.svelte

@@ -147,7 +147,6 @@
 
 
 			if (res) {
 			if (res) {
 				fileItem.status = 'processed';
 				fileItem.status = 'processed';
-				fileItem.collection_name = res.collection_name;
 				files = files;
 				files = files;
 			}
 			}
 		} catch (e) {
 		} catch (e) {
@@ -523,12 +522,12 @@
 														</Tooltip>
 														</Tooltip>
 													{/if}
 													{/if}
 												</div>
 												</div>
-											{:else if file.type === 'doc'}
+											{:else if ['doc', 'file'].includes(file.type)}
 												<div
 												<div
 													class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none"
 													class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none"
 												>
 												>
 													<div class="p-2.5 bg-red-400 text-white rounded-lg">
 													<div class="p-2.5 bg-red-400 text-white rounded-lg">
-														{#if file.upload_status}
+														{#if file.status === 'processed'}
 															<svg
 															<svg
 																xmlns="http://www.w3.org/2000/svg"
 																xmlns="http://www.w3.org/2000/svg"
 																viewBox="0 0 24 24"
 																viewBox="0 0 24 24"

+ 31 - 7
src/lib/utils/characters/index.ts

@@ -117,15 +117,39 @@ const decodeTextChunk = (data) => {
 
 
 const extractCharacter = (json) => {
 const extractCharacter = (json) => {
 	function getTrimmedValue(json, keys) {
 	function getTrimmedValue(json, keys) {
-		return keys.map((key) => json[key]).find((value) => value && value.trim());
+		return keys
+			.map((key) => {
+				const keyParts = key.split('.');
+				let value = json;
+				for (const part of keyParts) {
+					if (value && value[part] != null) {
+						value = value[part];
+					} else {
+						value = null;
+						break;
+					}
+				}
+				return value && value.trim();
+			})
+			.find((value) => value);
 	}
 	}
 
 
-	const name = getTrimmedValue(json, ['char_name', 'name']);
-	const summary = getTrimmedValue(json, ['personality', 'title']);
-	const personality = getTrimmedValue(json, ['char_persona', 'description']);
-	const scenario = getTrimmedValue(json, ['world_scenario', 'scenario']);
-	const greeting = getTrimmedValue(json, ['char_greeting', 'greeting', 'first_mes']);
-	const examples = getTrimmedValue(json, ['example_dialogue', 'mes_example', 'definition']);
+	const name = getTrimmedValue(json, ['char_name', 'name', 'data.name']);
+	const summary = getTrimmedValue(json, ['personality', 'title', 'data.description']);
+	const personality = getTrimmedValue(json, ['char_persona', 'description', 'data.personality']);
+	const scenario = getTrimmedValue(json, ['world_scenario', 'scenario', 'data.scenario']);
+	const greeting = getTrimmedValue(json, [
+		'char_greeting',
+		'greeting',
+		'first_mes',
+		'data.first_mes'
+	]);
+	const examples = getTrimmedValue(json, [
+		'example_dialogue',
+		'mes_example',
+		'definition',
+		'data.mes_example'
+	]);
 
 
 	return { name, summary, personality, scenario, greeting, examples };
 	return { name, summary, personality, scenario, greeting, examples };
 };
 };

+ 2 - 0
src/routes/(app)/workspace/models/create/+page.svelte

@@ -226,6 +226,8 @@
 					return null;
 					return null;
 				});
 				});
 
 
+				console.log(character);
+
 				if (character && character.character) {
 				if (character && character.character) {
 					character = character.character;
 					character = character.character;
 					console.log(character);
 					console.log(character);