Prince Vaviya commited on
Commit
6445bd1
·
1 Parent(s): 17b6c6d

improved reasoning

Browse files
Files changed (2) hide show
  1. app.py +1 -3
  2. size_rules.py +12 -14
app.py CHANGED
@@ -14,11 +14,9 @@ def predict_size(chest, waist, bicep, shoulder, fit_pref):
14
 
15
  explanation = {
16
  "recommended_size": final_size,
17
- "base_size": base_size,
18
  "fit_preference": fit_pref,
19
- "final_size": final_size,
20
  "confidence": "high",
21
- "reason": f"{base_reason}. {fit_reason}"
22
  }
23
 
24
  html_output = f"""
 
14
 
15
  explanation = {
16
  "recommended_size": final_size,
 
17
  "fit_preference": fit_pref,
 
18
  "confidence": "high",
19
+ "reason": f"{base_reason} {fit_reason}"
20
  }
21
 
22
  html_output = f"""
size_rules.py CHANGED
@@ -25,29 +25,24 @@ def evaluate_size(measurements):
25
  # This is the smallest size that fits.
26
  # Determine reasoning.
27
  if i == 0:
28
- return size, "Smallest available size fits all measurements."
29
 
30
  # Check why the previous size failed logic
31
  prev_size = ordered_sizes[i-1]
32
  prev_limits = SIZE_CHART[prev_size]
33
- reasons = []
34
  for key in PRIORITY:
35
  if measurements[key] > prev_limits[key][1]:
36
- reasons.append(f"{key.capitalize()} ({measurements[key]}) > {prev_size} limit ({prev_limits[key][1]})")
37
 
38
- reason_str = f"Requires {size} because: " + ", ".join(reasons)
39
  return size, reason_str
40
 
41
  # If even XL fails (XL max is exceeded)
42
  # We return XL+
43
  # Find what exceeded XL
44
  xl_limits = SIZE_CHART["XL"]
45
- reasons = []
46
- for key in PRIORITY:
47
- if measurements[key] > xl_limits[key][1]:
48
- reasons.append(f"{key.capitalize()} ({measurements[key]}) > XL limit ({xl_limits[key][1]})")
49
-
50
- return "XL+", "Measurements exceed XL limits: " + ", ".join(reasons)
51
 
52
  def apply_fit_preference(base_size, preference, measurements=None):
53
  """
@@ -85,14 +80,17 @@ def apply_fit_preference(base_size, preference, measurements=None):
85
  # e.g., measurement 40.0 (int 40) matches limit 40 (int 40)
86
  if int(measurements[key]) == int(limits[key][1]):
87
  extension_needed = True
88
- reasons.append(f"{key} ({measurements[key]}) matches limit ({limits[key][1]})")
89
 
90
  if extension_needed:
91
  if idx < len(sizes) - 1:
92
- return sizes[idx + 1], f"Fit: Regular (Extended size due to exact match on: {', '.join(reasons)})"
 
 
 
93
  else:
94
- return base_size, "Fit: Regular (Exact match but already at max size)"
95
  else:
96
- return base_size, "Fit: Regular (No exact boundary match, kept base size)"
97
 
98
  return base_size, "Unknown preference"
 
25
  # This is the smallest size that fits.
26
  # Determine reasoning.
27
  if i == 0:
28
+ return size, f"Your measurements fit well in size {size}."
29
 
30
  # Check why the previous size failed logic
31
  prev_size = ordered_sizes[i-1]
32
  prev_limits = SIZE_CHART[prev_size]
33
+ simplified_reasons = []
34
  for key in PRIORITY:
35
  if measurements[key] > prev_limits[key][1]:
36
+ simplified_reasons.append(f"{key.capitalize()} ({measurements[key]}) is larger than size {prev_size}")
37
 
38
+ reason_str = f"We recommend size {size} because your " + " and ".join(simplified_reasons) + "."
39
  return size, reason_str
40
 
41
  # If even XL fails (XL max is exceeded)
42
  # We return XL+
43
  # Find what exceeded XL
44
  xl_limits = SIZE_CHART["XL"]
45
+ return "XL+", f"Your measurements are larger than size XL."
 
 
 
 
 
46
 
47
  def apply_fit_preference(base_size, preference, measurements=None):
48
  """
 
80
  # e.g., measurement 40.0 (int 40) matches limit 40 (int 40)
81
  if int(measurements[key]) == int(limits[key][1]):
82
  extension_needed = True
83
+ reasons.append(f"{key}")
84
 
85
  if extension_needed:
86
  if idx < len(sizes) - 1:
87
+ # Extract just the key names for the reason
88
+ matching_keys = [r.split()[0].capitalize() for r in reasons]
89
+ keys_str = " and ".join(matching_keys)
90
+ return sizes[idx + 1], f"Your {keys_str} is at the very top of size {base_size}, so we suggest size {sizes[idx + 1]} for a comfortable Regular fit."
91
  else:
92
+ return base_size, f"You are at the top of size {base_size}, which is the largest available."
93
  else:
94
+ return base_size, f"Size {base_size} provides the best Regular fit for you."
95
 
96
  return base_size, "Unknown preference"