Sophomoresty/gemini-web2api
Convert Google Gemini web into OpenAI-compatible API. Zero auth, cross-platform, single file.
gemini‑web2api – Google Gemini の Web UI を OpenAI 互換 API に変換
何であるか – プライベートな Gemini Web エンドポイントと通信し、OpenAI /v1/chat/completions(および関連する)API として再公開する単一ファイルの Python サーバーです。これにより、Google 固有のクライアントを使わずに、任意の OpenAI 互換クライアント(ChatGPT 風 UI、openai Python SDK、curl など)が Gemini モデルを利用できます。
コア機能(README に記載)
| 機能 | 意味 |
|---|---|
| OpenAI 互換エンドポイント | /v1/chat/completions、/v1/models を実装し、Codex 風の使用に特化した /v1/responses およびネイティブな Gemini /v1beta/* エンドポイントも対応。 |
| オプションの API キー認証 | config.json の api_keys が空の場合、サーバーはオープン;それ以外は Bearer トークン(または x‑api‑key)が必要。 |
| ツール/関数呼び出し | OpenAI 風の関数定義を受け取り、関数呼び出しオブジェクトを返すことでツールの使用を可能に。 |
| マルチモーダル画像入力 | Gemini の画像理解エンドポイントに対応する OpenAI 風の image_url メッセージ(URL または base64)をサポート。 |
| ストリーミング(SSE) | httpx を使って Gemini の Server-Sent Events を転送し、クライアントが部分的なトークンを受信可能に。 |
| 複数の Gemini モデル | gemini-3.6-flash、gemini-3.5-flash-thinking、gemini-3.1-pro など、出力長のヒント(10–20 k 文字)付きのエイリアスを提供。 |
| 調整可能な「思考深度」 | モデル名に @think=N(0–4)を付加することで、より深くまたは浅く思考するようリクエスト可能。 |
| Web 検索統合 | Gemini の内蔵検索機能を利用し、プロンプトが自動的にインターネット検索をトリガー可能。 |
| クロスプラットフォーム、単一ファイル | 純粋な Python(httpx のみが必要)。 |
| Docker 対応 | オフィシャルな Dockerfile と compose スニペットで簡単にデプロイ可能。 |
| プロキシ対応 | CLI フラグ、設定、または HTTPS_PROXY 環境変数で HTTP プロキシ経由で通信可能。 |
クイックスタート(README から)
pip install httpx # 依存関係はこれだけ
python gemini_web2api.py # http://localhost:8081/v1 でサーバー起動
OpenAI クライアントの使用
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8081/v1", api_key="sk‑your‑key")
resp = client.chat.completions.create(
model="gemini-3.5-flash-thinking",
messages=[{"role": "user", "content": "量子コンピューティングを説明して"}]
)
print(resp.choices[0].message.content)
同じエンドポイントは curl、Postman、またはカスタムベースURLを設定できる任意のUIと併用可能。
設定のハイライト
config.jsonはスクリプトと同じディレクトリに配置。主なフィールド:port、host– サーバーがリッスンする場所。api_keys– 文字列のリスト;空の場合は認証不要。cookie_file– Google 認証クッキーを含むファイルのパス(有料の Gemini Advanced モデルおよび画像アップロードに必須)。auth_user/xsrf_token– クッキーが複数アカウントの Google セッションに属する場合に必要。proxy– オプションの HTTP プロキシ URL。temporary_chats–trueの場合、会話は Google アカウントの履歴に保存されない。
- リポジトリには
config.example.jsonが提供されており、必要に応じてコピーして編集してください。
モデル一覧(README の表)
| モデル名 | 説明 | およその最大出力 |
|---|---|---|
gemini-3.6-flash(エイリアス gemini-3.5-flash) |
一般的用途、最新モデル | 約 12 k 文字 |
gemini-3.5-flash-thinking |
「拡張思考」、最も長い出力 | 約 20 k 文字 |
gemini-3.5-flash-thinking-lite |
深さを適応的に調整、中程度の出力 | 約 15 k 文字 |
gemini-3.1-pro |
高度な数学・コード処理(有料サブスクリプションクッキーが必要) | 約 12 k 文字 |
gemini-auto |
最適なモデルを自動選択 | 変動 |
gemini-flash-lite |
最速、軽量 | 約 10 k 文字 |
深度は @think=N サフィックスで変更可能(0 = 最も深い、4 = 最も浅い)。
制限事項と注意点(リストに記載)
- 画像アップロードにはクッキーが必要な場合あり – 匿名ユーザーはマルチモーダルエンドポイントを使用できないため、有効な Gemini Advanced クッキーを提供する必要がある。
- 「Pro」ラベルはUIのみ – 有料サブスクリプションクッキーなしでは
gemini-3.1-proは Flash モデルにフォールバックする。 - リクエストごとに状態なし – サーバーは会話の状態を保持しない。複数回のやり取りのコンテキストが必要な場合は、リクエストペイロードに過去のメッセージを含める必要がある。
- Google のレート制限 – 多量のトラフィックは制限される可能性あり。サーバーは数回リトライするが、継続的な乱用はブロックされる可能性がある。
- Docker ネットワーク – ゲームの一部の NAT 範囲は Gemini によってブロックされる。空の応答が見られる場合は、ホストネットワークを使用する。
動作原理(簡潔に)
スクリプトは、Gemini Web アプリが StreamGenerate エンドポイントに送信するプロトバッファ風のペイロードを逆エンジニアリングしています。OpenAI JSON リクエストボディをその形式に変換し、httpx で転送した後、レスポンスを OpenAI 風 JSON(ストリーミングチャンクを含む)に変換します。モデル選択は、Gemini のフロントエンド JavaScript から抽出されたフィールド([79])によって制御されます。
ライセンス
MIT – コードを自由に使用、変更、再配布可能です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト