Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -19,19 +19,17 @@ if "GOOGLE_API_KEY" not in os.environ:
|
|
| 19 |
os.environ["GOOGLE_API_KEY"] = "AIzaSyDJ4vIKuIBIPNHATLxnoHlagXWbsAz-vRs"
|
| 20 |
key = "AIzaSyDJ4vIKuIBIPNHATLxnoHlagXWbsAz-vRs"
|
| 21 |
|
| 22 |
-
###
|
| 23 |
-
|
| 24 |
# Cấu hình API key cho Google GenAI
|
| 25 |
genai.configure(api_key=key)
|
| 26 |
|
| 27 |
vectorstore = get_vectorstore()
|
| 28 |
-
last_vector_docs = None
|
| 29 |
|
| 30 |
def augment_prompt(query: str, k: int = 10):
|
| 31 |
global last_vector_docs
|
| 32 |
retriever = vectorstore.as_retriever(search_kwargs={"k": k})
|
| 33 |
results = retriever.invoke(query)
|
| 34 |
-
# Lưu kết quả để dùng
|
| 35 |
last_vector_docs = results
|
| 36 |
if results:
|
| 37 |
source_knowledge = "\n\n".join([doc.page_content for doc in results])
|
|
@@ -68,12 +66,20 @@ def get_answer(query, queries_list=None):
|
|
| 68 |
messages.append({"role": "model", "parts": [{"text": response_text}]})
|
| 69 |
log_message(messages)
|
| 70 |
|
| 71 |
-
def
|
| 72 |
global last_vector_docs
|
| 73 |
if last_vector_docs is None:
|
| 74 |
return "Chưa có dữ liệu vectorstore được gọi từ get_answer."
|
| 75 |
else:
|
| 76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
|
| 78 |
institutions = ['Tất cả', 'Trường Công Nghệ']
|
| 79 |
categories = ['Tất cả', 'Đề án', 'Chương trình đào tạo']
|
|
@@ -82,21 +88,21 @@ print("Launching on space... This may take some time...")
|
|
| 82 |
|
| 83 |
with gr.Blocks() as demo:
|
| 84 |
with gr.Row():
|
| 85 |
-
#
|
| 86 |
category1 = gr.Dropdown(choices=institutions, label="Trường", value=None)
|
| 87 |
category2 = gr.Dropdown(choices=categories, label="Bạn quan tâm tới", value=None)
|
| 88 |
|
| 89 |
-
#
|
| 90 |
shared_query = gr.Textbox(placeholder="Đặt câu hỏi tại đây", container=False, autoscroll=True, scale=7)
|
| 91 |
-
|
| 92 |
-
# Chat Interface đã sử dụng shared_query
|
| 93 |
chat_interface = gr.ChatInterface(get_answer, textbox=shared_query, type="messages")
|
| 94 |
|
| 95 |
-
#
|
|
|
|
| 96 |
with gr.Row():
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
|
|
|
| 100 |
|
| 101 |
if __name__ == "__main__":
|
| 102 |
demo.launch()
|
|
|
|
| 19 |
os.environ["GOOGLE_API_KEY"] = "AIzaSyDJ4vIKuIBIPNHATLxnoHlagXWbsAz-vRs"
|
| 20 |
key = "AIzaSyDJ4vIKuIBIPNHATLxnoHlagXWbsAz-vRs"
|
| 21 |
|
|
|
|
|
|
|
| 22 |
# Cấu hình API key cho Google GenAI
|
| 23 |
genai.configure(api_key=key)
|
| 24 |
|
| 25 |
vectorstore = get_vectorstore()
|
| 26 |
+
last_vector_docs = None # Lưu kết quả docs từ vectorstore.invoke trong lần gọi get_answer gần nhất
|
| 27 |
|
| 28 |
def augment_prompt(query: str, k: int = 10):
|
| 29 |
global last_vector_docs
|
| 30 |
retriever = vectorstore.as_retriever(search_kwargs={"k": k})
|
| 31 |
results = retriever.invoke(query)
|
| 32 |
+
# Lưu kết quả để dùng cho log và lọc sau này
|
| 33 |
last_vector_docs = results
|
| 34 |
if results:
|
| 35 |
source_knowledge = "\n\n".join([doc.page_content for doc in results])
|
|
|
|
| 66 |
messages.append({"role": "model", "parts": [{"text": response_text}]})
|
| 67 |
log_message(messages)
|
| 68 |
|
| 69 |
+
def filter_vector_docs(keyword: str):
|
| 70 |
global last_vector_docs
|
| 71 |
if last_vector_docs is None:
|
| 72 |
return "Chưa có dữ liệu vectorstore được gọi từ get_answer."
|
| 73 |
else:
|
| 74 |
+
if not keyword.strip():
|
| 75 |
+
# Nếu không nhập gì, trả về tất cả
|
| 76 |
+
filtered = [doc.page_content for doc in last_vector_docs]
|
| 77 |
+
else:
|
| 78 |
+
# Lọc các chunk chứa từ khoá (không phân biệt chữ hoa thường)
|
| 79 |
+
filtered = [doc.page_content for doc in last_vector_docs if keyword.lower() in doc.page_content.lower()]
|
| 80 |
+
if not filtered:
|
| 81 |
+
return f"Không có kết quả chứa từ khoá '{keyword}'."
|
| 82 |
+
return "\n\n".join(filtered)
|
| 83 |
|
| 84 |
institutions = ['Tất cả', 'Trường Công Nghệ']
|
| 85 |
categories = ['Tất cả', 'Đề án', 'Chương trình đào tạo']
|
|
|
|
| 88 |
|
| 89 |
with gr.Blocks() as demo:
|
| 90 |
with gr.Row():
|
| 91 |
+
# Dropdown category nếu cần
|
| 92 |
category1 = gr.Dropdown(choices=institutions, label="Trường", value=None)
|
| 93 |
category2 = gr.Dropdown(choices=categories, label="Bạn quan tâm tới", value=None)
|
| 94 |
|
| 95 |
+
# Chat Interface sử dụng ô nhập chung
|
| 96 |
shared_query = gr.Textbox(placeholder="Đặt câu hỏi tại đây", container=False, autoscroll=True, scale=7)
|
|
|
|
|
|
|
| 97 |
chat_interface = gr.ChatInterface(get_answer, textbox=shared_query, type="messages")
|
| 98 |
|
| 99 |
+
# Phần lọc các chunk: ô prompt nhập từ khoá và nút "Tìm trích xuất" nằm cùng hàng,
|
| 100 |
+
# kết quả sẽ hiển thị ở ô bên dưới. Nếu để trống, hiển thị toàn bộ.
|
| 101 |
with gr.Row():
|
| 102 |
+
filter_prompt = gr.Textbox(label="Nhập từ khoá", placeholder="Nhập từ khoá để lọc (để trống để hiển thị tất cả)", interactive=True)
|
| 103 |
+
filter_button = gr.Button("Tìm trích xuất")
|
| 104 |
+
filter_output = gr.Textbox(label="Content", interactive=False)
|
| 105 |
+
filter_button.click(fn=filter_vector_docs, inputs=filter_prompt, outputs=filter_output)
|
| 106 |
|
| 107 |
if __name__ == "__main__":
|
| 108 |
demo.launch()
|