Amm1rr/WebAI-to-API
Webchat to API
何であるか
WebAI‑to‑API は、あなたのマシン(またはDockerコンテナ)内で実行される小さな自己ホスト型サービスであり、Google Geminiモデルへのリクエストを転送します。/v1/chat/completions という、OpenAI風のエンドポイントを提供するため、OpenAIと通信する任意のクライアントをこのサービスに接続できます。
コア機能
- ストリーミング(SSE)対応のOpenAI互換チャットエンドポイント(
/v1/chat/completions) - プロバイダベースアーキテクチャ — 現在は、公式WebAPIまたはPlaywright駆動のブラウザランタイムのどちらかでGeminiと通信できるGeminiプロバイダを搭載
- クライアントが会話履歴を完全に管理する「Hermes」モード(サーバー側のSQLiteスナップショットなし)
- ヘルスチェック(
/health)とリーダビリティプローブ(/ready)に加え、実行時診断(/v1/runtime/status) - 状態、認証、モデル発見、プレイグラウンドを提供するシンプルなWebダッシュボード(
/ui) - Docker最適化デプロイメント;Poetryで直接実行も可能
- 組み込みの呼び出し認証なし — ローカルホストまたは自前のファイアウォールの背後を想定
クイックスタート(Linux/macOS)
# 1. クローン & インストール
git clone https://github.com/Amm1rr/WebAI-to-API.git
cd WebAI-to-API
./install.sh # 依存関係、Poetry、Playwright Chromium、設定ファイルの作成をインストール
# 2. Geminiへの認証(ブラウザログインまたはクッキーキャッシュ)
poetry run python verify_login.py
# 3. サーバーの起動
poetry run python src/run.py
APIは http://localhost:6969 で、ダッシュボードは http://localhost:6969/ui で利用可能になります。
Dockerデプロイメント
git pull
APP_UID=$(id -u) APP_GID=$(id -g) docker compose up -d --build
Dockerイメージは同じエンドポイントを公開し、同じ認証ヘルパーを含んでいます。
リクエストの送信
curl -X POST http://localhost:6969/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-flash",
"messages": [{"role": "user", "content": "Hello!"}]
}'
応答はOpenAIチャットスキーマに従い、Server-Sent Events(SSE)でストリーミングが可能です。
プロバイダおよびモデルルーティング
gemini-3-flash— 設定されたGeminiバックエンド(webapiまたはplaywright)を使用playwright/gemini-3-flash— Playwrightベースのブラウザランタイムを強制的に使用- エンドポイント
/v1/modelsはライブモデルカタログを返す(例:gemini-3-flashおよびplaywright/gemini-3-flash)
設定の基本
設定は config.conf(INI形式)に記述されています。主なセクション:
[Gemini]
backend = webapi # または "playwright"
default_model = gemini-3-flash
extended_thinking = false
プロキシ、ログ、および追加プロバイダオプションも設定可能。環境変数は .env から読み込まれます。
セキュリティに関する注意
このサービスはAPIキーの強制は行いません。外部公開する場合は、localhost に限定するか、認証を追加するリバースプロキシの背後に配置してください。
ドキュメントとヘルプ
- インストール、設定、アップデートガイドは
docs/ディレクトリにあります - サーバー起動後、Swagger UI(
/docs)でインタラクティブなAPIドキュメントを利用可能 - ダッシュボード(
/ui)は実行時ヘルス、認証ステータスを表示し、リクエストのテストも可能
ライセンス
MIT — 無償で使用、変更、再配布可能です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト