Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
import gradio as gr
|
4 |
from bs4 import BeautifulSoup
|
5 |
import requests
|
6 |
-
from transformers import pipeline
|
7 |
from sentence_transformers import SentenceTransformer
|
8 |
import faiss
|
9 |
import numpy as np
|
@@ -100,37 +99,43 @@ def vectorize_and_index(bookmarks):
|
|
100 |
return faiss_idx, embeddings
|
101 |
|
102 |
def display_bookmarks():
|
103 |
-
|
104 |
-
classes = []
|
105 |
for i, bookmark in enumerate(bookmarks):
|
|
|
106 |
status = "Dead Link" if bookmark.get('dead_link') else "Active"
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
|
121 |
def process_uploaded_file(file):
|
122 |
global bookmarks, faiss_index
|
123 |
if file is None:
|
124 |
-
return "Please upload a bookmarks HTML file.",
|
125 |
try:
|
126 |
file_content = file.decode('utf-8')
|
127 |
except UnicodeDecodeError:
|
128 |
-
return "Error decoding the file. Please ensure it's a valid HTML file.",
|
129 |
|
130 |
bookmarks = parse_bookmarks(file_content)
|
131 |
|
132 |
if not bookmarks:
|
133 |
-
return "No bookmarks found in the uploaded file.",
|
134 |
|
135 |
# Asynchronously fetch bookmark info
|
136 |
asyncio.run(process_bookmarks_async(bookmarks))
|
@@ -157,13 +162,14 @@ def chatbot_response(user_query):
|
|
157 |
for idx in I[0]:
|
158 |
if idx < len(bookmarks):
|
159 |
bookmark = bookmarks[idx]
|
160 |
-
|
|
|
161 |
return response.strip()
|
162 |
|
163 |
def edit_bookmark(bookmark_idx, new_title, new_url):
|
164 |
global faiss_index
|
165 |
try:
|
166 |
-
bookmark_idx = int(bookmark_idx)
|
167 |
if bookmark_idx < 0 or bookmark_idx >= len(bookmarks):
|
168 |
return "Invalid bookmark index.", display_bookmarks()
|
169 |
bookmarks[bookmark_idx]['title'] = new_title
|
@@ -182,7 +188,7 @@ def edit_bookmark(bookmark_idx, new_title, new_url):
|
|
182 |
def delete_bookmark(bookmark_idx):
|
183 |
global faiss_index
|
184 |
try:
|
185 |
-
bookmark_idx = int(bookmark_idx)
|
186 |
if bookmark_idx < 0 or bookmark_idx >= len(bookmarks):
|
187 |
return "Invalid bookmark index.", display_bookmarks()
|
188 |
bookmarks.pop(bookmark_idx)
|
@@ -199,22 +205,22 @@ def delete_bookmark(bookmark_idx):
|
|
199 |
|
200 |
def build_app():
|
201 |
with gr.Blocks(css="app.css") as demo:
|
202 |
-
gr.Markdown("<h1
|
203 |
|
204 |
with gr.Tab("Upload and Process Bookmarks"):
|
205 |
upload = gr.File(label="Upload Bookmarks HTML File", type='binary')
|
206 |
process_button = gr.Button("Process Bookmarks")
|
207 |
output_text = gr.Textbox(label="Output")
|
208 |
-
|
209 |
|
210 |
-
def
|
211 |
-
message,
|
212 |
-
return message,
|
213 |
|
214 |
process_button.click(
|
215 |
-
|
216 |
inputs=upload,
|
217 |
-
outputs=[output_text,
|
218 |
)
|
219 |
|
220 |
with gr.Tab("Chat with Bookmarks"):
|
@@ -230,41 +236,41 @@ def build_app():
|
|
230 |
|
231 |
with gr.Tab("Manage Bookmarks"):
|
232 |
manage_output = gr.Textbox(label="Manage Output")
|
233 |
-
|
234 |
refresh_button = gr.Button("Refresh Bookmark List")
|
235 |
|
236 |
with gr.Row():
|
237 |
-
index_input = gr.Number(label="Bookmark Index")
|
238 |
new_title_input = gr.Textbox(label="New Title")
|
239 |
new_url_input = gr.Textbox(label="New URL")
|
240 |
|
241 |
edit_button = gr.Button("Edit Bookmark")
|
242 |
delete_button = gr.Button("Delete Bookmark")
|
243 |
|
244 |
-
def
|
245 |
-
|
246 |
-
return
|
247 |
|
248 |
refresh_button.click(
|
249 |
-
|
250 |
inputs=None,
|
251 |
-
outputs=
|
252 |
)
|
253 |
|
254 |
edit_button.click(
|
255 |
edit_bookmark,
|
256 |
inputs=[index_input, new_title_input, new_url_input],
|
257 |
-
outputs=[manage_output,
|
258 |
)
|
259 |
|
260 |
delete_button.click(
|
261 |
delete_bookmark,
|
262 |
inputs=index_input,
|
263 |
-
outputs=[manage_output,
|
264 |
)
|
265 |
|
266 |
-
# Initial load of the bookmarks
|
267 |
-
|
268 |
|
269 |
demo.launch()
|
270 |
|
|
|
3 |
import gradio as gr
|
4 |
from bs4 import BeautifulSoup
|
5 |
import requests
|
|
|
6 |
from sentence_transformers import SentenceTransformer
|
7 |
import faiss
|
8 |
import numpy as np
|
|
|
99 |
return faiss_idx, embeddings
|
100 |
|
101 |
def display_bookmarks():
|
102 |
+
cards = ''
|
|
|
103 |
for i, bookmark in enumerate(bookmarks):
|
104 |
+
index = i + 1 # Start index at 1
|
105 |
status = "Dead Link" if bookmark.get('dead_link') else "Active"
|
106 |
+
card_class = "card dead-link" if bookmark.get('dead_link') else "card"
|
107 |
+
title = bookmark['title']
|
108 |
+
url = bookmark['url']
|
109 |
+
etag = bookmark.get('etag', 'N/A')
|
110 |
+
summary = bookmark.get('summary', '')
|
111 |
+
|
112 |
+
card_html = f'''
|
113 |
+
<div class="{card_class}">
|
114 |
+
<div class="card-content">
|
115 |
+
<h3>{index}. {title}</h3>
|
116 |
+
<p><strong>URL:</strong> <a href="{url}" target="_blank">{url}</a></p>
|
117 |
+
<p><strong>Status:</strong> {status}</p>
|
118 |
+
<p><strong>ETag:</strong> {etag}</p>
|
119 |
+
<p><strong>Summary:</strong> {summary}</p>
|
120 |
+
</div>
|
121 |
+
</div>
|
122 |
+
'''
|
123 |
+
cards += card_html
|
124 |
+
return cards
|
125 |
|
126 |
def process_uploaded_file(file):
|
127 |
global bookmarks, faiss_index
|
128 |
if file is None:
|
129 |
+
return "Please upload a bookmarks HTML file.", ''
|
130 |
try:
|
131 |
file_content = file.decode('utf-8')
|
132 |
except UnicodeDecodeError:
|
133 |
+
return "Error decoding the file. Please ensure it's a valid HTML file.", ''
|
134 |
|
135 |
bookmarks = parse_bookmarks(file_content)
|
136 |
|
137 |
if not bookmarks:
|
138 |
+
return "No bookmarks found in the uploaded file.", ''
|
139 |
|
140 |
# Asynchronously fetch bookmark info
|
141 |
asyncio.run(process_bookmarks_async(bookmarks))
|
|
|
162 |
for idx in I[0]:
|
163 |
if idx < len(bookmarks):
|
164 |
bookmark = bookmarks[idx]
|
165 |
+
index = bookmarks.index(bookmark) + 1 # Start index at 1
|
166 |
+
response += f"{index}. Title: {bookmark['title']}\nURL: {bookmark['url']}\nSummary: {bookmark['summary']}\n\n"
|
167 |
return response.strip()
|
168 |
|
169 |
def edit_bookmark(bookmark_idx, new_title, new_url):
|
170 |
global faiss_index
|
171 |
try:
|
172 |
+
bookmark_idx = int(bookmark_idx) - 1 # Adjust index to match list (starting at 0)
|
173 |
if bookmark_idx < 0 or bookmark_idx >= len(bookmarks):
|
174 |
return "Invalid bookmark index.", display_bookmarks()
|
175 |
bookmarks[bookmark_idx]['title'] = new_title
|
|
|
188 |
def delete_bookmark(bookmark_idx):
|
189 |
global faiss_index
|
190 |
try:
|
191 |
+
bookmark_idx = int(bookmark_idx) - 1 # Adjust index to match list (starting at 0)
|
192 |
if bookmark_idx < 0 or bookmark_idx >= len(bookmarks):
|
193 |
return "Invalid bookmark index.", display_bookmarks()
|
194 |
bookmarks.pop(bookmark_idx)
|
|
|
205 |
|
206 |
def build_app():
|
207 |
with gr.Blocks(css="app.css") as demo:
|
208 |
+
gr.Markdown("<h1>Bookmark Manager App</h1>")
|
209 |
|
210 |
with gr.Tab("Upload and Process Bookmarks"):
|
211 |
upload = gr.File(label="Upload Bookmarks HTML File", type='binary')
|
212 |
process_button = gr.Button("Process Bookmarks")
|
213 |
output_text = gr.Textbox(label="Output")
|
214 |
+
bookmark_display = gr.HTML(label="Bookmarks")
|
215 |
|
216 |
+
def update_bookmark_display(file):
|
217 |
+
message, html_content = process_uploaded_file(file)
|
218 |
+
return message, html_content
|
219 |
|
220 |
process_button.click(
|
221 |
+
update_bookmark_display,
|
222 |
inputs=upload,
|
223 |
+
outputs=[output_text, bookmark_display]
|
224 |
)
|
225 |
|
226 |
with gr.Tab("Chat with Bookmarks"):
|
|
|
236 |
|
237 |
with gr.Tab("Manage Bookmarks"):
|
238 |
manage_output = gr.Textbox(label="Manage Output")
|
239 |
+
bookmark_display_manage = gr.HTML(label="Bookmarks")
|
240 |
refresh_button = gr.Button("Refresh Bookmark List")
|
241 |
|
242 |
with gr.Row():
|
243 |
+
index_input = gr.Number(label="Bookmark Index (Starting from 1)", precision=0)
|
244 |
new_title_input = gr.Textbox(label="New Title")
|
245 |
new_url_input = gr.Textbox(label="New URL")
|
246 |
|
247 |
edit_button = gr.Button("Edit Bookmark")
|
248 |
delete_button = gr.Button("Delete Bookmark")
|
249 |
|
250 |
+
def update_manage_display():
|
251 |
+
html_content = display_bookmarks()
|
252 |
+
return html_content
|
253 |
|
254 |
refresh_button.click(
|
255 |
+
update_manage_display,
|
256 |
inputs=None,
|
257 |
+
outputs=bookmark_display_manage
|
258 |
)
|
259 |
|
260 |
edit_button.click(
|
261 |
edit_bookmark,
|
262 |
inputs=[index_input, new_title_input, new_url_input],
|
263 |
+
outputs=[manage_output, bookmark_display_manage]
|
264 |
)
|
265 |
|
266 |
delete_button.click(
|
267 |
delete_bookmark,
|
268 |
inputs=index_input,
|
269 |
+
outputs=[manage_output, bookmark_display_manage]
|
270 |
)
|
271 |
|
272 |
+
# Initial load of the bookmarks display
|
273 |
+
bookmark_display_manage.value = update_manage_display()
|
274 |
|
275 |
demo.launch()
|
276 |
|