genaitiwari's picture
sdlc 80 percent
e83ea81
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