diff --git a/.gitignore b/.gitignore index 2d19ec7..91666db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ venv +.venv .env \ No newline at end of file diff --git a/README.md b/README.md index 5da38d8..10c1a62 100644 --- a/README.md +++ b/README.md @@ -44,19 +44,19 @@ This lists various services that provide free access or credits towards API-base Google AI Studio Free tier Gemini API access not available within UK/CH/EEA/EU/
Data is used for training. Gemini 1.5 Flash - 15 requests/min
1500 requests/day
1 million tokens/min + 1000000 tokens/minute
1500 requests/day
15 requests/minute Gemini 1.5 Pro - 2 request/min
50 requests/day
32000 tokens/min + 32000 tokens/minute
50 requests/day
2 requests/minute Gemini 1.5 Pro (Experimental 0801) - 2 request/min
50 requests/day
1 million tokens/min + 1000000 tokens/minute
50 requests/day
2 requests/minute Gemini 1.0 Pro - 15 requests/min
1500 requests/day
32000 tokens/min + 32000 tokens/minute
1500 requests/day
15 requests/minute Embeddings are available in UK/CH/EEA/EU diff --git a/src/pull_available_models.py b/src/pull_available_models.py index db81e3f..b6d0c3e 100644 --- a/src/pull_available_models.py +++ b/src/pull_available_models.py @@ -1,8 +1,11 @@ #!/usr/bin/env python3 +from collections import defaultdict +from pprint import pprint import requests import os from dotenv import load_dotenv +from google.cloud import cloudquotas_v1 load_dotenv() @@ -158,7 +161,7 @@ def fetch_groq_models(): ) r.raise_for_status() models = r.json()["data"] - print(f"Fetched models: {models}") + pprint(models) ret_models = [] for model in models: limits = get_groq_limits_for_model(model["id"]) @@ -349,8 +352,26 @@ def fetch_hyperbolic_models(): }, } ) + pprint(ret_models) return ret_models +def fetch_gemini_limits(): + print("Fetching Gemini limits...") + client = cloudquotas_v1.CloudQuotasClient() + request = cloudquotas_v1.ListQuotaInfosRequest( + parent=f"projects/{os.environ["GCP_PROJECT_ID"]}/locations/global/services/generativelanguage.googleapis.com") + pager = client.list_quota_infos(request=request) + models = defaultdict(dict) + for quota in pager: + if quota.metric == 'generativelanguage.googleapis.com/generate_content_free_tier_input_token_count': + for dimension in quota.dimensions_infos: + models[dimension.dimensions.get("model")][f"tokens/{quota.refresh_interval}"] = dimension.details.value + elif quota.metric == 'generativelanguage.googleapis.com/generate_content_free_tier_requests': + for dimension in quota.dimensions_infos: + models[dimension.dimensions.get("model")][f"requests/{quota.refresh_interval}"] = dimension.details.value + pprint(models) + return models + def get_human_limits(model): if "limits" not in model: @@ -390,23 +411,24 @@ def main(): # markdown_table += ( # "|^|^|embedding-001|1500 requests/min
100 contents/batch|\n" # ) - table += """ + gemini_models = fetch_gemini_limits() + table += f""" Google AI Studio Free tier Gemini API access not available within UK/CH/EEA/EU/
Data is used for training. Gemini 1.5 Flash - 15 requests/min
1500 requests/day
1 million tokens/min + {get_human_limits({"limits": gemini_models["gemini-1.5-flash"]})} Gemini 1.5 Pro - 2 request/min
50 requests/day
32000 tokens/min + {get_human_limits({"limits": gemini_models["gemini-1.5-pro"]})} Gemini 1.5 Pro (Experimental 0801) - 2 request/min
50 requests/day
1 million tokens/min + {get_human_limits({"limits": gemini_models["gemini-1.5-pro-exp"]})} Gemini 1.0 Pro - 15 requests/min
1500 requests/day
32000 tokens/min + {get_human_limits({"limits": gemini_models["gemini-1.0-pro"]})} Embeddings are available in UK/CH/EEA/EU diff --git a/src/requirements.txt b/src/requirements.txt index df7458c..1218650 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,2 +1,3 @@ requests python-dotenv +google-cloud-quotas