Spaces:
Sleeping
Sleeping
| 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() | |