Spaces:
Sleeping
Sleeping
File size: 3,785 Bytes
29f13e4 3db8566 29f13e4 43590bb 3db8566 e299386 43590bb 6ea9a07 b4cc272 3db8566 43590bb 3db8566 43590bb 7b22585 b4cc272 29f13e4 3db8566 43590bb 3db8566 43590bb 8d8b85a 43590bb f8cd083 3db8566 43590bb 7b22585 43590bb 7b22585 3db8566 7b22585 43590bb f8cd083 3db8566 43590bb 7b22585 43590bb 3316672 3db8566 43590bb 3316672 29f13e4 43590bb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 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()
|