codingxperienceAI commited on
Commit
44dd835
ยท
1 Parent(s): 28da4cd

app refactored

Browse files
Files changed (1) hide show
  1. app.py +164 -103
app.py CHANGED
@@ -164,116 +164,116 @@
164
  # *Educational Purpose Only* | ๐ŸŒฑ **SDG Guardians AI - 2024** | *For a greener East Africa*
165
  # """)
166
 
167
- import streamlit as st
168
- from transformers import pipeline, AutoTokenizer, AutoModelForQuestionAnswering
169
 
170
- # Page configuration
171
- st.set_page_config(page_title="Climate Chatbot - Uganda", layout="wide")
172
 
173
- # Custom CSS for shadow effect
174
- st.markdown(
175
- """
176
- <style>
177
- .stChatInput {
178
- box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.4); /* Strong shadow */
179
- border-radius: 10px;
180
- padding: 12px;
181
- background: white;
182
- }
183
- .stChatInput::before {
184
- content: "";
185
- position: absolute;
186
- width: 100%;
187
- height: 15px;
188
- left: 0;
189
- background: linear-gradient(to top, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0)); /* Fading effect */
190
- }
191
- </style>
192
- """,
193
- unsafe_allow_html=True
194
- )
195
-
196
- # Load model
197
- @st.cache_resource
198
- def load_climate_bert():
199
- tokenizer = AutoTokenizer.from_pretrained("NinaErlacher/ClimateBERTqa")
200
- model = AutoModelForQuestionAnswering.from_pretrained("NinaErlacher/ClimateBERTqa")
201
- return pipeline("question-answering", model=model, tokenizer=tokenizer)
202
-
203
- qa_pipeline = load_climate_bert()
204
-
205
- # Function to check if question is climate-related
206
- def is_climate_related(question):
207
- climate_keywords = ["climate", "global warming", "deforestation", "carbon", "sustainability",
208
- "renewable", "pollution", "green energy", "climate action", "afforestation"]
209
- return any(keyword in question.lower() for keyword in climate_keywords)
210
-
211
- # Function to check if Uganda is mentioned
212
- def is_uganda_related(question):
213
- return "uganda" in question.lower() or "east africa" in question.lower()
214
-
215
- # Function to generate response
216
- def generate_response(user_question, context):
217
- if not is_climate_related(user_question):
218
- return "I'm here to discuss climate change. Try asking about Uganda's climate, sustainability, or environmental issues."
219
- if not is_uganda_related(user_question):
220
- return "This chatbot focuses on climate change in Uganda. Try asking about Uganda's environmental challenges."
221
 
222
- result = qa_pipeline(question=user_question, context=context)
223
- return result['answer']
224
 
225
- # Session state for chat history
226
- if "history" not in st.session_state:
227
- st.session_state.history = []
228
 
229
- # Sidebar - Chat History & Clear Button
230
- with st.sidebar:
231
- st.title("Chat History")
232
- for idx, (question, answer) in enumerate(st.session_state.history[::-1]):
233
- with st.expander(f"๐Ÿ’ฌ {question}"):
234
- st.write(f"**Chatbot:** {answer}")
235
- st.markdown("---")
236
- if st.button("๐Ÿ—‘๏ธ Clear Chat History"):
237
- st.session_state.history = []
238
- st.rerun()
239
- st.info("๐ŸŒฑ *Ask about climate change in Uganda.*")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
 
241
- # Main UI
242
- st.title("Climate Change Chatbot")
243
- st.subheader("Explore climate action and sustainability in Uganda")
244
-
245
- # Sample questions section
246
- with st.expander("Need ideas? (Click to expand)"):
247
- st.markdown("""
248
- - **How is Uganda affected by climate change?**
249
- - **What are sustainable farming methods?**
250
- - **How can I reduce my energy use?**
251
- - **What are the risks of deforestation?**
252
- - **Why is tree planting important?**
253
- - **How can youth take action?**
254
- """)
255
-
256
- # Chat container with avatars
257
- chat_container = st.container()
258
- with chat_container:
259
- for question, answer in st.session_state.history:
260
- with st.chat_message("user"):
261
- st.write(question)
262
- with st.chat_message("assistant"):
263
- st.write(answer)
264
-
265
- # User input field with shadow effect
266
- user_input = st.chat_input("Ask about climate change in Uganda...")
267
- if user_input:
268
- context = """
269
- Climate change is affecting Uganda and East Africa in various ways, including unpredictable rainfall,
270
- rising temperatures, and prolonged droughts. Sustainable farming, afforestation, and renewable energy
271
- adoption are key solutions to mitigate these effects.
272
- """ # Placeholder context
273
 
274
- response = generate_response(user_input, context)
275
- st.session_state.history.append((user_input, response))
276
- st.rerun()
277
 
278
 
279
  # seems to be overcrowding the page, so we can remove it for now.
@@ -303,3 +303,64 @@ if user_input:
303
  # """,
304
  # unsafe_allow_html=True
305
  # )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  # *Educational Purpose Only* | ๐ŸŒฑ **SDG Guardians AI - 2024** | *For a greener East Africa*
165
  # """)
166
 
167
+ # import streamlit as st
168
+ # from transformers import pipeline, AutoTokenizer, AutoModelForQuestionAnswering
169
 
170
+ # # Page configuration
171
+ # st.set_page_config(page_title="Climate Chatbot - Uganda", layout="wide")
172
 
173
+ # # Custom CSS for shadow effect
174
+ # st.markdown(
175
+ # """
176
+ # <style>
177
+ # .stChatInput {
178
+ # box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.4); /* Strong shadow */
179
+ # border-radius: 10px;
180
+ # padding: 12px;
181
+ # background: white;
182
+ # }
183
+ # .stChatInput::before {
184
+ # content: "";
185
+ # position: absolute;
186
+ # width: 100%;
187
+ # height: 15px;
188
+ # left: 0;
189
+ # background: linear-gradient(to top, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0)); /* Fading effect */
190
+ # }
191
+ # </style>
192
+ # """,
193
+ # unsafe_allow_html=True
194
+ # )
195
+
196
+ # # Load model
197
+ # @st.cache_resource
198
+ # def load_climate_bert():
199
+ # tokenizer = AutoTokenizer.from_pretrained("NinaErlacher/ClimateBERTqa")
200
+ # model = AutoModelForQuestionAnswering.from_pretrained("NinaErlacher/ClimateBERTqa")
201
+ # return pipeline("question-answering", model=model, tokenizer=tokenizer)
202
+
203
+ # qa_pipeline = load_climate_bert()
204
+
205
+ # # Function to check if question is climate-related
206
+ # def is_climate_related(question):
207
+ # climate_keywords = ["climate", "global warming", "deforestation", "carbon", "sustainability",
208
+ # "renewable", "pollution", "green energy", "climate action", "afforestation"]
209
+ # return any(keyword in question.lower() for keyword in climate_keywords)
210
+
211
+ # # Function to check if Uganda is mentioned
212
+ # def is_uganda_related(question):
213
+ # return "uganda" in question.lower() or "east africa" in question.lower()
214
+
215
+ # # Function to generate response
216
+ # def generate_response(user_question, context):
217
+ # if not is_climate_related(user_question):
218
+ # return "I'm here to discuss climate change. Try asking about Uganda's climate, sustainability, or environmental issues."
219
+ # if not is_uganda_related(user_question):
220
+ # return "This chatbot focuses on climate change in Uganda. Try asking about Uganda's environmental challenges."
221
 
222
+ # result = qa_pipeline(question=user_question, context=context)
223
+ # return result['answer']
224
 
225
+ # # Session state for chat history
226
+ # if "history" not in st.session_state:
227
+ # st.session_state.history = []
228
 
229
+ # # Sidebar - Chat History & Clear Button
230
+ # with st.sidebar:
231
+ # st.title("Chat History")
232
+ # for idx, (question, answer) in enumerate(st.session_state.history[::-1]):
233
+ # with st.expander(f"๐Ÿ’ฌ {question}"):
234
+ # st.write(f"**Chatbot:** {answer}")
235
+ # st.markdown("---")
236
+ # if st.button("๐Ÿ—‘๏ธ Clear Chat History"):
237
+ # st.session_state.history = []
238
+ # st.rerun()
239
+ # st.info("๐ŸŒฑ *Ask about climate change in Uganda.*")
240
+
241
+ # # Main UI
242
+ # st.title("Climate Change Chatbot")
243
+ # st.subheader("Explore climate action and sustainability in Uganda")
244
+
245
+ # # Sample questions section
246
+ # with st.expander("Need ideas? (Click to expand)"):
247
+ # st.markdown("""
248
+ # - **How is Uganda affected by climate change?**
249
+ # - **What are sustainable farming methods?**
250
+ # - **How can I reduce my energy use?**
251
+ # - **What are the risks of deforestation?**
252
+ # - **Why is tree planting important?**
253
+ # - **How can youth take action?**
254
+ # """)
255
+
256
+ # # Chat container with avatars
257
+ # chat_container = st.container()
258
+ # with chat_container:
259
+ # for question, answer in st.session_state.history:
260
+ # with st.chat_message("user"):
261
+ # st.write(question)
262
+ # with st.chat_message("assistant"):
263
+ # st.write(answer)
264
 
265
+ # # User input field with shadow effect
266
+ # user_input = st.chat_input("Ask about climate change in Uganda...")
267
+ # if user_input:
268
+ # context = """
269
+ # Climate change is affecting Uganda and East Africa in various ways, including unpredictable rainfall,
270
+ # rising temperatures, and prolonged droughts. Sustainable farming, afforestation, and renewable energy
271
+ # adoption are key solutions to mitigate these effects.
272
+ # """ # Placeholder context
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
 
274
+ # response = generate_response(user_input, context)
275
+ # st.session_state.history.append((user_input, response))
276
+ # st.rerun()
277
 
278
 
279
  # seems to be overcrowding the page, so we can remove it for now.
 
303
  # """,
304
  # unsafe_allow_html=True
305
  # )
306
+
307
+ import streamlit as st
308
+ import torch
309
+ from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
310
+
311
+ # Page configuration
312
+ st.set_page_config(page_title="ClimateGPT Chatbot - Uganda", layout="wide")
313
+
314
+ # Load ClimateGPT model
315
+ @st.cache_resource
316
+ def load_climate_gpt():
317
+ model_name = "eci-io/climategpt-7b"
318
+
319
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
320
+ model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
321
+
322
+ return pipeline("text-generation", model=model, tokenizer=tokenizer, max_length=512)
323
+
324
+ climate_gpt_pipeline = load_climate_gpt()
325
+
326
+ # Function to generate response using ClimateGPT
327
+ def generate_response(user_question):
328
+ prompt = f"""
329
+ <|im_start|>system
330
+ You are ClimateGPT, an expert in climate change. Provide accurate and fact-based responses about Ugandaโ€™s climate issues.<|im_end|>
331
+ <|im_start|>user
332
+ {user_question}<|im_end|>
333
+ <|im_start|>assistant
334
+ """
335
+
336
+ response = climate_gpt_pipeline(prompt)[0]["generated_text"]
337
+
338
+ # Extract only the assistant's response
339
+ response = response.split("<|im_start|>assistant")[-1].strip()
340
+ return response
341
+
342
+ # Chat history
343
+ if "history" not in st.session_state:
344
+ st.session_state.history = []
345
+
346
+ # Sidebar - Chat History & Clear Button
347
+ with st.sidebar:
348
+ st.title("Chat History")
349
+ for idx, (question, answer) in enumerate(st.session_state.history[::-1]):
350
+ with st.expander(f"๐Ÿ’ฌ {question}"):
351
+ st.write(f"**Chatbot:** {answer}")
352
+
353
+ if st.button("๐Ÿ—‘๏ธ Clear Chat History"):
354
+ st.session_state.history = []
355
+ st.rerun()
356
+
357
+ # Main UI
358
+ st.title("๐ŸŒ ClimateGPT - Uganda")
359
+ st.subheader("Ask about climate change, sustainability, and environmental action in Uganda!")
360
+
361
+ # User input field
362
+ user_input = st.chat_input("Ask me anything about Uganda's climate...")
363
+ if user_input:
364
+ response = generate_response(user_input)
365
+ st.session_state.history.append((user_input, response))
366
+ st.rerun()