Spaces:
Runtime error
Runtime error
import streamlit as st | |
import requests | |
import os | |
import sqlite3 | |
import time | |
import uuid | |
import datetime | |
import hashlib | |
import json | |
import pandas as pd | |
# FastAPI base URL | |
#BASE_URL = "http://localhost:8000" | |
import os | |
API_URL=os.getenv("API_URL") | |
API_TOKEN=os.getenv("API_TOKEN") | |
BASE_URL=API_URL | |
#API_URL = "https://api-inference.huggingface.co/models/your-username/your-private-model" | |
headers = {"Authorization":f"Bearer {API_TOKEN}"} | |
def query(payload): | |
response = requests.post(API_URL, headers=headers, json=payload) | |
return response.json() | |
#data = query({"inputs": "Hello, how are you?"}) | |
#print(data) | |
st.title("Generative AI Demos") | |
def generate_unique_hash(filename: str, uuid: str) -> str: | |
# Generate a UUID for the session or device | |
device_uuid = uuid | |
# Get the current date and time | |
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
# Combine filename, current time, and UUID into a single string | |
combined_string = f"{filename}-{current_time}-{device_uuid}" | |
# Generate a hash using SHA256 | |
unique_hash = hashlib.sha256(combined_string.encode()).hexdigest() | |
return unique_hash | |
# Function to generate or retrieve a UUID from local storage | |
uuid_script = """ | |
<script> | |
if (!localStorage.getItem('uuid')) { | |
localStorage.setItem('uuid', '""" + str(uuid.uuid4()) + """'); | |
} | |
const uuid = localStorage.getItem('uuid'); | |
const streamlitUUIDInput = window.parent.document.querySelector('input[data-testid="stTextInput"][aria-label="UUID"]'); | |
if (streamlitUUIDInput) { | |
streamlitUUIDInput.value = uuid; | |
} | |
</script> | |
""" | |
ga_script = """ | |
<!-- Google tag (gtag.js) --> | |
<script async src="https://www.googletagmanager.com/gtag/js?id=G-PWP4PRW5G5"></script> | |
<script> | |
window.dataLayer = window.dataLayer || []; | |
function gtag(){dataLayer.push(arguments);} | |
gtag('js', new Date()); | |
gtag('config', 'G-PWP4PRW5G5'); | |
</script> | |
""" | |
# Add Google Analytics to the Streamlit app | |
st.components.v1.html(ga_script, height=0, width=0) | |
# Execute the JavaScript in the Streamlit app | |
st.components.v1.html(uuid_script, height=0, width=0) | |
# Store and display UUID in a non-editable text field using session state | |
if 'uuid' not in st.session_state: | |
st.session_state['uuid'] = str(uuid.uuid4()) | |
uuid_from_js = st.session_state['uuid'] | |
# Retrieve UUID from DOM | |
if uuid_from_js is None: | |
st.error("Unable to retrieve UUID from the browser.") | |
else: | |
# Display UUID in a non-editable text field | |
st.text_input("Your UUID", value=uuid_from_js, disabled=True) | |
# Define tabs | |
tab1, tab2,tab3 = st.tabs(["Review Analyzer", "Presentation Creator","Semantic Search"]) | |
with tab1: | |
st.header("Review Analyzer") | |
uploaded_file = st.file_uploader("Upload your reviews CSV file", type=["csv"],key=2) | |
if uploaded_file is not None: | |
en1 = generate_unique_hash(uploaded_file.name, uuid_from_js) | |
files = {"file": (en1, uploaded_file.getvalue(), "text/csv")} | |
st.info("Calling model inference. Please wait...") | |
response = requests.post(f"{BASE_URL}/upload/", files=files, headers=headers) | |
if response.status_code == 200: | |
st.info("Processing started. Please wait...") | |
# Poll for completion | |
while True: | |
status_response = requests.get(f"{BASE_URL}/status/{en1}", headers=headers) | |
if status_response.status_code == 200 and (status_response.json()["status"] == "complete" or status_response.json()["status"] == "error"): | |
if status_response.json()["status"] == "complete": | |
st.success("File processed successfully.") | |
download_response = requests.get(f"{BASE_URL}/download/{en1}", headers=headers) | |
if download_response.status_code == 200: | |
st.download_button( | |
label="Download Processed File", | |
data=download_response.content, | |
file_name=f"processed_{en1}", | |
mime="text/csv" | |
) | |
break | |
time.sleep(10) | |
else: | |
st.error("Failed to upload file for processing.") | |
with tab2: | |
st.header("Presentation Creator") | |
# Input URL for presentation creation | |
presentation_url = st.text_input("Enter the URL for the presentation content") | |
if presentation_url: | |
#unique_id = generate_unique_hash(presentation_url, str(uuid.uuid4())) | |
st.info("Creating presentation. Please wait...") | |
# Mock payload for processing the URL | |
payload = {"url": presentation_url, "id": uuid_from_js} | |
response = requests.post(f"{BASE_URL}/presentation_creator", json=payload, headers=headers) | |
print("response",response) | |
if response.status_code == 200: | |
st.info("Processing started. Please wait...") | |
unique_id=response.json()["filename"] | |
# Poll for completion | |
print("unique id is ",unique_id,BASE_URL) | |
while True: | |
status_response = requests.get(f"{BASE_URL}/status/{unique_id}", headers=headers) | |
print("status_response",status_response) | |
if status_response.status_code == 200 and (status_response.json()["status"] == "complete" or status_response.json()["status"] == "error"): | |
if status_response.json()["status"] == "complete": | |
st.success("Presentation created successfully.") | |
download_response = requests.get(f"{BASE_URL}/download/{unique_id}", headers=headers) | |
if download_response.status_code == 200: | |
st.download_button( | |
label="Download Presentation File", | |
data=download_response.content, | |
file_name=f"presentation_{unique_id}.pptx", | |
mime="application/pdf" | |
) | |
else: | |
st.error("error in downloading the presentation file ") | |
else: | |
st.error("error in creating presentation") | |
break | |
time.sleep(10) | |
else: | |
st.error("Failed to create presentation.") | |
with tab3: | |
st.header("Semantic Search") | |
# Create a form for the inputs and submit button | |
with st.form(key='semantic_search_form'): | |
# Input URL for presentation creation | |
presentation_url = st.text_input("Enter the URL for the semantic search") | |
search_query = st.text_input("Enter your query") | |
# Submit button inside the form | |
submit_button = st.form_submit_button(label="Submit") | |
if submit_button: | |
if presentation_url and search_query: | |
#unique_id = generate_unique_hash(presentation_url, str(uuid.uuid4())) | |
st.info("Performing semantic search. Please wait...") | |
# Mock payload for processing the URL | |
payload = {"url": presentation_url, "id": uuid_from_js,"search_query":search_query} | |
response = requests.post(f"{BASE_URL}/semantic_search", json=payload, headers=headers) | |
print("response",response.json()) | |
if response.status_code == 200: | |
st.info("Processing started. Please wait...") | |
unique_id=response.json()["filename"] | |
# Poll for completion | |
print("unique id is ",unique_id,BASE_URL) | |
while True: | |
status_response = requests.get(f"{BASE_URL}/status/{unique_id}", headers=headers) | |
print("status_response",status_response.json()) | |
if status_response.status_code == 200 and (status_response.json()["status"] == "complete" or status_response.json()["status"] == "error"): | |
if status_response.json()["status"] == "complete": | |
st.success("Presentation created successfully.") | |
download_response = requests.get(f"{BASE_URL}/download/{unique_id}", headers=headers) | |
if download_response.status_code == 200: | |
#print("download_response",download_response.content) | |
# Load JSON data into a Python list of dictionaries | |
data = json.loads(download_response.content) | |
# Convert the list of dictionaries to a DataFrame | |
df = pd.DataFrame(data) | |
df = df["page_content"] | |
# Display the DataFrame in Streamlit as an interactive dataframe | |
#st.dataframe(df) | |
df = df.str.split(' ##### ', 1).str[1].str.strip() | |
# Alternatively, display it as a static table | |
st.table(df) | |
else: | |
st.error("error in downloading the presentation file ") | |
else: | |
st.error("error in creating presentation") | |
break | |
time.sleep(2) | |
else: | |
st.error("Failed to create presentation.") | |
else: | |
st.error("Please enter both a URL and a query.") | |
# uploaded_file = st.file_uploader("Upload your reviews CSV file", type=["csv"],key=1) | |
# if uploaded_file is not None: | |
# # Save uploaded file to FastAPI | |
# en1 = generate_unique_hash(uploaded_file.name, uuid_from_js) | |
# files = {"file": (en1, uploaded_file.getvalue(), "text/csv")} | |
# st.info("Calling model inference. Please wait...") | |
# response = requests.post(f"{BASE_URL}/upload/", files=files,headers=headers) | |
# print("response to file upload is ",response) | |
# if response.status_code == 200: | |
# st.info("Processing started. Please wait...") | |
# # Poll for completion | |
# while True: | |
# status_response = requests.get(f"{BASE_URL}/status/{en1}",headers=headers) | |
# if status_response.status_code == 200 and (status_response.json()["status"] == "complete" or status_response.json()["status"]=="error"): | |
# if status_response.json()["status"] == "complete": | |
# st.success("File processed successfully.") | |
# download_response = requests.get(f"{BASE_URL}/download/{en1}",headers=headers) | |
# if download_response.status_code == 200: | |
# st.download_button( | |
# label="Download Processed File", | |
# data=download_response.content, | |
# file_name=f"processed_{en1}", | |
# mime="text/csv" | |
# ) | |
# break | |
# time.sleep(10) | |
# else: | |
# st.error("Failed to upload file for processing.") |