Spaces:
Running
Running
File size: 5,801 Bytes
b4b7246 7405474 b4b7246 a463e6e 3e269ec 7405474 b94e464 7405474 5398274 7405474 b94e464 3e269ec 759c15a 8ce7f13 759c15a 7405474 b94e464 b4b7246 b94e464 7405474 8ce7f13 b4b7246 a463e6e b4b7246 8ce7f13 b4b7246 8ce7f13 b4b7246 8ce7f13 b4b7246 6dd2090 8ce7f13 6dd2090 759c15a 6dd2090 759c15a 0a4227c 6dd2090 759c15a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
from pathlib import Path
import streamlit as st
from googlesearch import search
import pandas as pd
import os
from rag_sec.document_search_system import DocumentSearchSystem
from chainguard.blockchain_logger import BlockchainLogger
from PIL import Image
# Blockchain Logger
blockchain_logger = BlockchainLogger()
# Directory for storing uploaded files
UPLOAD_DIR = "uploaded_files"
os.makedirs(UPLOAD_DIR, exist_ok=True)
# Initialize DocumentSearchSystem
@st.cache_resource
def initialize_system():
"""Initialize the DocumentSearchSystem and load documents."""
system = DocumentSearchSystem(
neo4j_uri="neo4j+s://0ca71b10.databases.neo4j.io",
neo4j_user="neo4j",
neo4j_password="HwGDOxyGS1-79nLeTiX5bx5ohoFSpvHCmTv8IRgt-lY"
)
system.retriever.load_documents()
return system
# Initialize the system
system = initialize_system()
st.title("Memora: Secure File Upload and Search with Blockchain & Neo4j")
st.subheader("Personalized news and global updates at your fingertips")
# File Upload Section
uploaded_files = st.file_uploader("Upload your files", accept_multiple_files=True, type=['jpg', 'jpeg', 'png', 'mp4', 'avi'])
if uploaded_files:
for uploaded_file in uploaded_files:
# Save file locally
file_path = os.path.join(UPLOAD_DIR, uploaded_file.name)
with open(file_path, "wb") as f:
f.write(uploaded_file.getbuffer())
st.success(f"File saved locally: {file_path}")
# Display uploaded file details
if uploaded_file.type.startswith('image'):
image = Image.open(uploaded_file)
st.image(image, caption=uploaded_file.name, use_column_width=True)
# Metadata Input
album = st.text_input(f"Album for {uploaded_file.name}", "Default Album")
tags = st.text_input(f"Tags for {uploaded_file.name} (comma-separated)", "")
# Log Metadata and Transaction
if st.button(f"Log Metadata for {uploaded_file.name}"):
metadata = {"file_name": uploaded_file.name, "tags": tags.split(','), "album": album}
blockchain_details = blockchain_logger.log_data(metadata)
blockchain_hash = blockchain_details.get("block_hash", "N/A")
# Use Neo4jHandler from DocumentSearchSystem to log the transaction
system.neo4j_handler.log_relationships(uploaded_file.name, tags, blockchain_hash, [album])
st.write(f"Metadata logged successfully! Blockchain Details: {blockchain_details}")
# Blockchain Integrity Validation
if st.button("Validate Blockchain Integrity"):
is_valid = blockchain_logger.is_blockchain_valid()
st.write("Blockchain Integrity:", "Valid β
" if is_valid else "Invalid β")
# Document Search Section
st.subheader("Search Documents")
# Google Search: User-Specific News
st.subheader("1. Latest News About You")
user_name = st.text_input("Enter your name or handle to search for recent news", value="Talex Maxim")
if st.button("Search News About Me"):
if user_name:
st.write(f"Searching Google for news about **{user_name}**...")
try:
results = list(search(user_name, num_results=5))
if results:
st.success(f"Top {len(results)} results for '{user_name}':")
user_news_data = {"URL": results}
df_user_news = pd.DataFrame(user_news_data)
st.dataframe(df_user_news)
else:
st.warning("No recent news found about you.")
except Exception as e:
st.error(f"An error occurred during the search: {str(e)}")
else:
st.warning("Please enter your name or handle to search.")
# Google Search: Global News Categories
st.subheader("2. Global News Insights")
categories = ["Technology", "Sports", "Politics", "Entertainment", "Science"]
news_results = {}
if st.button("Fetch Global News"):
try:
for category in categories:
st.write(f"Fetching news for **{category}**...")
try:
category_results = list(search(f"latest {category} news", num_results=3))
news_results[category] = category_results
except Exception as e:
news_results[category] = [f"Error fetching news: {str(e)}"]
# Display results
for category, articles in news_results.items():
st.write(f"### Top News in {category}:")
for idx, article in enumerate(articles, start=1):
st.write(f"{idx}. [Read here]({article})")
except Exception as e:
st.error(f"An error occurred while fetching global news: {str(e)}")
# Document Search
st.subheader("3. Search Documents")
query = st.text_input("Enter your query (e.g., 'sports news', 'machine learning')")
if st.button("Search Documents"):
if query:
result = system.process_query(query)
if result["status"] == "success":
st.success(f"Query processed successfully!")
st.write("### Query Response:")
st.write(result["response"])
st.write("### Retrieved Documents:")
for idx, doc in enumerate(result["retrieved_documents"], start=1):
st.write(f"**Document {idx}:**")
st.write(doc[:500]) # Display the first 500 characters
st.write("### Blockchain Details:")
st.json(result["blockchain_details"])
elif result["status"] == "no_results":
st.warning("No relevant documents found for your query.")
elif result["status"] == "rejected":
st.error(result["message"])
else:
st.warning("Please enter a query to search.")
# Debugging Section
if st.checkbox("Show Debug Information"):
st.write(f"Total documents loaded: {len(system.retriever.documents)}")
|