Aichat / app.py
Frusto's picture
Update app.py
fbe4031 verified
import gradio as gr
from huggingface_hub import InferenceClient
import traceback
def get_text(content):
if isinstance(content, str): return content
if isinstance(content, list):
return "".join([block.get("text", "") for block in content if block.get("type") == "text"])
if isinstance(content, dict): return content.get("text", str(content))
return str(content)
def respond(
message,
history: list[dict],
system_message,
max_tokens,
temperature,
top_p,
hf_token: gr.OAuthToken,
):
if not hf_token or not hf_token.token:
yield "⚠️ Please **Login** in the sidebar to access @frusto360 AI."
return
try:
# ✅ NEW 2026 ROUTER URL
# We use the 'hf-inference' provider prefix on the new router domain
MODEL_ID = "Frusto/llama-3.2-1b-frusto360-final"
API_URL = f"https://router.huggingface.co/hf-inference/models/{MODEL_ID}"
client = InferenceClient(base_url=API_URL, token=hf_token.token)
# Build Prompt
prompt = f"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\n{system_message}<|eot_id|>"
for msg in history:
role = msg.get("role", "user")
content = get_text(msg.get("content", ""))
prompt += f"<|start_header_id|>{role}<|end_header_id|>\n\n{content}<|eot_id|>"
prompt += f"<|start_header_id|>user<|end_header_id|>\n\n{get_text(message)}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n"
response = ""
for token in client.text_generation(
prompt,
max_new_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
stop=["<|eot_id|>"]
):
token_text = token if isinstance(token, str) else getattr(token, 'token', getattr(token, 'text', str(token)))
response += token_text
yield response
except Exception as e:
yield f"❌ **Router Error:** {str(e)}\n\n*Note: Ensure 'Inference API' is enabled in your model settings.*"
# UI Setup (Gradio 6.5)
chatbot_interface = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(value="You are the @frusto360 AI.", label="System message"),
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max tokens"),
gr.Slider(minimum=0.1, maximum=2.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p"),
],
)
with gr.Blocks(fill_height=True) as demo:
with gr.Sidebar():
gr.Markdown("## 🔐 @frusto360 Auth")
gr.LoginButton()
chatbot_interface.render()
if __name__ == "__main__":
demo.launch(theme="glass")