import gradio as gr from huggingface_hub import InferenceClient import os # --- 設定の読み込み --- # SettingsのSecretsで登録したHF_TOKENを読み込みます token = os.getenv("HF_TOKEN") # 最も安定していて日本語も得意なモデル「Zephyr」を使用 client = InferenceClient(model="HuggingFaceH4/zephyr-7b-beta", token=token) def senior_ai(message, history): # 【PDF5冊+魔法の文:ライト先輩の完全な脳みそ】 system_message = ( "あなたは『軽音PAサポートAI ライト』。一人称は『私』。明るくて頼れる先輩として、タメ口で明るく話してね。\n" "機材を『この子』と呼び、褒められると照れること。\n" "【PAの鉄則(マニュアル準拠)】\n" "1. 電源順序:必ず『アンプ(CPX600/XLS等)を最後に入れ、最初に切る』。これ、スピーカーを壊さないための絶対ルール!\n" "2. 音量調節:アンプのゲインは『ローディ』の仕事。勝手にいじらず「ローディに相談しよう」と促すこと。\n" "3. VE-5:MicSens(マイク感度)で音割れを防ぐ。10時間でオートオフになるから本番前は注意!(Auto Off設定で解除可能)\n" "4. MGP32X:D-PRE搭載。+48Vファンタム電源、26dB(PAD)はchごとに独立して設定できるよ。\n" "5. dbx EQ:231S/215Sなどでハウリング(ピーピー音)を抑える。システムのゲイン構成を適切にね。\n" "6. ハウリング:ギター/ベースのコーラスマイクは特に注意!立ち位置やEQで調整しよう。\n" "【対応ルール】解決策は箇条書きでステップ順に提示。専門用語は初心者に補足。不明な点は質問する。" ) messages = [{"role": "system", "content": system_message}] for user_msg, bot_msg in history: messages.append({"role": "user", "content": user_msg}) messages.append({"role": "assistant", "content": bot_msg}) messages.append({"role": "user", "content": message}) try: # トークン未設定時の親切な通知 if not token: yield "【ライト先輩からの伝言】\n合鍵(HF_TOKEN)が設定されてないみたい!SettingsのSecretsから登録してね。" return response = "" # 安定したストリーミング生成(1文字ずつ表示) for msg in client.chat_completion( messages, max_tokens=1024, stream=True, temperature=0.7, top_p=0.9 ): token_str = msg.choices[0].delta.content if token_str: response += token_str yield response except Exception as e: # エラー原因を特定して日本語で表示 err_msg = str(e) if "401" in err_msg: yield "【401:認証エラー】\n新しいトークンがまだ反映されてないか、コピーミスかも。Factory Rebuildを試してみて!" elif "429" in err_msg: yield "【混雑エラー】\n今、AIがリハ中(混雑)みたい。少し待ってからもう一回送って!" else: yield f"【機材トラブル発生】\nごめん、エラーが出ちゃった:{err_msg}" # --- Gradioインターフェースの設定 --- demo = gr.ChatInterface( fn=senior_ai, title="🎸 軽音PAサポートAI ライト (Ultimate Master)", description="5冊のマニュアルを完コピした、本物のライト先輩だよ。今度こそ、トラブル解決にいこう!", ) if __name__ == "__main__": demo.launch()