milwright commited on
Commit
d58d5bc
·
1 Parent(s): b685714

proxy leaderboard endpoints to hf space

Browse files
Files changed (1) hide show
  1. app.py +43 -79
app.py CHANGED
@@ -235,70 +235,61 @@ async def read_root():
235
  @app.get("/api/leaderboard", response_model=LeaderboardResponse)
236
  async def get_leaderboard():
237
  """
238
- Get current leaderboard data (Redis primary, HF Space fallback)
239
  """
240
- if not leaderboard_service:
241
- return {
242
- "success": True,
243
- "leaderboard": [],
244
- "message": "Leaderboard service not available (using localStorage only)"
245
- }
246
-
247
  try:
248
- leaderboard = leaderboard_service.get_leaderboard()
 
 
 
 
249
  return {
250
  "success": True,
251
- "leaderboard": leaderboard,
252
- "message": f"Retrieved {len(leaderboard)} entries"
253
  }
254
- except Exception as e:
255
- logger.error(f"Error fetching leaderboard: {e}")
256
- raise HTTPException(status_code=500, detail=str(e))
257
 
258
 
259
  @app.post("/api/leaderboard/add")
260
  async def add_leaderboard_entry(entry: LeaderboardEntry):
261
  """
262
- Add new entry to leaderboard
263
  """
264
- if not leaderboard_service:
265
- raise HTTPException(status_code=503, detail="Leaderboard service not available")
266
-
267
  try:
268
- success = leaderboard_service.add_entry(entry.dict())
269
- if success:
270
- return {
271
- "success": True,
272
- "message": f"Added {entry.initials} to leaderboard"
273
- }
274
- else:
275
- raise HTTPException(status_code=500, detail="Failed to add entry")
276
- except ValueError as e:
277
- raise HTTPException(status_code=403, detail=str(e))
 
 
278
  except Exception as e:
279
- logger.error(f"Error adding entry: {e}")
280
  raise HTTPException(status_code=500, detail=str(e))
281
 
282
 
283
  @app.post("/api/leaderboard/update")
284
  async def update_leaderboard(entries: List[LeaderboardEntry]):
285
  """
286
- Update entire leaderboard (replace all data)
287
  """
288
- if not leaderboard_service:
289
- raise HTTPException(status_code=503, detail="Leaderboard service not available")
290
-
291
  try:
292
- success = leaderboard_service.update_leaderboard([e.dict() for e in entries])
293
- if success:
294
- return {
295
- "success": True,
296
- "message": "Leaderboard updated successfully"
297
- }
298
- else:
299
- raise HTTPException(status_code=500, detail="Failed to update leaderboard")
300
- except ValueError as e:
301
- raise HTTPException(status_code=403, detail=str(e))
 
302
  except Exception as e:
303
  logger.error(f"Error updating leaderboard: {e}")
304
  raise HTTPException(status_code=500, detail=str(e))
@@ -307,22 +298,15 @@ async def update_leaderboard(entries: List[LeaderboardEntry]):
307
  @app.delete("/api/leaderboard/clear")
308
  async def clear_leaderboard():
309
  """
310
- Clear all leaderboard data (admin only)
311
  """
312
- if not leaderboard_service:
313
- raise HTTPException(status_code=503, detail="Leaderboard service not available")
314
-
315
  try:
316
- success = leaderboard_service.clear_leaderboard()
317
- if success:
318
- return {
319
- "success": True,
320
- "message": "Leaderboard cleared"
321
- }
322
- else:
323
- raise HTTPException(status_code=500, detail="Failed to clear leaderboard")
324
- except ValueError as e:
325
- raise HTTPException(status_code=403, detail=str(e))
326
  except Exception as e:
327
  logger.error(f"Error clearing leaderboard: {e}")
328
  raise HTTPException(status_code=500, detail=str(e))
@@ -331,29 +315,9 @@ async def clear_leaderboard():
331
  @app.post("/api/leaderboard/seed-from-hf")
332
  async def seed_leaderboard_from_hf():
333
  """
334
- Force re-seed Redis leaderboard from HF Space (admin function).
335
- Use this to migrate existing HF Space data to Redis.
336
  """
337
- if not leaderboard_service:
338
- raise HTTPException(status_code=503, detail="Leaderboard service not available")
339
-
340
- try:
341
- success = leaderboard_service.force_seed_from_hf()
342
- if success:
343
- leaderboard = leaderboard_service.get_leaderboard()
344
- return {
345
- "success": True,
346
- "message": f"Seeded Redis with {len(leaderboard)} entries from HF Space",
347
- "entries": len(leaderboard)
348
- }
349
- else:
350
- return {
351
- "success": False,
352
- "message": "No entries found in HF Space to seed"
353
- }
354
- except Exception as e:
355
- logger.error(f"Error seeding leaderboard from HF: {e}")
356
- raise HTTPException(status_code=500, detail=str(e))
357
 
358
 
359
  # ===== ANALYTICS API ENDPOINTS =====
 
235
  @app.get("/api/leaderboard", response_model=LeaderboardResponse)
236
  async def get_leaderboard():
237
  """
238
+ Get leaderboard data from HF Space
239
  """
 
 
 
 
 
 
 
240
  try:
241
+ hf_leaderboard_url = "https://milwright-cloze-leaderboard.hf.space/api/leaderboard"
242
+ data = await _fetch_json(hf_leaderboard_url, timeout=5.0)
243
+ return data
244
+ except Exception as e:
245
+ logger.error(f"Error fetching leaderboard from HF: {e}")
246
  return {
247
  "success": True,
248
+ "leaderboard": [],
249
+ "message": "Leaderboard service unavailable (using localStorage)"
250
  }
 
 
 
251
 
252
 
253
  @app.post("/api/leaderboard/add")
254
  async def add_leaderboard_entry(entry: LeaderboardEntry):
255
  """
256
+ Add entry to leaderboard via HF Space proxy
257
  """
 
 
 
258
  try:
259
+ hf_leaderboard_url = "https://milwright-cloze-leaderboard.hf.space/api/leaderboard/add"
260
+ # Use requests to POST to HF space
261
+ import json
262
+ req = urllib.request.Request(
263
+ hf_leaderboard_url,
264
+ data=json.dumps(entry.dict()).encode('utf-8'),
265
+ headers={"Content-Type": "application/json"},
266
+ method="POST"
267
+ )
268
+ with urllib.request.urlopen(req, timeout=5.0) as resp:
269
+ response_data = json.loads(resp.read().decode('utf-8'))
270
+ return response_data
271
  except Exception as e:
272
+ logger.error(f"Error adding to leaderboard: {e}")
273
  raise HTTPException(status_code=500, detail=str(e))
274
 
275
 
276
  @app.post("/api/leaderboard/update")
277
  async def update_leaderboard(entries: List[LeaderboardEntry]):
278
  """
279
+ Update leaderboard via HF Space proxy
280
  """
 
 
 
281
  try:
282
+ hf_leaderboard_url = "https://milwright-cloze-leaderboard.hf.space/api/leaderboard/update"
283
+ import json
284
+ req = urllib.request.Request(
285
+ hf_leaderboard_url,
286
+ data=json.dumps([e.dict() for e in entries]).encode('utf-8'),
287
+ headers={"Content-Type": "application/json"},
288
+ method="POST"
289
+ )
290
+ with urllib.request.urlopen(req, timeout=5.0) as resp:
291
+ response_data = json.loads(resp.read().decode('utf-8'))
292
+ return response_data
293
  except Exception as e:
294
  logger.error(f"Error updating leaderboard: {e}")
295
  raise HTTPException(status_code=500, detail=str(e))
 
298
  @app.delete("/api/leaderboard/clear")
299
  async def clear_leaderboard():
300
  """
301
+ Clear leaderboard via HF Space proxy
302
  """
 
 
 
303
  try:
304
+ hf_leaderboard_url = "https://milwright-cloze-leaderboard.hf.space/api/leaderboard/clear"
305
+ req = urllib.request.Request(hf_leaderboard_url, method="DELETE")
306
+ with urllib.request.urlopen(req, timeout=5.0) as resp:
307
+ import json
308
+ response_data = json.loads(resp.read().decode('utf-8'))
309
+ return response_data
 
 
 
 
310
  except Exception as e:
311
  logger.error(f"Error clearing leaderboard: {e}")
312
  raise HTTPException(status_code=500, detail=str(e))
 
315
  @app.post("/api/leaderboard/seed-from-hf")
316
  async def seed_leaderboard_from_hf():
317
  """
318
+ Fetch leaderboard from HF Space (deprecated - use /api/leaderboard instead)
 
319
  """
320
+ return await get_leaderboard()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
 
322
 
323
  # ===== ANALYTICS API ENDPOINTS =====