andito HF Staff commited on
Commit
1550f58
·
verified ·
1 Parent(s): c702462

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -5
app.py CHANGED
@@ -22,6 +22,9 @@ SENT_PATH = "sent.csv"
22
  # Maximum keys per order = quantity * KEYS_PER_QUANTITY
23
  KEYS_PER_QUANTITY = 10
24
 
 
 
 
25
 
26
  api = HfApi(token=HF_TOKEN)
27
  _lock = threading.Lock()
@@ -69,19 +72,23 @@ def _parse_sent(csv_text: str) -> dict:
69
  if order_num:
70
  keys_sent_str = r.get("keys_sent", "").strip()
71
  quantity_keys_sent_str = r.get("quantity_keys_sent", "").strip()
 
 
72
 
73
  sent[order_num] = {
74
  "order_number": order_num,
75
  "quantity": int(r.get("quantity", "0")),
76
  "keys_sent": keys_sent_str if keys_sent_str else "",
77
  "quantity_keys_sent": int(quantity_keys_sent_str) if quantity_keys_sent_str else 0,
 
 
78
  }
79
  return sent
80
 
81
  def _serialize_sent(sent_dict: dict) -> str:
82
  """Serialize sent dict back to CSV format"""
83
  out = io.StringIO()
84
- fieldnames = ["order_number", "quantity", "keys_sent", "quantity_keys_sent"]
85
  w = csv.DictWriter(out, fieldnames=fieldnames)
86
  w.writeheader()
87
  for order_num in sorted(sent_dict.keys()):
@@ -91,6 +98,8 @@ def _serialize_sent(sent_dict: dict) -> str:
91
  "quantity": entry["quantity"],
92
  "keys_sent": entry.get("keys_sent", ""),
93
  "quantity_keys_sent": entry.get("quantity_keys_sent", 0),
 
 
94
  })
95
  return out.getvalue()
96
 
@@ -144,7 +153,25 @@ def claim_c_key(
144
  if keys_already_sent >= max_keys:
145
  return "", f"Key limit reached for order {order_number} ({keys_already_sent}/{max_keys} keys sent)."
146
 
147
- # Create ephemeral OpenAI key using the Realtime API (expires in 1 hour)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  try:
149
  response = requests.post(
150
  "https://api.openai.com/v1/realtime/client_secrets",
@@ -172,13 +199,15 @@ def claim_c_key(
172
  except Exception as e:
173
  return "", f"Failed to create ephemeral key: {str(e)}"
174
 
175
- # Update sent.csv - store the ephemeral key
176
  existing_keys = sent[order_number]["keys_sent"]
177
  if existing_keys:
178
  sent[order_number]["keys_sent"] = existing_keys + "," + ephemeral_key
179
  else:
180
  sent[order_number]["keys_sent"] = ephemeral_key
181
  sent[order_number]["quantity_keys_sent"] += 1
 
 
182
 
183
  # Save changes
184
  updated_sent_csv = _serialize_sent(sent)
@@ -187,14 +216,14 @@ def claim_c_key(
187
  DATASET_REPO_ID,
188
  SENT_PATH,
189
  updated_sent_csv,
190
- commit_message=f"Updated sent tracking for order {order_number} at {_utc_now_iso()}",
191
  )
192
 
193
  # refresh cache immediately
194
  _cache["ts"] = 0.0
195
 
196
  keys_sent_count = sent[order_number]["quantity_keys_sent"]
197
- return ephemeral_key, f"Ephemeral key sent successfully. ({keys_sent_count}/{max_keys} keys sent for this order)"
198
 
199
  # -------------------------
200
  # UI
@@ -216,3 +245,4 @@ with gr.Blocks(title="API") as demo:
216
 
217
  demo.queue()
218
  demo.launch()
 
 
22
  # Maximum keys per order = quantity * KEYS_PER_QUANTITY
23
  KEYS_PER_QUANTITY = 10
24
 
25
+ # Reuse ephemeral keys if created within this time window (in seconds)
26
+ KEY_REUSE_WINDOW_SECONDS = 40 * 60 # 40 minutes
27
+
28
 
29
  api = HfApi(token=HF_TOKEN)
30
  _lock = threading.Lock()
 
72
  if order_num:
73
  keys_sent_str = r.get("keys_sent", "").strip()
74
  quantity_keys_sent_str = r.get("quantity_keys_sent", "").strip()
75
+ last_key_sent_str = r.get("last_key_sent", "").strip()
76
+ last_key_created_at_str = r.get("last_key_created_at", "").strip()
77
 
78
  sent[order_num] = {
79
  "order_number": order_num,
80
  "quantity": int(r.get("quantity", "0")),
81
  "keys_sent": keys_sent_str if keys_sent_str else "",
82
  "quantity_keys_sent": int(quantity_keys_sent_str) if quantity_keys_sent_str else 0,
83
+ "last_key_sent": last_key_sent_str if last_key_sent_str else "",
84
+ "last_key_created_at": last_key_created_at_str if last_key_created_at_str else "",
85
  }
86
  return sent
87
 
88
  def _serialize_sent(sent_dict: dict) -> str:
89
  """Serialize sent dict back to CSV format"""
90
  out = io.StringIO()
91
+ fieldnames = ["order_number", "quantity", "keys_sent", "quantity_keys_sent", "last_key_sent", "last_key_created_at"]
92
  w = csv.DictWriter(out, fieldnames=fieldnames)
93
  w.writeheader()
94
  for order_num in sorted(sent_dict.keys()):
 
98
  "quantity": entry["quantity"],
99
  "keys_sent": entry.get("keys_sent", ""),
100
  "quantity_keys_sent": entry.get("quantity_keys_sent", 0),
101
+ "last_key_sent": entry.get("last_key_sent", ""),
102
+ "last_key_created_at": entry.get("last_key_created_at", ""),
103
  })
104
  return out.getvalue()
105
 
 
153
  if keys_already_sent >= max_keys:
154
  return "", f"Key limit reached for order {order_number} ({keys_already_sent}/{max_keys} keys sent)."
155
 
156
+ # Check if we can reuse a recently created key
157
+ last_key_sent = sent[order_number].get("last_key_sent", "")
158
+ last_key_created_at = sent[order_number].get("last_key_created_at", "")
159
+
160
+ if last_key_sent and last_key_created_at:
161
+ try:
162
+ # Parse the last creation timestamp
163
+ last_created_time = datetime.fromisoformat(last_key_created_at)
164
+ now = datetime.now(timezone.utc)
165
+ time_since_creation = (now - last_created_time).total_seconds()
166
+
167
+ # If the last key was created within the reuse window, reuse it
168
+ if time_since_creation < KEY_REUSE_WINDOW_SECONDS:
169
+ return last_key_sent, f"Reused recent key. ({keys_already_sent}/{max_keys} keys sent for this order)"
170
+ except (ValueError, TypeError):
171
+ # If there's an error parsing the timestamp, create a new key
172
+ pass
173
+
174
+ # Create a new ephemeral key
175
  try:
176
  response = requests.post(
177
  "https://api.openai.com/v1/realtime/client_secrets",
 
199
  except Exception as e:
200
  return "", f"Failed to create ephemeral key: {str(e)}"
201
 
202
+ # Update sent.csv - store the ephemeral key and timestamp
203
  existing_keys = sent[order_number]["keys_sent"]
204
  if existing_keys:
205
  sent[order_number]["keys_sent"] = existing_keys + "," + ephemeral_key
206
  else:
207
  sent[order_number]["keys_sent"] = ephemeral_key
208
  sent[order_number]["quantity_keys_sent"] += 1
209
+ sent[order_number]["last_key_sent"] = ephemeral_key
210
+ sent[order_number]["last_key_created_at"] = _utc_now_iso()
211
 
212
  # Save changes
213
  updated_sent_csv = _serialize_sent(sent)
 
216
  DATASET_REPO_ID,
217
  SENT_PATH,
218
  updated_sent_csv,
219
+ commit_message=f"Updated sent tracking at {_utc_now_iso()}",
220
  )
221
 
222
  # refresh cache immediately
223
  _cache["ts"] = 0.0
224
 
225
  keys_sent_count = sent[order_number]["quantity_keys_sent"]
226
+ return ephemeral_key, f"New ephemeral key sent successfully. ({keys_sent_count}/{max_keys} keys sent for this order)"
227
 
228
  # -------------------------
229
  # UI
 
245
 
246
  demo.queue()
247
  demo.launch()
248
+