""" ⚖️ Title: 🤖 eRAG-PDPA License: Apache-2.0 This project is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Project Information: - App: eRAG-PDPA - Description: 'eRAG-PDPA: AI supports PDPA knowledge by Lahnmah (NT lahnmah)' - Python Version: 3.8 - SDK: Streamlit (Version: 1.40.1) - App File: app.py - Pinned: True For inquiries or contributions, please contact: amornpan@gmail.com """ import streamlit as st import requests import os import re # Access the variable 'eRAG_access_token' access_token = os.getenv('eRAG_access_token') # Correct way to use the access token value headers = { "Authorization": f"Bearer {access_token}" # Using f-string } st.title('eRAG-PDPA-v1') st.markdown(""" ##### 🤖 AI เพื่อการเรียนรู้พระราชบัญญัติคุ้มครองข้อมูลส่วนบุคคล (PDPA) ได้รับการออกแบบมาเพื่อช่วยให้ผู้ใช้งานเข้าถึงข้อมูลสำคัญได้อย่างรวดเร็วและเข้าใจง่าย โดยระบบสามารถค้นหาและวิเคราะห์ความหมายในเชิงบริบทได้อย่างลึกซึ้ง ทำให้สามารถเข้าใจความเชื่อมโยงและความหมายของข้อมูลได้อย่างแม่นยำ รองรับการเรียนรู้เชิงลึกในประเด็นเกี่ยวกับ PDPA และการคุ้มครองข้อมูลส่วนบุคคลได้อย่างมีประสิทธิภาพ [Powered by NT Lahnmah] """, unsafe_allow_html=True) system_prompt = "คุณเป็นผู้ช่วยที่มีความรู้ด้านกฎหมาย พระราชบัญญัติคุ้มครองข้อมูลส่วนบุคคล (PDPA) และสามารถให้คำตอบที่เกี่ยวข้องเฉพาะตาม context ที่ได้รับ" # Function to format file size def format_file_size(size_in_bytes): for unit in ['B', 'KB', 'MB', 'GB']: if size_in_bytes < 1024: return f"{size_in_bytes:.2f} {unit}" size_in_bytes /= 1024 return f"{size_in_bytes:.2f} GB" # Function to display search results def display_search_result(result, index): with st.expander(f"🔍 Search Result #{index + 1} (Score: {result['score']:.4f})"): st.markdown("#### 📄 Document Information") col1, col2 = st.columns(2) with col1: st.markdown("**File Details:**") st.write(f"• File Name: {result['metadata']['file_name']}") st.write(f"• Page: {result['metadata']['page_label']}") st.write(f"• Type: {result['metadata']['file_type']}") st.write(f"• Size: {format_file_size(result['metadata']['file_size'])}") with col2: st.markdown("**Dates:**") st.write(f"• Created: {result['metadata']['creation_date']}") st.write(f"• Modified: {result['metadata']['last_modified_date']}") st.markdown("#### 📝 Content") st.markdown("""
{}
""".format(result['text']), unsafe_allow_html=True) try: pdf_path = result['file_path'] if os.path.exists(pdf_path): st.markdown("#### 📄 PDF Preview (with highlighted text)") highlighted_pdf = create_highlighted_pdf( pdf_path, result['text'], result['metadata']['page_label'] ) if highlighted_pdf: base64_pdf = base64.b64encode(highlighted_pdf).decode('utf-8') pdf_display = f''' ''' st.markdown(pdf_display, unsafe_allow_html=True) else: st.error("Failed to create highlighted PDF") except Exception as e: st.error(f"Error displaying PDF: {str(e)}") # Custom styles for Streamlit inputs st.markdown(""" """, unsafe_allow_html=True) # Form for user input with st.form(key="input_form"): user_input = st.text_input("ป้อนคำ ข้อความ หรือประโยคที่ต้องการค้นหา:", value="ข้อมูลส่วนบุคคล คืออะไร มีกี่ประเภท", key="input") submit_button = st.form_submit_button("Send") if submit_button: st.write(f"คุณป้อนข้อความ: {user_input}") if submit_button and user_input: try: response = requests.post("http://113.53.253.50:8002/search", json={"query": user_input}, headers=headers) response.raise_for_status() data = response.json() search_results = data["results"] st.markdown("### 🔎 Search Results") for idx, result in enumerate(search_results): display_search_result(result, idx) except requests.RequestException as e: st.error(f"Error: {str(e)}") # Document repository section st.subheader("📄 ไฟล์เอกสารที่ใช้เป็นคลังข้อมูล PDPA") st.markdown( """ - [FAQ-เกี่ยวกับการคุ้มครองข้อมูลส่วนบุคคล-PDPA.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/1.FAQ-%E0%B9%80%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%A7%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B8%B8%E0%B9%89%E0%B8%A1%E0%B8%84%E0%B8%A3%E0%B8%AD%E0%B8%87%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%AA%E0%B9%88%E0%B8%A7%E0%B8%99%E0%B8%9A%E0%B8%B8%E0%B8%84%E0%B8%84%E0%B8%A5-PDPA.pdf) (1.13 MB) - [1612025563SummaryPDPA_DigitalCouncilofThailand.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/1612025563SummaryPDPA_DigitalCouncilofThailand.pdf) (1.35 MB) - [PDPA_Guideline_v_1.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/PDPA_Guideline_v_1.pdf) (10.7 MB) - [T_0024.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/T_0024.pdf) (81.1 kB) - [T_0026.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/T_0026.pdf) (82.6 kB) - [T_0028.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/T_0028.pdf) (105 kB) - [T_0032.pdf](https://huggingface.co/spaces/amornpan/eRAG-PDPA-v1/blob/main/%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3_PDPA/T_0032.pdf) (103 kB) """, unsafe_allow_html=True ) st.subheader("👤 Authors") st.write(""" - Amornpan Phornchaicharoen (amornpan@gmail.com) - Aekanun Thongtae (cto@bangkokfirsttech.com) - Montita Somsoo (montita.fonn@gmail.com) - Jiranuwat Songpad (jiranuwat.song64@gmail.com) - Phongsatorn Somjai (ipongdev@gmail.com) - Benchawan Wangphoomyai (benchaa.27@gmail.com) """)