feat: api_key pool
Browse files- app.py +4 -3
- autotab.py +11 -3
app.py
CHANGED
@@ -15,7 +15,7 @@ def auto_tabulator_completion(
|
|
15 |
generation_config: dict,
|
16 |
request_interval: float,
|
17 |
save_every: int,
|
18 |
-
|
19 |
base_url: str,
|
20 |
) -> tuple[str, str, str, pd.DataFrame]:
|
21 |
output_file_name = "ouput.xlsx"
|
@@ -28,7 +28,7 @@ def auto_tabulator_completion(
|
|
28 |
generation_config=json.loads(generation_config),
|
29 |
request_interval=request_interval,
|
30 |
save_every=save_every,
|
31 |
-
|
32 |
base_url=base_url,
|
33 |
)
|
34 |
start = time.time()
|
@@ -54,7 +54,8 @@ inputs = [
|
|
54 |
gr.Slider(value=0.1, minimum=0, maximum=10, label="Request Interval in Seconds"),
|
55 |
gr.Slider(value=100, minimum=1, maximum=1000, step=1, label="Save Every N Steps"),
|
56 |
gr.Textbox(
|
57 |
-
value="sk-exhahhjfqyanmwewndukcqtrpegfdbwszkjucvcpajdufiah",
|
|
|
58 |
),
|
59 |
gr.Textbox(value="https://public-beta-api.siliconflow.cn/v1", label="Base URL"),
|
60 |
]
|
|
|
15 |
generation_config: dict,
|
16 |
request_interval: float,
|
17 |
save_every: int,
|
18 |
+
str_api_keys: str,
|
19 |
base_url: str,
|
20 |
) -> tuple[str, str, str, pd.DataFrame]:
|
21 |
output_file_name = "ouput.xlsx"
|
|
|
28 |
generation_config=json.loads(generation_config),
|
29 |
request_interval=request_interval,
|
30 |
save_every=save_every,
|
31 |
+
api_keys=str_api_keys.split(),
|
32 |
base_url=base_url,
|
33 |
)
|
34 |
start = time.time()
|
|
|
54 |
gr.Slider(value=0.1, minimum=0, maximum=10, label="Request Interval in Seconds"),
|
55 |
gr.Slider(value=100, minimum=1, maximum=1000, step=1, label="Save Every N Steps"),
|
56 |
gr.Textbox(
|
57 |
+
value="sk-exhahhjfqyanmwewndukcqtrpegfdbwszkjucvcpajdufiah",
|
58 |
+
label="API Key(s). One per line.",
|
59 |
),
|
60 |
gr.Textbox(value="https://public-beta-api.siliconflow.cn/v1", label="Base URL"),
|
61 |
]
|
autotab.py
CHANGED
@@ -19,7 +19,7 @@ class AutoTab:
|
|
19 |
generation_config: dict,
|
20 |
request_interval: float,
|
21 |
save_every: int,
|
22 |
-
|
23 |
base_url: str,
|
24 |
):
|
25 |
self.in_file_path = in_file_path
|
@@ -30,8 +30,9 @@ class AutoTab:
|
|
30 |
self.generation_config = generation_config
|
31 |
self.request_interval = request_interval
|
32 |
self.save_every = save_every
|
33 |
-
self.
|
34 |
self.base_url = base_url
|
|
|
35 |
|
36 |
# βββ IO βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
37 |
|
@@ -47,8 +48,15 @@ class AutoTab:
|
|
47 |
@retry(wait=wait_random_exponential(min=20, max=60), stop=stop_after_attempt(6))
|
48 |
def openai_request(self, query: str) -> str:
|
49 |
"""Make a request to an OpenAI-format API."""
|
|
|
|
|
50 |
time.sleep(self.request_interval)
|
51 |
-
|
|
|
|
|
|
|
|
|
|
|
52 |
response = client.chat.completions.create(
|
53 |
model=self.model_name,
|
54 |
messages=[{"role": "user", "content": query}],
|
|
|
19 |
generation_config: dict,
|
20 |
request_interval: float,
|
21 |
save_every: int,
|
22 |
+
api_keys: list[str],
|
23 |
base_url: str,
|
24 |
):
|
25 |
self.in_file_path = in_file_path
|
|
|
30 |
self.generation_config = generation_config
|
31 |
self.request_interval = request_interval
|
32 |
self.save_every = save_every
|
33 |
+
self.api_keys = api_keys
|
34 |
self.base_url = base_url
|
35 |
+
self.request_count = 0
|
36 |
|
37 |
# βββ IO βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
38 |
|
|
|
48 |
@retry(wait=wait_random_exponential(min=20, max=60), stop=stop_after_attempt(6))
|
49 |
def openai_request(self, query: str) -> str:
|
50 |
"""Make a request to an OpenAI-format API."""
|
51 |
+
|
52 |
+
# Wait for the request interval
|
53 |
time.sleep(self.request_interval)
|
54 |
+
|
55 |
+
# Increment the request count
|
56 |
+
api_key = self.api_keys[self.request_count % len(self.api_keys)]
|
57 |
+
self.request_count += 1
|
58 |
+
|
59 |
+
client = openai.OpenAI(api_key=api_key, base_url=self.base_url)
|
60 |
response = client.chat.completions.create(
|
61 |
model=self.model_name,
|
62 |
messages=[{"role": "user", "content": query}],
|