Nischal Subedi
commited on
Commit
·
b9b1527
1
Parent(s):
d25b399
UI update
Browse files
app.py
CHANGED
@@ -249,13 +249,13 @@ Answer:"""
|
|
249 |
# Basic client-side validation for immediate feedback (redundant but good UX)
|
250 |
if not api_key or not api_key.strip() or not api_key.startswith("sk-"):
|
251 |
return "<div class='error-message'><span class='error-icon'></span>Please provide a valid OpenAI API key (starting with 'sk-'). <a href='https://platform.openai.com/api-keys' target='_blank'>OpenAI</a>.</div>"
|
252 |
-
if not state or state is None or state == "Error: Critical failure loading states": # Added check for error state
|
253 |
return "<div class='error-message'><span class='error-icon'></span>Please select a valid state from the list.</div>"
|
254 |
if not query or not query.strip():
|
255 |
return "<div class='error-message'><span class='error-icon'></span>Please enter your question in the text box.</div>"
|
256 |
|
257 |
-
# Call the core processing logic
|
258 |
-
result = self.
|
259 |
answer = result.get("answer", "<div class='error-message'><span class='error-icon'>⚠️</span>An unexpected error occurred.</div>")
|
260 |
|
261 |
# Check if the answer already contains an error message
|
@@ -266,16 +266,16 @@ Answer:"""
|
|
266 |
return f"<div class='animated-output-content'>{formatted_response_content}</div>"
|
267 |
|
268 |
try:
|
269 |
-
available_states_list = self.
|
270 |
print(f"DEBUG: States loaded for selection: {available_states_list}")
|
271 |
# Ensure radio_choices is not empty if there's an error and handling the error message
|
272 |
-
|
273 |
# Set initial value only if there are valid choices
|
274 |
-
|
275 |
except Exception as e:
|
276 |
print(f"DEBUG: Error loading states for selection: {e}")
|
277 |
-
|
278 |
-
|
279 |
|
280 |
example_queries_base = [
|
281 |
["What are the rules for security deposit returns?", "California"],
|
@@ -285,11 +285,11 @@ Answer:"""
|
|
285 |
["What is an implied warranty of habitability?", "Illinois"]
|
286 |
]
|
287 |
example_queries = []
|
288 |
-
if
|
289 |
-
loaded_states_set = set(
|
290 |
example_queries = [ex for ex in example_queries_base if ex[1] in loaded_states_set]
|
291 |
if not example_queries: # Fallback if no matching examples found
|
292 |
-
example_queries.append(["What basic rights do tenants have?",
|
293 |
else: # If states failed to load, provide a generic example
|
294 |
example_queries.append(["What basic rights do tenants have?", "California"])
|
295 |
|
@@ -856,7 +856,8 @@ Answer:"""
|
|
856 |
}}
|
857 |
"""
|
858 |
|
859 |
-
#
|
|
|
860 |
with gr.Blocks(css=custom_css, title="Landlord-Tenant Rights Assistant", theme_mode="light") as demo:
|
861 |
with gr.Group(elem_classes="app-header-wrapper"):
|
862 |
gr.Markdown(
|
@@ -911,8 +912,8 @@ Answer:"""
|
|
911 |
with gr.Column(elem_classes="input-field", scale=1):
|
912 |
state_input = gr.Radio(
|
913 |
label="Select State",
|
914 |
-
choices=
|
915 |
-
value=
|
916 |
elem_classes=["input-field-group", "gradio-radio-custom"],
|
917 |
interactive=True
|
918 |
)
|
@@ -968,7 +969,7 @@ Answer:"""
|
|
968 |
|
969 |
clear_button.click(
|
970 |
fn=lambda: (
|
971 |
-
"", "",
|
972 |
),
|
973 |
inputs=[],
|
974 |
outputs=[api_key_input, query_input, state_input, output]
|
@@ -977,6 +978,7 @@ Answer:"""
|
|
977 |
return demo
|
978 |
|
979 |
|
|
|
980 |
# --- Main Execution Block (UNCHANGED from original logic) ---
|
981 |
if __name__ == "__main__":
|
982 |
logging.info("Starting Landlord-Tenant Rights Bot application...")
|
|
|
249 |
# Basic client-side validation for immediate feedback (redundant but good UX)
|
250 |
if not api_key or not api_key.strip() or not api_key.startswith("sk-"):
|
251 |
return "<div class='error-message'><span class='error-icon'></span>Please provide a valid OpenAI API key (starting with 'sk-'). <a href='https://platform.openai.com/api-keys' target='_blank'>OpenAI</a>.</div>"
|
252 |
+
if not state or state is None or state == "Error: Critical failure loading states" or state == "Error: States unavailable": # Added check for error state
|
253 |
return "<div class='error-message'><span class='error-icon'></span>Please select a valid state from the list.</div>"
|
254 |
if not query or not query.strip():
|
255 |
return "<div class='error-message'><span class='error-icon'></span>Please enter your question in the text box.</div>"
|
256 |
|
257 |
+
# Call the core processing logic (using self.process_query)
|
258 |
+
result = self.process_query(query=query, state=state, openai_api_key=api_key)
|
259 |
answer = result.get("answer", "<div class='error-message'><span class='error-icon'>⚠️</span>An unexpected error occurred.</div>")
|
260 |
|
261 |
# Check if the answer already contains an error message
|
|
|
266 |
return f"<div class='animated-output-content'>{formatted_response_content}</div>"
|
267 |
|
268 |
try:
|
269 |
+
available_states_list = self.get_states() # Call self.get_states() directly
|
270 |
print(f"DEBUG: States loaded for selection: {available_states_list}")
|
271 |
# Ensure radio_choices is not empty if there's an error and handling the error message
|
272 |
+
radio_choices = available_states_list if available_states_list and "Error" not in available_states_list[0] else ["Error: States unavailable"]
|
273 |
# Set initial value only if there are valid choices
|
274 |
+
initial_value_radio = radio_choices[0] if radio_choices and "Error" not in radio_choices[0] else None
|
275 |
except Exception as e:
|
276 |
print(f"DEBUG: Error loading states for selection: {e}")
|
277 |
+
radio_choices = ["Error: Critical failure loading states"]
|
278 |
+
initial_value_radio = None
|
279 |
|
280 |
example_queries_base = [
|
281 |
["What are the rules for security deposit returns?", "California"],
|
|
|
285 |
["What is an implied warranty of habitability?", "Illinois"]
|
286 |
]
|
287 |
example_queries = []
|
288 |
+
if radio_choices and "Error" not in radio_choices[0] and len(radio_choices) > 0:
|
289 |
+
loaded_states_set = set(radio_choices)
|
290 |
example_queries = [ex for ex in example_queries_base if ex[1] in loaded_states_set]
|
291 |
if not example_queries: # Fallback if no matching examples found
|
292 |
+
example_queries.append(["What basic rights do tenants have?", radio_choices[0]])
|
293 |
else: # If states failed to load, provide a generic example
|
294 |
example_queries.append(["What basic rights do tenants have?", "California"])
|
295 |
|
|
|
856 |
}}
|
857 |
"""
|
858 |
|
859 |
+
# MODIFIED LINE: Added theme_mode="light"
|
860 |
+
# This will work after upgrading Gradio
|
861 |
with gr.Blocks(css=custom_css, title="Landlord-Tenant Rights Assistant", theme_mode="light") as demo:
|
862 |
with gr.Group(elem_classes="app-header-wrapper"):
|
863 |
gr.Markdown(
|
|
|
912 |
with gr.Column(elem_classes="input-field", scale=1):
|
913 |
state_input = gr.Radio(
|
914 |
label="Select State",
|
915 |
+
choices=radio_choices,
|
916 |
+
value=initial_value_radio,
|
917 |
elem_classes=["input-field-group", "gradio-radio-custom"],
|
918 |
interactive=True
|
919 |
)
|
|
|
969 |
|
970 |
clear_button.click(
|
971 |
fn=lambda: (
|
972 |
+
"", "", initial_value_radio, "<div class='placeholder'>Inputs cleared. Ready for your next question.</div>"
|
973 |
),
|
974 |
inputs=[],
|
975 |
outputs=[api_key_input, query_input, state_input, output]
|
|
|
978 |
return demo
|
979 |
|
980 |
|
981 |
+
|
982 |
# --- Main Execution Block (UNCHANGED from original logic) ---
|
983 |
if __name__ == "__main__":
|
984 |
logging.info("Starting Landlord-Tenant Rights Bot application...")
|