Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -2,49 +2,41 @@ import streamlit as st
|
|
2 |
import requests
|
3 |
from datetime import datetime
|
4 |
import base64
|
5 |
-
import fitz # PyMuPDF
|
6 |
import os
|
7 |
import re
|
8 |
|
9 |
-
# ตรวจสอบและกำหนดค่าเริ่มต้นให้ st.session_state.dialog_done
|
10 |
if "dialog_done" not in st.session_state:
|
11 |
-
st.session_state.dialog_done = False
|
12 |
|
13 |
-
# ถ้า dialog_done เป็น False ให้แสดงหน้าคำถาม
|
14 |
if not st.session_state.dialog_done:
|
15 |
st.title("เริ่มต้นคำถาม")
|
16 |
st.write("คำถาม: ใครคือคนที่หน้าตาดีที่สุด?")
|
17 |
|
18 |
answer = st.text_input("กรุณาตอบคำถามนี้:")
|
19 |
-
if st.button("ส่งคำตอบ"):
|
20 |
if answer == "พี่ก้องคนหล่อ":
|
21 |
-
st.session_state.dialog_done = True
|
22 |
st.success("คำตอบถูกต้อง! กดปุ่ม 'เข้าสู่หน้าหลัก' เพื่อดำเนินการต่อ")
|
23 |
else:
|
24 |
st.error("คำตอบไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง.")
|
25 |
|
26 |
if st.session_state.dialog_done:
|
27 |
-
# เพิ่มปุ่มเพื่อให้ผู้ใช้กดเข้าสู่หน้าหลัก
|
28 |
if st.button("เข้าสู่หน้าหลัก"):
|
29 |
-
st.experimental_rerun()
|
30 |
|
31 |
else:
|
32 |
-
# เนื้อหาของหน้าหลัก
|
33 |
st.title("AI สนับสนุนความรู้ด้าน PDPA")
|
34 |
st.write("เราสอบถาม AI สืบค้น และสรุป")
|
35 |
|
36 |
-
|
37 |
-
system_prompt = """คุณเป็นผู้ช่วยที่มีความรู้ด้านกฎหมาย PDPA และสามารถให้คำตอบที่เกี่ยวข้องเฉพาะตาม context ที่ได้รับ"""
|
38 |
|
39 |
def clean_text_for_search(text):
|
40 |
-
"""Clean text for better search matching"""
|
41 |
text = re.sub(r'P-\d+\s*$', '', text, flags=re.MULTILINE)
|
42 |
text = re.sub(r'Confidential.*$', '', text, flags=re.MULTILINE)
|
43 |
text = ' '.join(text.split())
|
44 |
return text
|
45 |
|
46 |
def create_highlighted_pdf(pdf_path, search_text, page_number):
|
47 |
-
"""Create a highlighted version of the PDF page"""
|
48 |
try:
|
49 |
search_text = clean_text_for_search(search_text)
|
50 |
doc = fitz.open(pdf_path)
|
@@ -73,7 +65,6 @@ else:
|
|
73 |
return None
|
74 |
|
75 |
def format_file_size(size_in_bytes):
|
76 |
-
"""Convert bytes to human readable format"""
|
77 |
for unit in ['B', 'KB', 'MB', 'GB']:
|
78 |
if size_in_bytes < 1024:
|
79 |
return f"{size_in_bytes:.2f} {unit}"
|
@@ -81,7 +72,6 @@ else:
|
|
81 |
return f"{size_in_bytes:.2f} GB"
|
82 |
|
83 |
def display_search_result(result, index):
|
84 |
-
"""Display a single search result with metadata in an expander"""
|
85 |
with st.expander(f"🔍 Search Result #{index + 1} (Score: {result['score']:.4f})"):
|
86 |
st.markdown("#### 📄 Document Information")
|
87 |
col1, col2 = st.columns(2)
|
@@ -101,9 +91,6 @@ else:
|
|
101 |
st.markdown("#### 📝 Content")
|
102 |
st.markdown(f"```\n{result['text']}\n```")
|
103 |
|
104 |
-
st.markdown("#### 📂 File Location")
|
105 |
-
st.code(result['file_path'], language='plaintext')
|
106 |
-
|
107 |
try:
|
108 |
pdf_path = result['file_path']
|
109 |
if os.path.exists(pdf_path):
|
@@ -129,8 +116,6 @@ else:
|
|
129 |
st.markdown(pdf_display, unsafe_allow_html=True)
|
130 |
else:
|
131 |
st.error("Failed to create highlighted PDF")
|
132 |
-
else:
|
133 |
-
st.error("PDF file not found at the specified location.")
|
134 |
except Exception as e:
|
135 |
st.error(f"Error displaying PDF: {str(e)}")
|
136 |
|
@@ -157,7 +142,7 @@ else:
|
|
157 |
for idx, result in enumerate(search_results):
|
158 |
display_search_result(result, idx)
|
159 |
|
160 |
-
response_text = "\n\n---\n\n".join([f"Text: {result['text']}
|
161 |
|
162 |
except requests.RequestException as e:
|
163 |
st.error(f"Error: {str(e)}")
|
|
|
2 |
import requests
|
3 |
from datetime import datetime
|
4 |
import base64
|
|
|
5 |
import os
|
6 |
import re
|
7 |
|
|
|
8 |
if "dialog_done" not in st.session_state:
|
9 |
+
st.session_state.dialog_done = False
|
10 |
|
|
|
11 |
if not st.session_state.dialog_done:
|
12 |
st.title("เริ่มต้นคำถาม")
|
13 |
st.write("คำถาม: ใครคือคนที่หน้าตาดีที่สุด?")
|
14 |
|
15 |
answer = st.text_input("กรุณาตอบคำถามนี้:")
|
16 |
+
if st.button("ส่งคำตอบ"):
|
17 |
if answer == "พี่ก้องคนหล่อ":
|
18 |
+
st.session_state.dialog_done = True
|
19 |
st.success("คำตอบถูกต้อง! กดปุ่ม 'เข้าสู่หน้าหลัก' เพื่อดำเนินการต่อ")
|
20 |
else:
|
21 |
st.error("คำตอบไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง.")
|
22 |
|
23 |
if st.session_state.dialog_done:
|
|
|
24 |
if st.button("เข้าสู่หน้าหลัก"):
|
25 |
+
st.experimental_rerun()
|
26 |
|
27 |
else:
|
|
|
28 |
st.title("AI สนับสนุนความรู้ด้าน PDPA")
|
29 |
st.write("เราสอบถาม AI สืบค้น และสรุป")
|
30 |
|
31 |
+
system_prompt = "คุณเป็นผู้ช่วยที่มีความรู้ด้านกฎหมาย PDPA และสามารถให้คำตอบที่เกี่ยวข้องเฉพาะตาม context ที่ได้รับ"
|
|
|
32 |
|
33 |
def clean_text_for_search(text):
|
|
|
34 |
text = re.sub(r'P-\d+\s*$', '', text, flags=re.MULTILINE)
|
35 |
text = re.sub(r'Confidential.*$', '', text, flags=re.MULTILINE)
|
36 |
text = ' '.join(text.split())
|
37 |
return text
|
38 |
|
39 |
def create_highlighted_pdf(pdf_path, search_text, page_number):
|
|
|
40 |
try:
|
41 |
search_text = clean_text_for_search(search_text)
|
42 |
doc = fitz.open(pdf_path)
|
|
|
65 |
return None
|
66 |
|
67 |
def format_file_size(size_in_bytes):
|
|
|
68 |
for unit in ['B', 'KB', 'MB', 'GB']:
|
69 |
if size_in_bytes < 1024:
|
70 |
return f"{size_in_bytes:.2f} {unit}"
|
|
|
72 |
return f"{size_in_bytes:.2f} GB"
|
73 |
|
74 |
def display_search_result(result, index):
|
|
|
75 |
with st.expander(f"🔍 Search Result #{index + 1} (Score: {result['score']:.4f})"):
|
76 |
st.markdown("#### 📄 Document Information")
|
77 |
col1, col2 = st.columns(2)
|
|
|
91 |
st.markdown("#### 📝 Content")
|
92 |
st.markdown(f"```\n{result['text']}\n```")
|
93 |
|
|
|
|
|
|
|
94 |
try:
|
95 |
pdf_path = result['file_path']
|
96 |
if os.path.exists(pdf_path):
|
|
|
116 |
st.markdown(pdf_display, unsafe_allow_html=True)
|
117 |
else:
|
118 |
st.error("Failed to create highlighted PDF")
|
|
|
|
|
119 |
except Exception as e:
|
120 |
st.error(f"Error displaying PDF: {str(e)}")
|
121 |
|
|
|
142 |
for idx, result in enumerate(search_results):
|
143 |
display_search_result(result, idx)
|
144 |
|
145 |
+
response_text = "\n\n---\n\n".join([f"Text: {result['text']}" for result in search_results])
|
146 |
|
147 |
except requests.RequestException as e:
|
148 |
st.error(f"Error: {str(e)}")
|