File size: 3,682 Bytes
a08284c
 
 
 
 
 
 
 
 
 
35e5d08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
05c86f0
35e5d08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
05c86f0
35e5d08
 
 
 
 
 
 
 
 
 
05c86f0
35e5d08
 
 
 
 
 
3bc934b
 
 
 
 
 
0cbebee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35e5d08
 
 
 
 
 
 
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
import os
import streamlit as st
from datetime import datetime

from langchain_core.messages import AIMessage, HumanMessage
from src.ui.config import LoadConfig

class LoadStreamlitUI:
  def __init__(self):
    self.config = LoadConfig()
    self.user_controls = {}

  def initialize_session(self):
    return {
      'current_step': 'requirements',
      'requirements': "",
      'user_stories': "",
      'po_feedback': "",
      'generated_code': "",
      'review_feedback': "",
      'decision': None,
    }
  
  
  def load_ui(self):
    st.set_page_config(page_title=" 🤖" + self.config.get_title(), page_icon=":robot_face:", layout="wide")
    st.header(" 🤖" + self.config.get_title())
    st.session_state.timeframe = ''
    st.session_state.IsFetchButtonClicked = False
    st.session_state.IsSDLC = False

    with st.sidebar:

      llm_options = self.config.get_llm_options()

      # LLM Selection
      self.user_controls['Selected LLM'] = st.selectbox('Select LLM', llm_options)

      if self.user_controls['Selected LLM'] == 'Groq':
        # Groq Model Selection
        groq_models = self.config.get_groq_models()
        self.user_controls['Selected Model'] = st.selectbox('Select Groq Model', groq_models)

        self.user_controls['API Key'] = st.text_input('Enter Groq API Key', type='password')

        if not self.user_controls['API Key']:
            st.warning('Please enter a valid Groq API key to proceed . If you don\'t have an API key, please visit https://console.groq.com to create one.')

      
      if self.user_controls['Selected LLM'] == 'OpenAI':
        # OpenAI Model Selection
        openai_models = self.config.get_openai_models()
        self.user_controls['Selected Model'] = st.selectbox('Select OpenAI Model', openai_models)

        self.user_controls['API Key'] = st.text_input('Enter OpenAI API Key', type='password')

        if not self.user_controls['API Key']:
            st.warning('Please enter a valid OpenAI API key to proceed . If you don\'t have an API key, please visit https://platform.openai.com/account/api-keys to create one.')

      use_case = self.config.get_use_case()

      # Use Case Selection
      self.user_controls['Selected Use Case'] = st.selectbox('Select Use Case', use_case)

      # Tavily API Key for Web Search
      if self.user_controls['Selected Use Case'] == 'Chatbot with Web Search':
          self.user_controls['Tavily API Key'] = st.text_input('Enter Tavily API Key for Web Search', type='password')
          if not self.user_controls['Tavily API Key']:
              st.warning('Tavily API key is required for web search functionality. Get one at https://tavily.com')

      # Memory Management Section
      st.divider()
      st.subheader("💭 Memory Management")
      
      # Display current session ID
      if "session_id" in st.session_state:
          st.text(f"Session: {st.session_state.session_id[-8:]}")  # Show last 8 characters
      
      # Clear conversation button
      if st.button("🗑️ Clear Conversation", help="Clear chat history and start fresh"):
          if "messages" in st.session_state:
              st.session_state.messages = []
          if "memory_manager" in st.session_state and "session_id" in st.session_state:
              # Clear the session from memory manager
              st.session_state.memory_manager.clear_session(st.session_state.session_id)
              # Create new session ID
              st.session_state.session_id = f"user_{hash(str(st.session_state))}"
          st.rerun()


    if 'state' not in st.session_state:
      st.session_state.state = self.initialize_session()

    return self.user_controls