IAMTFRMZA commited on
Commit
5ebf867
·
verified ·
1 Parent(s): 8b31763

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -77
app.py CHANGED
@@ -55,44 +55,9 @@ st.markdown("""
55
  .stChatMessage[data-testid="stChatMessage-user"] { background: #f0f0f0; color: #000000; }
56
  .stChatMessage[data-testid="stChatMessage-assistant"] { background: #e3f2fd; color: #000000; }
57
  .lt-logo { vertical-align: middle; }
58
- /* Floating chat input */
59
- .floating-input-bar {
60
- position: fixed;
61
- bottom: 0;
62
- left: 50%;
63
- transform: translateX(-50%);
64
- width: 60vw;
65
- min-width: 300px;
66
- max-width: 900px;
67
- z-index: 1000;
68
- background: #fff;
69
- border-radius: 1em 1em 0 0;
70
- box-shadow: 0 -2px 16px rgba(0,0,0,0.07);
71
- padding: 1em 1em 0.7em 1em;
72
- display: flex;
73
- align-items: center;
74
- }
75
- .floating-input-bar .chat-input {
76
- flex: 1 1 auto;
77
- border-radius: 14px;
78
- border: 1px solid #d2d2d2;
79
- padding: 0.7em 1em;
80
- font-size: 1.1em;
81
- margin-right: 0.7em;
82
- }
83
- .floating-input-bar .clear-btn {
84
- border: none;
85
- background: transparent;
86
- font-size: 1.5em;
87
- color: #888;
88
- cursor: pointer;
89
- margin-left: 0.1em;
90
- margin-top: 1px;
91
- transition: color 0.1s;
92
- }
93
- .floating-input-bar .clear-btn:hover { color: #e57373; }
94
- /* Push main content up above floating bar */
95
- .main-chat-area { margin-bottom: 5em; }
96
  </style>
97
  """, unsafe_allow_html=True)
98
  st.markdown("""
@@ -161,7 +126,7 @@ def clear_chat_history():
161
  st.rerun()
162
 
163
  def display_chat_history():
164
- st.markdown("<div class='main-chat-area'>", unsafe_allow_html=True)
165
  messages = db.collection("users").document(user_id).collection("messages").order_by("timestamp").stream()
166
  assistant_icon_html = "<img src='https://raw.githubusercontent.com/AndrewLORTech/lortechwebsite/main/lorain.jpg' width='24' style='vertical-align:middle; border-radius:50%;'/>"
167
  for msg in list(messages)[::-1]:
@@ -201,44 +166,12 @@ def synthesize_voice(text, voice_key, user_id):
201
  thread_id = get_or_create_thread_id()
202
  display_chat_history()
203
 
204
- # --- Floating Chat Input Bar & Clear Button ---
205
- st.markdown("""
206
- <div class="floating-input-bar">
207
- <form action="" method="POST" id="lorain_input_form" style="width:100%;display:flex;">
208
- <input id="lorain_user_input" class="chat-input" name="lorain_user_input" type="text" placeholder="Type your message here..." autocomplete="off" autofocus />
209
- <button class="clear-btn" type="submit" name="clear_chat" title="Clear chat">&#128465;</button>
210
- </form>
211
- <script>
212
- // Auto-focus and scroll to bottom on new message
213
- let chatbox = document.getElementById("chatbox");
214
- if (chatbox) chatbox.scrollTop = chatbox.scrollHeight;
215
- </script>
216
- </div>
217
- """, unsafe_allow_html=True)
218
-
219
- # --- Handle Chat Input/Clear POST ---
220
- import streamlit.web.server.websocket_headers
221
- from urllib.parse import parse_qs
222
-
223
- # Use query params to emulate form submission state (for Streamlit stateless-ness)
224
- query_params = st.experimental_get_query_params()
225
- import streamlit.runtime.scriptrunner.script_run_context as sctx
226
- ctx = sctx.get_script_run_ctx()
227
- form_data = {}
228
- if ctx and hasattr(ctx, 'request'):
229
- content_length = ctx.request.headers.get('content-length')
230
- if content_length:
231
- body = ctx.request.rfile.read(int(content_length)).decode()
232
- form_data = parse_qs(body)
233
-
234
- # Detect clear chat
235
- if form_data.get("clear_chat"):
236
- clear_chat_history()
237
-
238
- # Detect user input
239
- user_input = ""
240
- if form_data.get("lorain_user_input"):
241
- user_input = form_data.get("lorain_user_input")[0].strip()
242
 
243
  if user_input:
244
  # --- OpenAI Assistant Response ---
 
55
  .stChatMessage[data-testid="stChatMessage-user"] { background: #f0f0f0; color: #000000; }
56
  .stChatMessage[data-testid="stChatMessage-assistant"] { background: #e3f2fd; color: #000000; }
57
  .lt-logo { vertical-align: middle; }
58
+ .fixed-bottom-bar { position: fixed; bottom: 0; left: 0; width: 100vw; background: #181a22; padding: 1.2em 0.5em 0.8em 0.5em; z-index: 9999; box-shadow: 0 -2px 8px rgba(0,0,0,0.06);}
59
+ .chat-area { margin-bottom: 6.1em; }
60
+ .st-emotion-cache-1avcm0n { justify-content: flex-end !important; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  </style>
62
  """, unsafe_allow_html=True)
63
  st.markdown("""
 
126
  st.rerun()
127
 
128
  def display_chat_history():
129
+ st.markdown("<div class='chat-area'>", unsafe_allow_html=True)
130
  messages = db.collection("users").document(user_id).collection("messages").order_by("timestamp").stream()
131
  assistant_icon_html = "<img src='https://raw.githubusercontent.com/AndrewLORTech/lortechwebsite/main/lorain.jpg' width='24' style='vertical-align:middle; border-radius:50%;'/>"
132
  for msg in list(messages)[::-1]:
 
166
  thread_id = get_or_create_thread_id()
167
  display_chat_history()
168
 
169
+ # --- Fixed bottom bar: input + clear chat ---
170
+ with st.container():
171
+ cols = st.columns([10, 1])
172
+ user_input = cols[0].chat_input("Type your message here...")
173
+ if cols[1].button("🗑️", help="Clear Chat"):
174
+ clear_chat_history()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
 
176
  if user_input:
177
  # --- OpenAI Assistant Response ---