diff options
| author | Alexander_Kabui | 2025-07-14 16:11:47 +0300 |
|---|---|---|
| committer | BonfaceKilz | 2025-07-16 22:50:45 +0300 |
| commit | 8765e29bcbe8d790e478cdcebcee31cafdeec33f (patch) | |
| tree | d522396cf3ea59cd3d350e452c198706f40a28fe /gn3/api/llm.py | |
| parent | c6a3f1945af9a1891d3ecd19ff43b3a3a6eae62c (diff) | |
| download | genenetwork3-8765e29bcbe8d790e478cdcebcee31cafdeec33f.tar.gz | |
refactor: pass required fields directly instead of request object for rate limiting.
Diffstat (limited to 'gn3/api/llm.py')
| -rw-r--r-- | gn3/api/llm.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/gn3/api/llm.py b/gn3/api/llm.py index e8ba2b3..e84bc4e 100644 --- a/gn3/api/llm.py +++ b/gn3/api/llm.py @@ -128,16 +128,14 @@ def is_valid_address(ip_string) -> bool : return False -def check_rate_limiter(request_metadata, db_path, tokens_lifespan=1440, default_tokens=4): +def check_rate_limiter(ip_address, db_path, query, tokens_lifespan=1440, default_tokens=4): """ Checks if an anonymous user has a valid token within the given lifespan. If expired or not found, creates or resets the token bucket. - `tokens_lifespan` is in seconds. 24*60 + `tokens_lifespan` is in seconds. 1440 seconds. default_token set to 4 requests per hour. """ # Extract IP address /identifier - user_metadata = json.loads(request_metadata.headers.get("Anony-Metadata", {})) - ip_address = user_metadata.get("ip_address") if not ip_address or not is_valid_address(ip_address): raise ValueError("Please provide a valid IP address") now = datetime.utcnow() @@ -168,7 +166,7 @@ def check_rate_limiter(request_metadata, db_path, tokens_lifespan=1440, default_ return True else: raise LLMError("Rate limit exceeded. Please try again later.", - request_metadata.args.get("query")) + query) else: # Token expired — reset ~probably reset this after 200 status cursor.execute(""" @@ -217,7 +215,10 @@ def search(auth_token=None, valid_anony=False): if valid_anony: # rate limit anonymous verified users - check_rate_limiter(request, current_app.config["LLM_DB_PATH"]) + user_metadata = json.loads(request.headers.get("Anony-Metadata", {})) + check_rate_limiter(user_metadata.get("ip_address", ""), + current_app.config["LLM_DB_PATH"], + request.args.get("query", "")) task_id, answer, refs = get_gnqa( query, fahamu_token, current_app.config.get("DATA_DIR")) |
