petrov826 commited on
Commit
891518c
·
verified ·
1 Parent(s): ff710d7

rename APICallCounter to RateLimiter and refactor

Browse files
Files changed (2) hide show
  1. api_call_counter.py +0 -25
  2. rate_limiter.py +42 -0
api_call_counter.py DELETED
@@ -1,25 +0,0 @@
1
- class APICallCounter:
2
- """
3
- litellmのAPI呼び出し回数をカウントするクラス。
4
- """
5
- def __init__(self):
6
- """成功・失敗カウンターを0で初期化する"""
7
- self.successful_calls = 0
8
- self.failed_calls = 0
9
-
10
- def count_successful_call(self, kwargs, completion_obj, start_time, end_time):
11
- """API呼び出しが成功したときに呼び出され、成功カウンターを1増やす。"""
12
- self.successful_calls += 1
13
-
14
- def count_failed_call(self, kwargs, completion_obj, start_time, end_time):
15
- """API呼び出しが失敗したときに呼び出され、失敗カウンターを1増やす。"""
16
- self.failed_calls += 1
17
-
18
- def get_total_calls(self):
19
- """現在の合計カウント状況を返す。"""
20
- return self.successful_calls + self.failed_calls
21
-
22
- def reset(self):
23
- """カウント状況をリセットする"""
24
- self.successful_calls = 0
25
- self.failed_calls = 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
rate_limiter.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+
3
+ class RateLimiter:
4
+ """
5
+ litellmのAPI呼び出し回数をカウントして、
6
+ 一定回数のAPI呼び出しが行われるたびに一定秒間待機する
7
+ """
8
+ def __init__(self, calls_per_wait: int = 10, seconds_to_wait: int = 60):
9
+ """
10
+ RateLimiterを初期化する
11
+
12
+ Args:
13
+ calls_per_wait (int): 待機するまでの呼び出し回数
14
+ seconds_to_wait (int): 待機する秒数
15
+ """
16
+ self.calls_per_wait = calls_per_wait
17
+ self.seconds_to_wait = seconds_to_wait
18
+
19
+ self.successful_calls = 0 # APIの呼び出し成功回数
20
+ self.failed_calls = 0 # APIの呼び出し失敗回数
21
+
22
+ def increment_successful_calls(self, kwargs, completion_obj, start_time, end_time):
23
+ """API呼び出しが成功したときに、呼び出し成功回数を1増やす。"""
24
+ self.successful_calls += 1
25
+ self.sleep_if_needed()
26
+
27
+ def increment_failed_calls(self, kwargs, completion_obj, start_time, end_time):
28
+ """API呼び出しが失敗したときに、呼び出し失敗回数を1増やす。"""
29
+ self.failed_calls += 1
30
+ self.sleep_if_needed()
31
+
32
+ def sleep_if_needed(self):
33
+ """
34
+ 呼び出し回数が`calls_per_wait`を超えていたら、
35
+ APIの呼び出し回数をリセットして`seconds_to_wait`秒待機する
36
+ """
37
+ if (self.successful_calls + self.failed_calls) >= self.calls_per_wait:
38
+ self.successful_calls = 0
39
+ self.failed_calls = 0
40
+
41
+ time.sleep(self.seconds_to_wait)
42
+ print(f"呼び出し回数がf{self.calls_per_wait}回を超えたので、f{self.seconds_to_wait}秒待機します")