Coots commited on
Commit
762a646
Β·
verified Β·
1 Parent(s): 389dccc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -16
app.py CHANGED
@@ -5,15 +5,14 @@ import math
5
  import re
6
  from deep_translator import GoogleTranslator
7
  import warnings
 
8
 
9
  warnings.filterwarnings("ignore")
10
 
11
  # Load models
12
- from xgboost import Booster
13
  xgb = Booster()
14
  xgb.load_model("xgb_model.json")
15
-
16
- rf = joblib.load("rf_model.pkl") # Needs scikit-learn
17
 
18
  # Load tile catalog and sizes
19
  with open("tile_catalog.json", "r", encoding="utf-8") as f:
@@ -33,7 +32,7 @@ def translate(text, lang="en"):
33
  def extract_tile_area(msg, unit):
34
  msg = msg.lower().replace("Γ—", "x").replace("into", "x").replace("*", "x")
35
  msg = msg.replace("mm", "").replace("ft", "").replace("feet", "").strip()
36
-
37
  if "x" in msg:
38
  parts = re.split(r"x", msg)
39
  if len(parts) == 2:
@@ -48,7 +47,6 @@ def extract_tile_area(msg, unit):
48
  except:
49
  return None
50
  else:
51
- # Single value fallback for ft
52
  try:
53
  val = float(re.sub(r"[^\d.]", "", msg))
54
  return val if unit == "ft" else None
@@ -77,7 +75,7 @@ def chat_fn(message, history, user_state={}):
77
  user_state["step"] = "get_length"
78
  return reply(f"Great! You chose {user_state['tile_type']} tiles.\nPlease enter the **length** of the space in feet:"), None, user_state
79
 
80
- # Stepwise logic
81
  if user_state.get("step") == "get_length":
82
  try:
83
  user_state["length"] = float(re.sub(r"[^\d.]", "", message))
@@ -91,7 +89,7 @@ def chat_fn(message, history, user_state={}):
91
  user_state["width"] = float(re.sub(r"[^\d.]", "", message))
92
  user_state["area"] = round(user_state["length"] * user_state["width"], 2)
93
  user_state["step"] = "get_unit"
94
- return reply(f"Your total area is {user_state['area']} sq.ft.\nWould you like to enter tile size in **mm** or **ft**?"), None, user_state
95
  except:
96
  return reply("Please enter a valid number for width (e.g. 10):"), None, user_state
97
 
@@ -100,12 +98,12 @@ def chat_fn(message, history, user_state={}):
100
  return reply("Please type either **mm** or **ft** to choose your preferred unit."), None, user_state
101
  user_state["unit"] = message
102
  user_state["step"] = "get_tile_size"
103
- return reply(f"Enter the tile size in {message.upper()} (e.g. 600x600 or 2x2):"), None, user_state
104
 
105
  if user_state.get("step") == "get_tile_size":
106
  area_per_tile = extract_tile_area(message, user_state["unit"])
107
  if not area_per_tile:
108
- return reply("I couldn't understand that size. Try something like `600x600`, `2x2`, or just `4` if square in ft."), None, user_state
109
 
110
  user_state["tile_area"] = area_per_tile
111
  user_state["step"] = "done"
@@ -151,18 +149,15 @@ def chat_fn(message, history, user_state={}):
151
 
152
  return reply("πŸ‘‹ Please type 'Floor' or 'Wall' to begin tile estimation."), None, user_state
153
 
154
- # UI setup
155
- with gr.Blocks() as demo:
156
  gr.ChatInterface(
157
  fn=chat_fn,
158
  title="🧱 TileBot – Smart Tile Estimator",
159
  description=(
160
  "Plan your tile needs easily. Just type `hi` to begin or start with `Floor` or `Wall`.\n"
161
- "I’ll ask for room size, tile size, and recommend the best fit tiles."
162
- ),
163
- theme=gr.themes.Soft(),
164
- retry_btn=None,
165
- undo_btn=None
166
  )
167
 
168
  demo.launch()
 
5
  import re
6
  from deep_translator import GoogleTranslator
7
  import warnings
8
+ from xgboost import Booster
9
 
10
  warnings.filterwarnings("ignore")
11
 
12
  # Load models
 
13
  xgb = Booster()
14
  xgb.load_model("xgb_model.json")
15
+ rf = joblib.load("rf_model.pkl") # Requires scikit-learn
 
16
 
17
  # Load tile catalog and sizes
18
  with open("tile_catalog.json", "r", encoding="utf-8") as f:
 
32
  def extract_tile_area(msg, unit):
33
  msg = msg.lower().replace("Γ—", "x").replace("into", "x").replace("*", "x")
34
  msg = msg.replace("mm", "").replace("ft", "").replace("feet", "").strip()
35
+
36
  if "x" in msg:
37
  parts = re.split(r"x", msg)
38
  if len(parts) == 2:
 
47
  except:
48
  return None
49
  else:
 
50
  try:
51
  val = float(re.sub(r"[^\d.]", "", msg))
52
  return val if unit == "ft" else None
 
75
  user_state["step"] = "get_length"
76
  return reply(f"Great! You chose {user_state['tile_type']} tiles.\nPlease enter the **length** of the space in feet:"), None, user_state
77
 
78
+ # Stepwise input
79
  if user_state.get("step") == "get_length":
80
  try:
81
  user_state["length"] = float(re.sub(r"[^\d.]", "", message))
 
89
  user_state["width"] = float(re.sub(r"[^\d.]", "", message))
90
  user_state["area"] = round(user_state["length"] * user_state["width"], 2)
91
  user_state["step"] = "get_unit"
92
+ return reply(f"βœ… Total area is {user_state['area']} sq.ft.\nWould you like to enter tile size in **mm** or **ft**?"), None, user_state
93
  except:
94
  return reply("Please enter a valid number for width (e.g. 10):"), None, user_state
95
 
 
98
  return reply("Please type either **mm** or **ft** to choose your preferred unit."), None, user_state
99
  user_state["unit"] = message
100
  user_state["step"] = "get_tile_size"
101
+ return reply(f"Enter the tile size in {message.upper()} (e.g. 600x600 or 2x2 or 4):"), None, user_state
102
 
103
  if user_state.get("step") == "get_tile_size":
104
  area_per_tile = extract_tile_area(message, user_state["unit"])
105
  if not area_per_tile:
106
+ return reply("I couldn't understand that size. Try something like `600x600`, `2x2`, or just `4` (for square tile in ft)."), None, user_state
107
 
108
  user_state["tile_area"] = area_per_tile
109
  user_state["step"] = "done"
 
149
 
150
  return reply("πŸ‘‹ Please type 'Floor' or 'Wall' to begin tile estimation."), None, user_state
151
 
152
+ # Gradio UI
153
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
154
  gr.ChatInterface(
155
  fn=chat_fn,
156
  title="🧱 TileBot – Smart Tile Estimator",
157
  description=(
158
  "Plan your tile needs easily. Just type `hi` to begin or start with `Floor` or `Wall`.\n"
159
+ "I'll ask for room size, tile size, and recommend the best-fit tiles for your space."
160
+ )
 
 
 
161
  )
162
 
163
  demo.launch()