{"adoption": {"forks": 1161, "observed_at": "2026-08-28T04:09:30.113948+00:00", "stars": 5826}, "canonical_url": "https://ross.abutalabs.com/products/gemini-balance", "card": {"archived": false, "artifact_type": "service", "description": "Gemini polling proxy service （gemini轮询代理服务）", "domain": ["large-language-models", "apis", "self-hosted", "developer-tools", "artificial-intelligence"], "enriched": true, "function": ["api-gateway", "proxy", "load-testing", "http-server", "auth", "monitoring", "image-processing", "chatbot"], "health_score": 62, "homepage": "https://gb-docs.snaily.top", "language": "Python", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["snailyp/gemini-balance"], "name": "snailyp/gemini-balance", "platform": ["python", "self-hosted", "cloud"], "pushed_at": "2025-09-30T09:47:26+00:00", "repo": "snailyp/gemini-balance", "stars": 5826, "tags": ["gemini-api", "api-key-rotation", "openai-compatible", "fastapi", "load-balancing", "image-generation", "huggingface-deployment", "non-commercial-license", "docker", "web-server"], "topics": ["gemini", "gemini-api", "googlesearch", "imagen-3", "load-balancer", "openai-api"], "urls": [], "use_cases": ["rotate multiple gemini api keys to avoid rate limits", "use gemini through an openai-compatible api endpoint", "self-host a gemini proxy on huggingface or render", "monitor gemini api key status and usage", "generate images with imagen and upload to an image host", "load balance llm api requests across keys"], "what_it_is": "A Python FastAPI proxy and load-balancing service for the Google Gemini API that rotates multiple API keys and exposes both Gemini and OpenAI-compatible endpoints. It includes an admin panel for live configuration, key status monitoring, image generation, and image-hosting uploads.", "when_to_avoid": ["you need a permissively licensed solution for commercial resale - it is CC BY-NC 4.0", "you use OpenAI or other providers rather than Gemini", "you want a lightweight client-side library rather than a hosted proxy service"], "when_to_choose": ["you have several Gemini API keys and need automatic rotation and failover", "you want to call Gemini from tools that only speak the OpenAI API format", "you need a web admin panel to manage keys and settings without restarting"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/gemini-balance", "repo": "snailyp/gemini-balance", "role": "main", "score": 41}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:30.113948+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:52:09.938091+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7be8ad2d799701939597d1a0fc73bc760941c1caa06127dcc72bcaeb22f08b3", "fetched_at": "2026-08-28T04:09:30.113948+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snailyp/gemini-balance"}, {"content_hash": "c1a379d4307e701556a3837883fffbb1292d947e974f8181aa4870a5cc8ba48a", "fetched_at": "2026-08-29T08:47:36.849535+00:00", "kind": "homepage", "missing": false, "url": "https://gb-docs.snaily.top"}, {"content_hash": "c5d3d99a57b416f3e436e55d52f698b92ce0f0f27fbbb6de5e81d503108fc1e2", "fetched_at": "2026-08-29T08:47:36.851920+00:00", "kind": "site_page", "missing": false, "url": "https://gb-docs.snaily.top/guide/faq.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 44, "longevity": 44, "rhythm": 36}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 629, "days_push": 337, "days_rel": 344, "gap_med": 0, "n_releases_24m": 74}, "score": 41, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}