|
import streamlit as st |
|
import pandas as pd |
|
import PyPDF2 |
|
import io |
|
import os |
|
from dotenv import load_dotenv |
|
import requests |
|
import time |
|
|
|
|
|
load_dotenv() |
|
PERPLEXITY_API_KEY = os.getenv("PERPLEXITY_API_KEY") |
|
PERPLEXITY_API_URL = "https://api.perplexity.ai/chat/completions" |
|
|
|
def call_perplexity_api(prompt: str) -> str: |
|
"""Call Perplexity AI with a prompt, return the text response if successful.""" |
|
headers = { |
|
"Authorization": f"Bearer {PERPLEXITY_API_KEY}", |
|
"Content-Type": "application/json", |
|
} |
|
|
|
payload = { |
|
"model": "llama-3.1-sonar-small-128k-chat", |
|
"messages": [{"role": "user", "content": prompt}], |
|
"temperature": 0.3, |
|
} |
|
|
|
try: |
|
response = requests.post(PERPLEXITY_API_URL, headers=headers, json=payload) |
|
response.raise_for_status() |
|
return response.json()["choices"][0]["message"]["content"] |
|
except Exception as e: |
|
st.error(f"API Error: {str(e)}") |
|
return "" |
|
|
|
|
|
|
|
def main(): |
|
st.title("Research Corpus Synthesis Tool") |
|
|
|
|
|
uploaded_file = st.file_uploader("Upload CSV file", type="csv") |
|
|
|
if uploaded_file: |
|
if st.button("Process CSV"): |
|
|
|
progress_bar = st.progress(0) |
|
status_text = st.empty() |
|
|
|
|
|
df = pd.read_csv(uploaded_file) |
|
|
|
|
|
results = [] |
|
|
|
|
|
for i, column in enumerate(df.columns): |
|
status_text.text(f"Processing column: {column}") |
|
|
|
|
|
text = " ".join(df[column].astype(str).tolist()) |
|
|
|
|
|
prompt = f"You are a Professional Researcher and Analyser with 10 yrs of Experience.Find details and Elaborate on Top Trends,Theories,Methods,FrameWorks with this topic ({column}):\n\n{text[:5000]}" |
|
|
|
|
|
result = call_perplexity_api(prompt) |
|
results.append({"Column": column, "Result": result}) |
|
|
|
|
|
progress = (i + 1) / len(df.columns) |
|
progress_bar.progress(progress) |
|
|
|
|
|
results_df = pd.DataFrame(results) |
|
|
|
|
|
csv = results_df.to_csv(index=False) |
|
|
|
|
|
st.download_button( |
|
label="Download Results as CSV", |
|
data=csv, |
|
file_name="column_trends_analysis.csv", |
|
mime="text/csv", |
|
) |
|
|
|
st.subheader("Analysis Results") |
|
styled_df = results_df.style.set_properties(**{ |
|
'background-color': '#f9f9f9', |
|
'color': '#333', |
|
'border-color': 'black', |
|
'border-width': '1px', |
|
'border-style': 'solid', |
|
'font-family': 'Arial, sans-serif', |
|
'font-size': '14px', |
|
'text-align': 'left', |
|
'padding': '10px' |
|
}) |
|
st.dataframe(styled_df) |
|
status_text.text("Processing complete!") |
|
progress_bar.progress(1.0) |
|
|
|
if __name__ == "__main__": |
|
main() |