-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
167 lines (130 loc) · 6.38 KB
/
Copy pathmain.py
File metadata and controls
167 lines (130 loc) · 6.38 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import os
import time
import streamlit as st
from markdown_pdf import MarkdownPdf, Section
from langchain_openai import ChatOpenAI
from build_agents import run_auto_advisor, validate_business_idea, rephrase_business_idea
import warnings
warnings.filterwarnings("ignore")
os.environ["OPENAI_API_KEY"] = ""
os.environ["SERPER_API_KEY"] = ""
TEMPERATURE = 0.5
LLM_MODELS = ["gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-4o-mini", "gpt-3.5-turbo"]
def run_crew(idea_input):
# --- Run Crew ---
with st.spinner("🤖 Running AutoAdvisor to generate business strategy report ..."):
final_report = run_auto_advisor(idea_input, llm)
st.session_state["final_report"] = final_report.raw # Save the raw report
st.success("✅ Analysis completed!")
st.markdown("### 📄 Final Business Strategy Report")
with st.chat_message("assistant"):
st.write_stream(stream_output(final_report.raw))
file_name = export_pdf(final_report.raw)
st.session_state["file_name"] = file_name # Save filename for download
# --- Download the report as a pdf file
def download_report():
if "final_report" in st.session_state and "file_name" in st.session_state:
with open(f'reports/{st.session_state["file_name"]}', "rb") as pdf_file:
PDFbyte = pdf_file.read()
st.download_button(
type="secondary",
label="📥 Download Report as PDF",
data=PDFbyte,
file_name=st.session_state["file_name"],
mime='application/octet-stream'
)
# --- Export and save the generated report as pdf ---
def export_pdf(file, file_name='Business Strategy Report.pdf'):
os.makedirs("reports", exist_ok=True)
pdf = MarkdownPdf()
pdf.meta["title"] = 'AI-Powered Business Report'
pdf.add_section(Section(file, toc=False))
pdf.save(f'reports/{file_name}')
return file_name
# --- Convert the generated output to a text stream ---
def stream_output(report):
for word in report.split(" "):
yield word + " "
time.sleep(0.02)
# --- Streamlit UI ---
st.set_page_config(page_title="AutoAdvisor", page_icon="🧠", layout="wide")
st.title("🧠 AutoAdvisor — Your AI Business Strategy Assistant")
# Hide upper menu on the page
st.markdown("""
<style>
/* Hide upper menu */
Main Menu {visibility: hidden;}
header {visibility: hidden;}
footer {visibility: hidden;}
""", unsafe_allow_html=True)
# Sidebar for configuration
st.sidebar.header("🤖 Configuration")
llm_model = st.sidebar.selectbox(
"✨ Select an LLM Model",
options=LLM_MODELS,
index=None
)
if llm_model:
# --- Get LLM API Key ---
openai_key = st.sidebar.text_input("🔑 Enter OpenAI API Key", type="password")
serperapi_key = st.sidebar.text_input("🔑 Enter a SerperAPI key (Optional)", type="password")
st.sidebar.info("❗ Use SerperAPI for enabling real time web search, hence expect better report outcome")
if serperapi_key:
st.sidebar.success("✅ SerperAPI Key is entered!")
os.environ["SERPER_API_KEY"] = serperapi_key
if openai_key:
st.sidebar.success("✅ OpenAI API Key is entered!")
os.environ["OPENAI_API_KEY"] = openai_key
st.write("Enter a business idea below to generate a market-ready strategy report:")
try:
# --- LLM Configuration ---
llm = ChatOpenAI(
model=llm_model,
temperature=TEMPERATURE,
api_key=os.getenv("OPENAI_API_KEY")
)
# --- Business Idea Input ---
user_idea = st.text_area(
"💡 Enter your business idea",
placeholder="e.g. AI-powered wellness coach for remote workers",
height=120,
key="user_idea"
)
# --- Watch for user_idea change and reset session ---
if "last_idea" not in st.session_state:
st.session_state["last_idea"] = user_idea
if st.session_state["last_idea"] != user_idea:
st.session_state["last_idea"] = user_idea
st.session_state.corrected_idea = None
st.session_state.original_invalid_idea = None
st.session_state.final_report = None
st.session_state.file_name = None
if user_idea.strip():
if validate_business_idea(user_idea, llm): # Check if the user idea is a valid business idea
if st.button("🚀 Generate Business Strategy"):
run_crew(user_idea) # Generate report with original idea
download_report()
else:
if "corrected_idea" not in st.session_state or st.session_state.get("original_invalid_idea") != user_idea:
corrected_idea = rephrase_business_idea(user_idea, llm)
st.session_state["corrected_idea"] = corrected_idea
st.session_state["original_invalid_idea"] = user_idea
else:
corrected_idea = st.session_state["corrected_idea"]
if corrected_idea.lower() == "invalid":
st.error("🚫 Not a valid business idea and couldn't be auto-corrected.")
else:
st.warning("⚠️ Rephrased your input into a valid business idea:")
st.markdown(f"**💡 Rephrased Idea:** {corrected_idea}")
if st.button("🚀 Generate Corrected Business Strategy"):
run_crew(corrected_idea)
download_report()
else:
st.info("⚠️ Please enter a business idea to proceed.")
except Exception as e:
if e.status_code == 401: # Raise error if invalid OPENAI API Key is entered
st.warning("⚠️ Please check your OpenAI API key.")
else:
st.info("Enter OpenAI API Key and optionally a SerperAPI Key !")
else:
st.info("Select an LLM Model to proceed !")