Spaces:
Sleeping
Sleeping
File size: 8,623 Bytes
e83ea81 343468f e8b7d05 343468f e83ea81 3c3c588 343468f f54fc8b e83ea81 f54fc8b e83ea81 f54fc8b e83ea81 f54fc8b e83ea81 f54fc8b b213c2c 343468f b213c2c f54fc8b e83ea81 b213c2c 343468f e8b7d05 143db94 e8b7d05 343468f b213c2c 343468f 143db94 e83ea81 343468f 2b2818d 343468f 2b2818d 3c3c588 e8b7d05 b213c2c 3c3c588 b213c2c f54fc8b e83ea81 f54fc8b e83ea81 f54fc8b e83ea81 f54fc8b 343468f |
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 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
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
|