#gui/app.py import sys import streamlit as st from src.research_agent.crew import MarketUseCaseCrew import streamlit as st import os from dotenv import load_dotenv load_dotenv() sys.path.append('..') class MarketUseCaseGen: def generation(self, name, link): inputs = {"company": name, "company_link": link} return MarketUseCaseCrew().crew().kickoff(inputs=inputs) def use_case_generation(self): if st.session_state.generation: with st.spinner(f"Researching and generating uses cases about AI..."): # Set progress to 50% progress_bar = st.progress(50) st.session_state.article_text = self.generation( st.session_state.name, st.session_state.link ) progress_bar.progress(100) # Display the generated article st.subheader("Generated Article:") if st.session_state.article_text and st.session_state.article_text != "": # Convert the article text to a string if it's not already if isinstance(st.session_state.article_text, str): article_text = st.session_state.article_text elif isinstance(st.session_state.article_text, dict) and 'article' in st.session_state.article_text: article_text = st.session_state.article_text['article'] else: article_text = str(st.session_state.article_text) with st.container(): # Display the article text st.markdown(st.session_state.article_text) col1, col2, col3 = st.columns(3) # Download button for the article with col1: if st.session_state.article_text: st.download_button( label="Download Article", data=article_text, file_name=f"{st.session_state.name.replace(' ', '_').lower()}_market_and_use_case_analysis.txt", mime="text/plain" ) else: st.write("Article not generated yet.") # Download button for ideas with col2: if st.session_state.article_text: with open("output/ideas.md", "rb") as fp: st.download_button( label="Download Ideas", data=fp, file_name=f"{st.session_state.name.replace(' ', '_').lower()}_ideas.txt", mime="text/plain" ) else: st.wrtie("Ideas are ideating") # Download button for resources with col3: if st.session_state.article_text: with open("output/researched_data.md", "rb") as fp: st.download_button( label="Download Resources", data=fp, file_name=f"{st.session_state.name.replace(' ', '_').lower()}_resources.txt", mime="text/plain" ) else: st.write("Resources are being researched") st.markdown("---------") st.session_state.generation=False def sidebar(self): with st.sidebar: st.title("📊 API Configuration") st.markdown("Enter your API keys below:") # Input fields for API keys serper_api_key = st.text_input("Serper API Key", type="password") gemini_api_key = st.text_input("Gemini Flash API Key", type="password") # Button to save API keys if st.button("Save API Keys"): # Check if both API keys are provided if serper_api_key and gemini_api_key: # Set environment variables for API keys os.environ['SERPER_API_KEY'] = serper_api_key # Installed the SERPER_API_KEY in the environment os.environ['GOOGLE_API_KEY'] = gemini_api_key # Installed the gemini_api_key in the environment st.success("API keys saved successfully!") else: st.error("Please enter both API keys.") # Input fields for company name and website name = st.text_input("Enter Name of the company:", key='name',placeholder="e.g., Google, Apple, Nike") link = st.text_input("Enter the company's link:", key='link',placeholder="e.g., https://www.google.com, https://www.apple.com, https://www.nike.com") if st.button("Generate Article"): # Check if API keys are provided if not serper_api_key or not gemini_api_key: st.error("Please enter both API keys in the sidebar before generating.") # Check if company name and website are provided elif not name and link: st.warning("Please enter the company name and website") else: # Create a progress bar progress_bar = st.progress(0) st.session_state.generation=True def render(self): st.set_page_config(page_title="CrewAI Article Generator", page_icon="📝", layout="wide") # Main content section st.markdown(""" """, unsafe_allow_html=True) if "article_text" not in st.session_state: st.session_state.article_text = "" if "generation" not in st.session_state: st.session_state.generation = False if "name" not in st.session_state: st.session_state.website = "" if "link" not in st.session_state: st.session_state.link = "" self.sidebar() self.use_case_generation() if __name__ == "__main__": MarketUseCaseGen().render()