linxinhua commited on
Commit
836ea29
·
verified ·
1 Parent(s): a022f28

key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (core/config_loader.py)

Browse files
Files changed (1) hide show
  1. core/config_loader.py +38 -1
core/config_loader.py CHANGED
@@ -2,6 +2,7 @@
2
 
3
  import os
4
  import platform
 
5
  import yaml
6
  from openai import OpenAI
7
  from dotenv import load_dotenv
@@ -23,7 +24,43 @@ env_path = BASE_DIR / PATHS["env_file"]
23
  if env_path.exists():
24
  load_dotenv(env_path)
25
 
26
- client = OpenAI(api_key=os.getenv("API_KEY"))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
  # HuggingFace logging setup. RUN_MODE env var picks the bucket
29
  # (test|pilot|prod) appended to mode_prefix to form the final HF dataset path.
 
2
 
3
  import os
4
  import platform
5
+ import threading
6
  import yaml
7
  from openai import OpenAI
8
  from dotenv import load_dotenv
 
24
  if env_path.exists():
25
  load_dotenv(env_path)
26
 
27
+ # OpenAI client pool for round-robin per-session key assignment.
28
+ # Loads OPENAI_KEY_01 .. OPENAI_KEY_10 from environment. Falls back to API_KEY
29
+ # (single client, no rotation) if no pool keys are present.
30
+ _pool_pairs = []
31
+ for _i in range(1, 11):
32
+ _k = os.getenv(f"OPENAI_KEY_{_i:02d}")
33
+ if _k:
34
+ _pool_pairs.append((_i, _k))
35
+
36
+ KEY_POOL = []
37
+ if _pool_pairs:
38
+ KEY_POOL = [(idx, OpenAI(api_key=k, max_retries=5)) for idx, k in _pool_pairs]
39
+ print(f"[key_pool] loaded {len(KEY_POOL)} OPENAI_KEY_NN secrets for per-session rotation", flush=True)
40
+ else:
41
+ _fallback = os.getenv("API_KEY")
42
+ if _fallback:
43
+ KEY_POOL = [(0, OpenAI(api_key=_fallback, max_retries=5))]
44
+ print("[key_pool] no OPENAI_KEY_NN secrets found; using single API_KEY (no rotation)", flush=True)
45
+ else:
46
+ print("[key_pool] WARNING: no OpenAI key configured", flush=True)
47
+
48
+ _counter = 0
49
+ _counter_lock = threading.Lock()
50
+
51
+
52
+ def get_next_client():
53
+ """Round-robin OpenAI client picker. Returns (key_idx, client)."""
54
+ global _counter
55
+ if not KEY_POOL:
56
+ raise RuntimeError("no OpenAI client configured (set OPENAI_KEY_01..10 or API_KEY)")
57
+ with _counter_lock:
58
+ idx_in_pool = _counter % len(KEY_POOL)
59
+ _counter += 1
60
+ return KEY_POOL[idx_in_pool]
61
+
62
+
63
+ client = KEY_POOL[0][1] if KEY_POOL else None
64
 
65
  # HuggingFace logging setup. RUN_MODE env var picks the bucket
66
  # (test|pilot|prod) appended to mode_prefix to form the final HF dataset path.