Timothy Jaeryang Baek 5 달 전
부모
커밋
370f97b44e
4개의 변경된 파일52개의 추가작업 그리고 34개의 파일을 삭제
  1. 1 1
      package.json
  2. 5 5
      pyproject.toml
  3. 31 27
      src/lib/components/admin/Users/UserList/UserChatsModal.svelte
  4. 15 1
      src/lib/components/common/RichTextInput/AutoCompletion.js

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 	"name": "open-webui",
-	"version": "0.4.6",
+	"version": "0.4.7",
 	"private": true,
 	"scripts": {
 		"dev": "npm run pyodide:fetch && vite dev --host",

+ 5 - 5
pyproject.toml

@@ -9,7 +9,7 @@ dependencies = [
     "fastapi==0.111.0",
     "uvicorn[standard]==0.30.6",
     "pydantic==2.9.2",
-    "python-multipart==0.0.17",
+    "python-multipart==0.0.18",
 
     "Flask==3.0.3",
     "Flask-Cors==5.0.0",
@@ -19,13 +19,13 @@ dependencies = [
     "passlib[bcrypt]==1.7.4",
 
     "requests==2.32.3",
-    "aiohttp==3.10.8",
+    "aiohttp==3.11.8",
     "async-timeout",
     "aiocache",
     "aiofiles",
 
     "sqlalchemy==2.0.32",
-    "alembic==1.13.2",
+    "alembic==1.14.0",
     "peewee==3.17.6",
     "peewee-migrate==1.12.2",
     "psycopg2-binary==2.9.9",
@@ -51,11 +51,11 @@ dependencies = [
 
     "fake-useragent==1.5.1",
     "chromadb==0.5.15",
-    "pymilvus==2.4.9",
+    "pymilvus==2.5.0",
     "qdrant-client~=1.12.0",
     "opensearch-py==2.7.1",
 
-    "sentence-transformers==3.2.0",
+    "sentence-transformers==3.3.1",
     "colbert-ai==0.2.21",
     "einops==0.8.0",
 

+ 31 - 27
src/lib/components/admin/Users/UserList/UserChatsModal.svelte

@@ -9,13 +9,14 @@
 
 	import Modal from '$lib/components/common/Modal.svelte';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
+	import Spinner from '$lib/components/common/Spinner.svelte';
 
 	const i18n = getContext('i18n');
 
 	export let show = false;
 	export let user;
 
-	let chats = [];
+	let chats = null;
 
 	const deleteChatHandler = async (chatId) => {
 		const res = await deleteChatById(localStorage.token, chatId).catch((error) => {
@@ -31,6 +32,8 @@
 				chats = await getChatListByUserId(localStorage.token, user.id);
 			}
 		})();
+	} else {
+		chats = null;
 	}
 
 	let sortKey = 'updated_at'; // default sort key
@@ -46,33 +49,32 @@
 </script>
 
 <Modal size="lg" bind:show>
-	<div>
-		<div class=" flex justify-between dark:text-gray-300 px-5 py-4">
-			<div class=" text-lg font-medium self-center capitalize">
-				{$i18n.t("{{user}}'s Chats", { user: user.name })}
-			</div>
-			<button
-				class="self-center"
-				on:click={() => {
-					show = false;
-				}}
-			>
-				<svg
-					xmlns="http://www.w3.org/2000/svg"
-					viewBox="0 0 20 20"
-					fill="currentColor"
-					class="w-5 h-5"
-				>
-					<path
-						d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
-					/>
-				</svg>
-			</button>
+	<div class=" flex justify-between dark:text-gray-300 px-5 pt-4">
+		<div class=" text-lg font-medium self-center capitalize">
+			{$i18n.t("{{user}}'s Chats", { user: user.name })}
 		</div>
-		<hr class=" dark:border-gray-850" />
+		<button
+			class="self-center"
+			on:click={() => {
+				show = false;
+			}}
+		>
+			<svg
+				xmlns="http://www.w3.org/2000/svg"
+				viewBox="0 0 20 20"
+				fill="currentColor"
+				class="w-5 h-5"
+			>
+				<path
+					d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
+				/>
+			</svg>
+		</button>
+	</div>
 
-		<div class="flex flex-col md:flex-row w-full px-5 py-4 md:space-x-4 dark:text-gray-200">
-			<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
+	<div class="flex flex-col md:flex-row w-full px-5 pt-2 pb-4 md:space-x-4 dark:text-gray-200">
+		<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
+			{#if chats}
 				{#if chats.length > 0}
 					<div class="text-left text-sm w-full mb-4 max-h-[22rem] overflow-y-scroll">
 						<div class="relative overflow-x-auto">
@@ -176,7 +178,9 @@
 						{$i18n.t('has no conversations.')}
 					</div>
 				{/if}
-			</div>
+			{:else}
+				<Spinner />
+			{/if}
 		</div>
 	</div>
 </Modal>

+ 15 - 1
src/lib/components/common/RichTextInput/AutoCompletion.js

@@ -1,3 +1,16 @@
+/*
+Here we initialize the plugin with keyword mapping.
+Intended to handle user interactions seamlessly.
+
+Observe the keydown events for proactive suggestions.
+Provide a mechanism for accepting AI suggestions.
+Evaluate each input change with debounce logic.
+Next, we implement touch and mouse interactions.
+
+Anchor the user experience to intuitive behavior.
+Intelligently reset suggestions on new input.
+*/
+
 import { Extension } from '@tiptap/core'
 import { Plugin, PluginKey } from 'prosemirror-state'
 
@@ -202,4 +215,5 @@ export const AIAutocompletion = Extension.create({
       }),
     ]
   },
-})
+})
+