""" Frontend Proxy 公開用Spaceとして動作するフロントエンド・プロキシ。 プライベートなバックエンドSpaceを gr.load() で読み込み、 ユーザーに提供します。 ユーザーにはバックエンドのSpace IDやロジックが見えません。 """ import gradio as gr import os from dotenv import load_dotenv load_dotenv() # プライベートなバックエンドSpaceのID # 例: "username/gemini-backend-private" BACKEND_SPACE_ID = os.getenv("BACKEND_SPACE_ID") # HF Token HF_TOKEN = os.getenv("HF_TOKEN") # トークンの存在確認(デバッグ用) if HF_TOKEN: print(f"HF_TOKEN is found (starts with: {HF_TOKEN[:8]}...)") else: print("Warning: HF_TOKEN is NOT found in environment variables.") if not BACKEND_SPACE_ID: # フォールバック: ローカルテスト用にダミーUIを表示 with gr.Blocks(title="Gemini Chat (Frontend)") as demo: gr.Markdown("# 🚀 Gemini Chat") gr.Markdown(""" ⚠️ **バックエンドが設定されていません** このフロントエンドを動作させるには、以下の環境変数を設定してください: - `BACKEND_SPACE_ID`: プライベートなバックエンドSpaceのID - `HF_TOKEN`: Hugging Face APIトークン **ローカルテストの場合:** 直接 `app.py` を実行してください。 """) else: # プライベートバックエンドをロード try: demo = gr.load( name=BACKEND_SPACE_ID, src="spaces", token=HF_TOKEN # hf_token から token に変更(最新のGradioに対応) ) print(f"Successfully loaded backend: {BACKEND_SPACE_ID}") except Exception as e: # エラー発生時のフォールバック with gr.Blocks(title="Gemini Chat (Error)") as demo: gr.Markdown("# 🚀 Gemini Chat") gr.Markdown(f""" ⚠️ **バックエンドへの接続に失敗しました** エラー: `{e}` 考えられる原因: - バックエンドSpaceがスリープ中(数秒後にリロードしてください) - HF_TOKENが無効 - BACKEND_SPACE_IDが間違っている """) if __name__ == "__main__": demo.launch()