Spaces:
Sleeping
Sleeping
File size: 4,463 Bytes
d108f4c |
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 |
import streamlit as st
import os
from src.langgraphagenticai.ui.uiconfigfile import Config
# This class is responsible for creating and managing the Streamlit user interface (UI)
# for the LangGraph Agentic AI application.
class LoadStreamlitUI:
def __init__(self):
# Initialize the configuration object (reads from uiconfigfile.ini)
self.config = Config()
# A dictionary to store user-selected UI control values (e.g., LLM, model, API keys)
self.user_controls = {}
# Main function to load and display all Streamlit UI components
def load_streamlit_ui(self):
# Set page configuration such as title and layout
st.set_page_config(
page_title="🤖 " + self.config.get_page_title(),
layout="wide"
)
# Display the main page header
st.header("🤖 " + self.config.get_page_title())
# Initialize session variables for controlling UI behavior
st.session_state.timeframe = ''
st.session_state.IsFetchButtonClicked = False
# Everything inside 'with st.sidebar' will appear in the left sidebar
with st.sidebar:
# Retrieve configuration options (LLMs and Use Cases)
llm_options = self.config.get_llm_options()
usecase_options = self.config.get_usecase_options()
# Dropdown to select which LLM provider to use (e.g., Groq)
self.user_controls["selected_llm"] = st.selectbox("Select LLM", llm_options)
# If user chooses 'Groq' as LLM, show additional Groq-specific inputs
if self.user_controls["selected_llm"] == 'Groq':
# Get Groq model list from config file
model_options = self.config.get_groq_model_options()
# Dropdown to select which Groq model to use (e.g., llama-3.1-8b)
self.user_controls["selected_groq_model"] = st.selectbox("Select Model", model_options)
# Textbox for entering Groq API key (masked as password)
self.user_controls["GROQ_API_KEY"] = st.session_state["GROQ_API_KEY"] = st.text_input(
"API Key", type="password"
)
# Show a warning if the API key is not entered
if not self.user_controls["GROQ_API_KEY"]:
st.warning("⚠️ Please enter your GROQ API key to proceed. Don't have one? Visit: https://console.groq.com/keys")
# Dropdown to select which use case to run (e.g., Basic Chatbot, Chatbot With Web, AI News)
self.user_controls["selected_usecase"] = st.selectbox("Select Usecases", usecase_options)
# If the selected use case involves web search or news fetching,
# ask for the Tavily API key (used for web search capabilities)
if self.user_controls["selected_usecase"] in ["Chatbot With Web", "AI News"]:
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"
)
# Show a warning if Tavily API key is not entered
if not self.user_controls["TAVILY_API_KEY"]:
st.warning("⚠️ Please enter your TAVILY_API_KEY to proceed. Don't have one? Visit: https://app.tavily.com/home")
# If the user selects "AI News" use case, show additional news-specific options
if self.user_controls['selected_usecase'] == "AI News":
st.subheader("📰 AI News Explorer ")
# Allow user to choose the time frame for news updates
with st.sidebar:
time_frame = st.selectbox(
"📅 Select Time Frame",
["Daily", "Weekly", "Monthly"],
index=0
)
# Button to trigger fetching AI news
if st.button("🔍 Fetch Latest AI News", use_container_width=True):
# Mark that the fetch button was clicked and store selected time frame
st.session_state.IsFetchButtonClicked = True
st.session_state.timeframe = time_frame
# Return all collected user input values for further processing
return self.user_controls
|