sammy786 commited on
Commit
f3302b3
Β·
verified Β·
1 Parent(s): 37fda20

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -11
app.py CHANGED
@@ -18,10 +18,28 @@ def safe_get(data: Dict, key: str, default: Any = None) -> Any:
18
  def normalize_recommendation_data(data: Dict) -> Dict:
19
  """
20
  Normalize API response to ensure all required fields exist.
21
- Handles both orchestrator format and direct API format.
22
  """
23
 
24
- # Handle case where recommended_card is a dict (orchestrator format)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  recommended_card = safe_get(data, 'recommended_card', {})
26
  if isinstance(recommended_card, dict):
27
  card_name = safe_get(recommended_card, 'card_name', 'Unknown Card')
@@ -205,25 +223,23 @@ def get_recommendation_with_ai(user_id, merchant, category, amount):
205
  return "❌ Please enter a valid amount greater than $0.", None
206
 
207
  try:
208
- # Map category to MCC
209
- mcc = MCC_CATEGORIES.get(category, "5999")
210
-
211
  # Get base recommendation from orchestrator
212
- # NEW:
213
  result = client.get_recommendation(
214
  user_id=user_id,
215
  merchant=merchant,
216
- mcc=mcc,
217
- amount_usd=float(amount)
 
218
  )
219
 
220
  # Check for errors
221
- if result.get('error'):
222
  error_msg = result.get('error', 'Unknown error')
223
  return f"❌ Error: {error_msg}", None
224
 
225
  # Normalize the data to ensure all fields exist
226
- data = normalize_recommendation_data(result)
227
 
228
  # Generate LLM explanation if enabled
229
  ai_explanation = ""
@@ -305,7 +321,7 @@ def get_recommendation_with_ai(user_id, merchant, category, amount):
305
  error_details = traceback.format_exc()
306
  print(f"Recommendation error: {error_details}")
307
  return f"❌ Error: {str(e)}\n\nPlease check your API connection or try again.", None
308
-
309
 
310
  def create_rewards_comparison_chart(data: Dict) -> go.Figure:
311
  """Create rewards comparison chart with proper error handling"""
 
18
  def normalize_recommendation_data(data: Dict) -> Dict:
19
  """
20
  Normalize API response to ensure all required fields exist.
21
+ Handles both orchestrator format and mock data format.
22
  """
23
 
24
+ # Check if this is mock data (simpler format)
25
+ if data.get('mock_data'):
26
+ # Mock data has simpler structure
27
+ return {
28
+ 'recommended_card': safe_get(data, 'recommended_card', 'Unknown Card'),
29
+ 'rewards_earned': float(safe_get(data, 'rewards_earned', 0)),
30
+ 'rewards_rate': safe_get(data, 'rewards_rate', 'N/A'),
31
+ 'merchant': safe_get(data, 'merchant', 'Unknown Merchant'),
32
+ 'category': safe_get(data, 'category', 'Unknown'),
33
+ 'amount': float(safe_get(data, 'amount', 0)),
34
+ 'annual_potential': float(safe_get(data, 'annual_potential', 0)),
35
+ 'optimization_score': int(safe_get(data, 'optimization_score', 85)),
36
+ 'reasoning': safe_get(data, 'reasoning', 'Optimal choice'),
37
+ 'warnings': safe_get(data, 'warnings', []),
38
+ 'alternatives': safe_get(data, 'alternatives', []),
39
+ 'mock_data': True
40
+ }
41
+
42
+ # Handle orchestrator format (recommended_card is a dict)
43
  recommended_card = safe_get(data, 'recommended_card', {})
44
  if isinstance(recommended_card, dict):
45
  card_name = safe_get(recommended_card, 'card_name', 'Unknown Card')
 
223
  return "❌ Please enter a valid amount greater than $0.", None
224
 
225
  try:
 
 
 
226
  # Get base recommendation from orchestrator
227
+ # Note: Your API client expects (user_id, merchant, category, amount, mcc)
228
  result = client.get_recommendation(
229
  user_id=user_id,
230
  merchant=merchant,
231
+ category=category,
232
+ amount=float(amount),
233
+ mcc=None # Let the client map category to MCC
234
  )
235
 
236
  # Check for errors
237
+ if not result.get('success'):
238
  error_msg = result.get('error', 'Unknown error')
239
  return f"❌ Error: {error_msg}", None
240
 
241
  # Normalize the data to ensure all fields exist
242
+ data = normalize_recommendation_data(result.get('data', {}))
243
 
244
  # Generate LLM explanation if enabled
245
  ai_explanation = ""
 
321
  error_details = traceback.format_exc()
322
  print(f"Recommendation error: {error_details}")
323
  return f"❌ Error: {str(e)}\n\nPlease check your API connection or try again.", None
324
+
325
 
326
  def create_rewards_comparison_chart(data: Dict) -> go.Figure:
327
  """Create rewards comparison chart with proper error handling"""