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.jsonapi_keys が空の場合、サーバーはオープン;それ以外は Bearer トークン(または x‑api‑key)が必要。
ツール/関数呼び出し OpenAI 風の関数定義を受け取り、関数呼び出しオブジェクトを返すことでツールの使用を可能に。
マルチモーダル画像入力 Gemini の画像理解エンドポイントに対応する OpenAI 風の image_url メッセージ(URL または base64)をサポート。
ストリーミング(SSE) httpx を使って Gemini の Server-Sent Events を転送し、クライアントが部分的なトークンを受信可能に。
複数の Gemini モデル gemini-3.6-flashgemini-3.5-flash-thinkinggemini-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 はスクリプトと同じディレクトリに配置。主なフィールド:
    • porthost – サーバーがリッスンする場所。
    • api_keys – 文字列のリスト;空の場合は認証不要。
    • cookie_file – Google 認証クッキーを含むファイルのパス(有料の Gemini Advanced モデルおよび画像アップロードに必須)。
    • auth_user / xsrf_token – クッキーが複数アカウントの Google セッションに属する場合に必要。
    • proxy – オプションの HTTP プロキシ URL。
    • temporary_chatstrue の場合、会話は 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 – コードを自由に使用、変更、再配布可能です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト