فهرست منبع

enh: restore tags from chat import

Timothy J. Baek 6 ماه پیش
والد
کامیت
d23252b8a9

+ 2 - 0
backend/open_webui/apps/webui/models/chats.py

@@ -65,6 +65,7 @@ class ChatForm(BaseModel):
 
 
 class ChatImportForm(ChatForm):
+    meta: Optional[dict] = {}
     pinned: Optional[bool] = False
     folder_id: Optional[str] = None
 
@@ -139,6 +140,7 @@ class ChatTable:
                         else "New Chat"
                     ),
                     "chat": form_data.chat,
+                    "meta": form_data.meta,
                     "pinned": form_data.pinned,
                     "folder_id": form_data.folder_id,
                     "created_at": int(time.time()),

+ 10 - 0
backend/open_webui/apps/webui/routers/chats.py

@@ -110,6 +110,16 @@ async def create_new_chat(form_data: ChatForm, user=Depends(get_verified_user)):
 async def import_chat(form_data: ChatImportForm, user=Depends(get_verified_user)):
     try:
         chat = Chats.import_chat(user.id, form_data)
+        if chat:
+            tags = chat.meta.get("tags", [])
+            for tag_id in tags:
+                tag_id = tag_id.replace(" ", "_").lower()
+                if (
+                    tag_id != "none"
+                    and Tags.get_tag_by_name_and_user_id(tag_id, user.id) is None
+                ):
+                    Tags.insert_new_tag(tag_id, user.id)
+
         return ChatResponse(**chat.model_dump())
     except Exception as e:
         log.exception(e)

+ 2 - 0
src/lib/apis/chats/index.ts

@@ -35,6 +35,7 @@ export const createNewChat = async (token: string, chat: object) => {
 export const importChat = async (
 	token: string,
 	chat: object,
+	meta: object | null,
 	pinned?: boolean,
 	folderId?: string | null
 ) => {
@@ -49,6 +50,7 @@ export const importChat = async (
 		},
 		body: JSON.stringify({
 			chat: chat,
+			meta: meta ?? {},
 			pinned: pinned,
 			folder_id: folderId
 		})

+ 2 - 1
src/lib/components/layout/Sidebar.svelte

@@ -211,8 +211,9 @@
 	const importChatHandler = async (items, pinned = false, folderId = null) => {
 		console.log('importChatHandler', items, pinned, folderId);
 		for (const item of items) {
+			console.log(item);
 			if (item.chat) {
-				await importChat(localStorage.token, item.chat, pinned, folderId);
+				await importChat(localStorage.token, item.chat, item?.meta ?? {}, pinned, folderId);
 			}
 		}