Spaces:
Running
Running
File size: 3,525 Bytes
7405474 3e269ec 7405474 3e269ec 7405474 0a4227c 7405474 5398274 7405474 3e269ec 2d94c1e 3e269ec 7405474 5398274 7405474 5398274 7405474 756b14b 0fa01ec 2d94c1e 5398274 2d94c1e 5398274 7405474 5398274 7405474 3e269ec 7405474 3e269ec 7405474 3e269ec 5398274 2d94c1e 7405474 5398274 0a4227c 5398274 0a4227c |
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 |
import streamlit as st
import os
from pathlib import Path
from PIL import Image
from rag_sec.document_search_system import DocumentSearchSystem
from chainguard.blockchain_logger import BlockchainLogger
from rag_sec.document_search_system import main
# Blockchain Logger
blockchain_logger = BlockchainLogger()
# Initialize DocumentSearchSystem
home_dir = Path(os.getenv("HOME", "/"))
data_dir = home_dir / "data-sets/aclImdb/train"
system = DocumentSearchSystem(
neo4j_uri="neo4j+s://0ca71b10.databases.neo4j.io",
neo4j_user="neo4j",
neo4j_password="HwGDOxyGS1-79nLeTiX5bx5ohoFSpvHCmTv8IRgt-lY"
)
system.retriever.load_documents(data_dir)
# Directory for storing uploaded files
UPLOAD_DIR = "uploaded_files"
os.makedirs(UPLOAD_DIR, exist_ok=True)
# Streamlit Layout
st.title("Memora: Secure File Upload with Blockchain & Neo4j")
st.subheader("Securely upload, organize, and query your files")
# File Upload
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 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
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 transaction
system.neo4j_handler.log_transaction(uploaded_file.name, file_path, blockchain_hash)
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 β")
# Query System
st.subheader("Query Files")
system = main() # Initialize system with Neo4j and load documents
# Query Input
query = st.text_input("Enter your query", placeholder="E.g., 'Good comedy'")
if st.button("Search"):
if query:
# Process the query
result = system.process_query(query)
# Display the results
st.write("Query Status:", result.get("status"))
st.write("Query Response:", result.get("response"))
if "retrieved_documents" in result:
st.write("Retrieved Documents:")
for doc in result["retrieved_documents"]:
st.markdown(f"- {doc}")
if "blockchain_details" in result:
st.write("Blockchain Details:")
st.json(result["blockchain_details"])
if result.get("status") == "rejected":
st.error(f"Query Blocked: {result.get('message')}")
else:
st.warning("Please enter a query to search.")
|