| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| import streamlit as st |
| import pandas as pd |
| import requests |
| import json |
| import os |
| from dotenv import load_dotenv |
|
|
| |
| 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 "" |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| """ |
| For each column in the DataFrame, generate a research paper section (200-500 words) |
| that addresses the data in that column. Return a dict mapping column -> text. |
| """ |
| paper_sections = {} |
| for col in df.columns: |
| |
| col_values = df[col].dropna().astype(str).tolist() |
| |
| print(col) |
| sample_text = " | ".join(col_values[:50]) |
| prompt = f""" |
| Topic: {topic} |
| Journal/Conference: {journal} |
| Format: {format} |
| Gaps Analysis: {gaps_analysis} |
| Column: {col} |
| Data Sample: {sample_text} |
| |
| Generate a professional research paper section for the above column. |
| The section should be at least 100 words and at most 150 words, |
| focusing on key insights, challenges, and potential research angles. |
| Integrate the data samples as context for the content. |
| """ |
| section_text = call_perplexity_api(prompt) |
| paper_sections[col] = section_text.strip() if section_text else "" |
| return paper_sections |
|
|
|
|
| |
| """ |
| Format the generated paper into a Markdown string. |
| Add the topic, journal, and format as the main title, each column name as a heading, |
| and the corresponding text as paragraph content. |
| """ |
| md_text = f"# Research Paper on: {topic}\n\n" |
| md_text += f"## Journal/Conference: {journal}\n\n" |
| md_text += f"## Format: {format}\n\n" |
| for col, content in paper_dict.items(): |
| md_text += f"### {col}\n{content}\n\n" |
| return md_text |
|
|
|
|
| |
| st.title("Corpus-based Research Paper Generator") |
|
|
| topic_input = st.text_input("Enter the topic for the research paper:") |
| journal_input = st.text_input("Enter the Journal/Conference aimed to publish:") |
| format_input = st.text_input("Enter the format of the research paper:") |
| gaps_analysis_file = st.file_uploader("Upload Gaps Analysis (.txt file)", type="txt") |
| gaps_analysis = "" |
| if gaps_analysis_file: |
| gaps_analysis = gaps_analysis_file.getvalue().decode("utf-8") |
|
|
| uploaded_file = st.file_uploader("Upload CSV corpus file", type="csv") |
| if uploaded_file: |
| df = pd.read_csv(uploaded_file) |
| st.write("### Preview of Uploaded Data") |
| st.dataframe(df.head()) |
|
|
| if st.button("Generate Research Paper"): |
| st.info("Generating paper based on the columns of your corpus...") |
| with st.spinner("Calling Perplexity AI..."): |
| paper = generate_research_paper(df, gaps_analysis, topic_input, journal_input, format_input) |
| if paper: |
| formatted_paper = format_paper(paper, topic_input, journal_input, format_input) |
| st.success("Research Paper Generated Successfully!") |
| st.write(formatted_paper) |
|
|
| st.download_button( |
| label="Download Paper as Markdown", |
| data=formatted_paper, |
| file_name="research_paper.md", |
| mime="text/markdown", |
| ) |
| else: |
| st.error( |
| "Paper generation failed. Please check Perplexity API key." |
| ) |
|
|
| def generate_research_paper(df: pd.DataFrame, gaps_analysis: str, topic: str, journal: str, format: str) -> str: |
| """ |
| Generate a research paper based on the entire DataFrame, the topic, journal, and format. |
| """ |
| |
| df_string = df.to_string(index=False) |
|
|
| |
| prompt = f""" |
| Topic: {topic} |
| Journal/Conference: {journal} |
| Format: {format} |
| Gaps Analysis: {gaps_analysis} |
| Data: |
| {df_string} |
| |
| Generate a professional research paper based on the above data. |
| The paper should be well-structured, focusing on key insights, challenges, and potential research angles. |
| Use the Gaps Analysis to identify areas for improvement and future work and fill the gaps in the new paper. |
| Use the data as a reference to support your arguments, dont directly copy the data. |
| Ensure the paper is formatted according to the specified journal/conference format. |
| """ |
|
|
| |
| paper_text = call_perplexity_api(prompt) |
| return paper_text.strip() if paper_text else "" |
|
|
| def format_paper(paper_text: str, topic: str, journal: str, format: str) -> str: |
| """ |
| Format the generated paper into a Markdown string. |
| Add the topic, journal, and format as the main title, and the paper text as content. |
| """ |
| md_text = f"# Research Paper on: {topic}\n\n" |
| md_text += paper_text |
| return md_text |
|
|
| def main(): |
| st.title("Corpus-based Research Paper Generator") |
|
|
| topic_input = st.text_input("Enter the topic for the research paper:") |
| journal_input = st.text_input("Enter the Journal/Conference aimed to publish:") |
| format_input = st.text_input("Enter the format of the research paper:") |
| gaps_analysis_file = st.file_uploader("Upload Gaps Analysis (.txt file)", type="txt") |
| gaps_analysis = "" |
| if gaps_analysis_file: |
| gaps_analysis = gaps_analysis_file.getvalue().decode("utf-8") |
|
|
| uploaded_file = st.file_uploader("Upload CSV corpus file", type="csv") |
| if uploaded_file: |
| df = pd.read_csv(uploaded_file) |
| st.write("### Preview of Uploaded Data") |
| st.dataframe(df.head()) |
|
|
| if st.button("Generate Research Paper"): |
| st.info("Generating paper based on the columns of your corpus...") |
| with st.spinner("Calling Perplexity AI..."): |
| paper_text = generate_research_paper(df, gaps_analysis, topic_input, journal_input, format_input) |
| if paper_text: |
| formatted_paper = format_paper(paper_text, topic_input, journal_input, format_input) |
| st.success("Research Paper Generated Successfully!") |
| st.write(formatted_paper) |
|
|
| st.download_button( |
| label="Download Paper as Markdown", |
| data=formatted_paper, |
| file_name="research_paper.md", |
| mime="text/markdown", |
| ) |
| else: |
| st.error( |
| "Paper generation failed. Please check Perplexity API key." |
| ) |
|
|
| if __name__ == "__main__": |
| main() |