light-prt-001's picture
Update app.py
43590bb verified
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()