SlouchyBuffalo's picture
Create app.py
49de8c7 verified
import gradio as gr
import os
from huggingface_hub import InferenceClient
import spaces
from prompts import SYSTEM_PROMPT
client = InferenceClient(
"meta-llama/Llama-3.3-70B-Instruct",
provider="cerebras",
token=os.getenv("HF_TOKEN"),
)
@spaces.GPU
def chat_with_llama(message, history, system_prompt):
messages = []
if system_prompt and system_prompt.strip():
messages.append({"role": "system", "content": system_prompt.strip()})
for msg in history:
if isinstance(msg, dict):
if msg["role"] == "user":
messages.append({"role": "user", "content": msg["content"]})
elif msg["role"] == "assistant":
messages.append({"role": "assistant", "content": msg["content"]})
messages.append({"role": "user", "content": message})
generation_params = {
"messages": messages,
"stream": True,
}
response = ""
try:
for chunk in client.chat_completion(**generation_params):
if hasattr(chunk, 'choices') and len(chunk.choices) > 0:
delta = chunk.choices[0].delta
if hasattr(delta, 'content') and delta.content:
response += delta.content
yield response
except Exception as e:
yield f"Error: {str(e)}"
with gr.Blocks(title="AI Chat Assistant", theme=gr.themes.Soft()) as demo:
gr.Markdown("# AI Chat Assistant")
gr.Markdown("Chat with Llama-3.3-70B powered by Cerebras")
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot(
height=500,
type='messages',
show_copy_button=True
)
msg = gr.Textbox(
label="Your message",
placeholder="Type your message here...",
lines=2
)
with gr.Row():
send_btn = gr.Button("Send", variant="primary", size="lg")
clear_btn = gr.Button("Clear", size="lg")
with gr.Column():
system_prompt = gr.Textbox(
label="System Prompt",
value=SYSTEM_PROMPT,
lines=10,
show_copy_button=True
)
def respond(message, history, system_prompt):
new_history = history + [{"role": "user", "content": message}]
for response in chat_with_llama(message, history, system_prompt):
yield new_history + [{"role": "assistant", "content": response}], ""
def clear_chat():
return [], ""
msg.submit(
fn=respond,
inputs=[msg, chatbot, system_prompt],
outputs=[chatbot, msg],
show_progress=True
)
send_btn.click(
fn=respond,
inputs=[msg, chatbot, system_prompt],
outputs=[chatbot, msg],
show_progress=True
)
clear_btn.click(
fn=clear_chat,
outputs=[chatbot, msg],
show_progress=True
)
if __name__ == "__main__":
demo.launch()