vineet124jig commited on
Commit
e7d0859
·
verified ·
1 Parent(s): e4b1257

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -6
app.py CHANGED
@@ -1,16 +1,63 @@
1
  import gradio as gr
2
  import requests
3
- from PIL import Image
4
- import io
5
- import os
 
 
6
  BASE_URL = "https://api.jigsawstack.com/v1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
- headers = {"x-api-key": os.getenv("JIGSAWSTACK_API_KEY")}
 
 
 
 
 
 
9
 
 
 
 
10
 
11
- # ----------------- JigsawStack API Wrappers ------------------
 
 
 
 
 
 
 
 
 
 
12
 
13
- def image_translate(source_type, image_url, file_store_key, target_language):
 
 
 
 
 
14
  if not target_language or not target_language.strip():
15
  return "Error: Target language is required.", None
16
 
 
1
  import gradio as gr
2
  import requests
3
+ import json
4
+ import os
5
+ import time
6
+ from collections import defaultdict
7
+
8
  BASE_URL = "https://api.jigsawstack.com/v1"
9
+ headers = {
10
+ "x-api-key": os.getenv("JIGSAWSTACK_API_KEY")
11
+ }
12
+
13
+
14
+ # Rate limiting configuration
15
+ request_times = defaultdict(list)
16
+ MAX_REQUESTS = 1 # Maximum requests per time window
17
+ TIME_WINDOW = 3600 # Time window in seconds (1 hour)
18
+
19
+ def get_real_ip(request: gr.Request):
20
+ """Extract real IP address using x-forwarded-for header or fallback"""
21
+ if not request:
22
+ return "unknown"
23
+
24
+ forwarded = request.headers.get("x-forwarded-for")
25
+ if forwarded:
26
+ ip = forwarded.split(",")[0].strip() # First IP in the list is the client's
27
+ else:
28
+ ip = request.client.host # fallback
29
+ return ip
30
 
31
+ def check_rate_limit(request: gr.Request):
32
+ """Check if the current request exceeds rate limits"""
33
+ if not request:
34
+ return True, "Rate limit check failed - no request info"
35
+
36
+ ip = get_real_ip(request)
37
+ now = time.time()
38
 
39
+ # Clean up old timestamps outside the time window
40
+ request_times[ip] = [t for t in request_times[ip] if now - t < TIME_WINDOW]
41
+
42
 
43
+ # Check if rate limit exceeded
44
+ if len(request_times[ip]) >= MAX_REQUESTS:
45
+ time_remaining = int(TIME_WINDOW - (now - request_times[ip][0]))
46
+ time_remaining_minutes = round(time_remaining / 60, 1)
47
+ time_window_minutes = round(TIME_WINDOW / 60, 1)
48
+
49
+ return False, f"Rate limit exceeded. You can make {MAX_REQUESTS} requests per {time_window_minutes} minutes. Try again in {time_remaining_minutes} minutes."
50
+
51
+ # Add current request timestamp
52
+ request_times[ip].append(now)
53
+ return True, ""
54
 
55
+
56
+ def image_translate(source_type, image_url, file_store_key, target_language, request: gr.Request):
57
+ rate_limit_ok, rate_limit_msg = check_rate_limit(request)
58
+ if not rate_limit_ok:
59
+ return rate_limit_msg, None
60
+
61
  if not target_language or not target_language.strip():
62
  return "Error: Target language is required.", None
63