Spaces:
Sleeping
Sleeping
| import uuid | |
| import streamlit as st | |
| import os | |
| from datetime import date | |
| from src.langgraphagenticai.ui.streamlitui.sdlcfeedback import SDLCUI | |
| from src.langgraphagenticai.ui.uiconfigfile import Config | |
| from langchain_core.messages import AIMessage, HumanMessage | |
| class LoadStreamlitUI: | |
| def __init__(self): | |
| self.config = Config() # config | |
| self.user_controls = {} | |
| def initialize_session(self): | |
| return { | |
| "current_step": "requirements", | |
| "decision": None, | |
| "requirements": "", | |
| "user_stories": "", | |
| "design_docs": "", | |
| "code": "", | |
| "test_cases": "", | |
| "po_feedback": "", | |
| "design_feedback":"", | |
| 'generate_code':"", | |
| "review_feedback": "", | |
| "security_feedback": "", | |
| "test_feedback": "", | |
| "human_decision": "" | |
| } | |
| def render_requirements(self): | |
| st.markdown("## π Requirements Submission") | |
| st.session_state.state["requirements"] = st.text_area( | |
| "Enter your requirements:", | |
| height=200, | |
| key="req_input" | |
| ) | |
| if st.button("Submit Requirements", key="submit_req"): | |
| st.session_state.state["current_step"] = "generate_user_stories" | |
| st.session_state.IsSDLC = True | |
| def load_streamlit_ui(self): | |
| st.set_page_config(page_title= "π€ " + self.config.get_page_title(), layout="wide") | |
| st.header("π€ " + self.config.get_page_title()) | |
| st.session_state.timeframe = '' | |
| st.session_state.IsFetchButtonClicked = False | |
| st.session_state.IsSDLC = False | |
| ui = SDLCUI() | |
| with st.sidebar: | |
| # Get options from config | |
| llm_options = self.config.get_llm_options() | |
| usecase_options = self.config.get_usecase_options() | |
| # LLM selection | |
| self.user_controls["selected_llm"] = st.selectbox("Select LLM", llm_options) | |
| if self.user_controls["selected_llm"] == 'Groq': | |
| # Model selection | |
| model_options = self.config.get_groq_model_options() | |
| self.user_controls["selected_groq_model"] = st.selectbox("Select Model", model_options) | |
| # API key input | |
| self.user_controls["GROQ_API_KEY"] = st.session_state["GROQ_API_KEY"] = st.text_input("API Key", | |
| type="password") | |
| # Validate API key | |
| if not self.user_controls["GROQ_API_KEY"]: | |
| st.warning("β οΈ Please enter your GROQ API key to proceed. Don't have? refer : https://console.groq.com/keys ") | |
| # Use case selection | |
| self.user_controls["selected_usecase"] = st.selectbox("Select Usecases", usecase_options) | |
| if self.user_controls["selected_usecase"] =="Chatbot with Tool" or self.user_controls["selected_usecase"] =="AI News" : | |
| # API key input | |
| os.environ["TAVILY_API_KEY"] = self.user_controls["TAVILY_API_KEY"] = st.session_state["TAVILY_API_KEY"] = st.text_input("TAVILY API KEY", | |
| type="password") | |
| # Validate API key | |
| if not self.user_controls["TAVILY_API_KEY"]: | |
| st.warning("β οΈ Please enter your TAVILY_API_KEY key to proceed. Don't have? refer : https://app.tavily.com/home") | |
| if self.user_controls['selected_usecase']!="SDLC Workflow": | |
| st.session_state['state'] = '' | |
| if self.user_controls['selected_usecase'] == "Appointment Receptionist": | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| st.subheader("Appointment Manager") | |
| with col2: | |
| st.subheader("Appointments") | |
| elif self.user_controls['selected_usecase']=="Customer Support": | |
| st.subheader('Flower Shop Chatbot' + 'π') | |
| greeting="Hi ππ»ββοΈ, I am the flower shop chatbot. How can I help?" | |
| if 'message_history' not in st.session_state: | |
| st.session_state.message_history = [AIMessage(content=greeting)] | |
| with st.chat_message("assistant"): | |
| st.write(greeting) | |
| # 1. Buttons for chat - Clear Button | |
| with st.sidebar: | |
| if st.button('Clear Chat'): | |
| st.session_state.message_history = [] | |
| elif self.user_controls['selected_usecase']=="Travel Planner": | |
| st.subheader("βοΈ AI Travel Planner") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| source = st.text_input("π Source", value="London", help="Enter your travel source") | |
| destination = st.text_input("π Destination", value="Goa", help="Enter your travel destination") | |
| preferences = st.text_area( | |
| "π― Travel Preferences", | |
| placeholder="E.g., I prefer beach destinations, luxury stays, and adventure activities.", | |
| help="Describe your travel preferences" | |
| ) | |
| with col2: | |
| start_date = st.date_input("π Start Date", value=date.today(), help="Select your travel start date") | |
| end_date = st.date_input("π End Date", value=date.today(), help="Select your travel end date") | |
| if destination and preferences and start_date and end_date: | |
| self.user_controls.update({ | |
| "source": source, | |
| "destination": destination, | |
| "preferences": preferences, | |
| "start_date": start_date, | |
| "end_date": end_date, | |
| }) | |
| elif self.user_controls['selected_usecase']=="AI News": | |
| st.subheader("π° AI News Explorer ") | |
| with st.sidebar: | |
| time_frame = st.selectbox( | |
| "π Select Time Frame", | |
| ["Daily", "Weekly", "Monthly"], | |
| index=0 | |
| ) | |
| if st.button("π Fetch Latest AI News", use_container_width=True): | |
| st.session_state.IsFetchButtonClicked = True | |
| st.session_state.timeframe = time_frame | |
| else : | |
| st.session_state.IsFetchButtonClicked = False | |
| # Added for SDLC Workflow | |
| elif self.user_controls['selected_usecase']=="SDLC Workflow": | |
| st.subheader(" SDLC Workflow ") | |
| # if 'status' in st.session_state.state and st.session_state.state['status']== "__interrupt__" and 'decision' in st.session_state.state and st.session_state.state['decision']==None : | |
| # ui.render() | |
| if "requirements" in st.session_state.state and st.session_state.state['current_step']=="requirements": | |
| ui.render_requirements(st.session_state.state) | |
| # if st.session_state.state !='': | |
| # ui.render() | |
| if st.button("start workflow"): | |
| st.session_state.state = '' | |
| st.session_state.state = self.initialize_session() | |
| # Initialize session state variables. | |
| if "thread_config" not in st.session_state: | |
| st.session_state.thread_config = {"configurable": {"thread_id": uuid.uuid4()}} | |
| if "graph_stage" not in st.session_state: | |
| st.session_state.graph_stage = "initial" # Stages: initial, waiting, resumed, finished. | |
| if "output_chunks" not in st.session_state: | |
| st.session_state.output_chunks = [] | |
| if "user_decision" not in st.session_state: | |
| st.session_state.user_decision = None | |
| st.session_state.IsSDLC = True | |
| ui.render_requirements(st.session_state.state) | |
| # if st.session_state.state['current_step']=="requirements": | |
| # self.render_requirements() | |
| if 'requirements' in st.session_state.state and st.session_state.state['requirements']=='': | |
| st.stop() | |
| return self.user_controls | |