Tech-Meld's picture
Update app.py
7982b4e verified
raw
history blame
4.78 kB
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
import random
# Load the model and tokenizer
model_id = "nvidia/Llama3-ChatQA-1.5-8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
# --- Functions ---
def get_response(input_text, temperature, top_p, top_k, max_length):
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
max_length=max_length,
temperature=temperature,
top_p=top_p,
top_k=top_k,
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
def analyze_text(text):
num_tokens = len(tokenizer.tokenize(text))
return {
"Number of characters": len(text),
"Number of words": len(text.split()),
"Number of tokens": num_tokens,
}
# --- Interface ---
css = """
.gradio-container {
background-color: #000000; /* Black background for the container */
font-family: 'Roboto', sans-serif; /* Use a font similar to Nvidia's style */
}
.gradio-interface {
background-color: rgba(0, 0, 0, 0.8); /* Translucent black background */
border: 3px solid #00FF00; /* Green border */
border-radius: 15px; /* Rounded corners */
padding: 20px;
box-shadow: 0 0 10px rgba(0, 255, 0, 0.5); /* Green shadow */
}
.gradio-button {
background-color: #00FF00; /* Green button color */
color: white;
border: none;
padding: 10px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
border-radius: 5px; /* Rounded corners */
}
.gradio-button:hover {
background-color: #00CC00; /* Darker green on hover */
}
.gradio-text-area {
resize: vertical; /* Allow vertical resizing for text areas */
background-color: #111111; /* Dark gray background for text areas */
color: #00FF00; /* Green text color for text areas */
border: 1px solid #00FF00; /* Green border for text areas */
}
.gradio-slider {
background-color: #111111; /* Dark gray background for sliders */
color: #00FF00; /* Green text color for sliders */
}
.gradio-slider .slider-bar {
background-color: #00FF00; /* Green slider bar */
}
.gradio-slider .slider-thumb {
background-color: #00FF00; /* Green slider thumb */
}
h1 {
color: #00FF00; /* Green heading color */
text-align: center;
}
h2 {
color: #00FF00; /* Green subheading color */
}
"""
iface = gr.Interface(
fn=get_response,
inputs=[
gr.Textbox(label="Your message:", lines=5, placeholder="Ask me anything...", show_label=True,
style={'background-color': '#111111', 'color': '#00FF00', 'border': '1px solid #00FF00'}),
gr.Slider(label="Temperature", minimum=0.1, maximum=1.0, step=0.1, value=0.7),
gr.Slider(label="Top p", minimum=0.1, maximum=1.0, step=0.1, value=0.9),
gr.Slider(label="Top k", minimum=1, maximum=100, step=1, value=50),
gr.Slider(label="Max length", minimum=10, maximum=1000, step=10, value=250),
],
outputs=[
gr.TextArea(label="AI Response:", lines=10,
style={'background-color': '#111111', 'color': '#00FF00', 'border': '1px solid #00FF00'}),
gr.Label(label="Text Analysis", elem_id="analysis", style={'color': '#00FF00'}),
],
title="NVIDIA AI Chat",
description="Engage in a conversation with our advanced AI model. Customize the response using various parameters.",
theme="default", # Use a custom theme to override the default Gradio styling
css=css, # Apply the CSS styles defined earlier
layout="vertical",
allow_flagging="never",
)
# --- Dynamic Background ---
def update_background():
while True:
r = random.randint(0, 255)
g = 255 # Keep the green component constant
b = random.randint(0, 255)
iface.root.style.background_color = f"rgb({r}, {g}, {b})" # Set dynamic background color
time.sleep(1) # Update every second
# Start a separate thread to update the background color
gr.Interface.update(update_background, inputs=[], outputs=[], live=True)
# --- Analysis Logic ---
def update_analysis(response):
analysis = analyze_text(response)
analysis_str = f"Number of characters: {analysis['Number of characters']}\n" \
f"Number of words: {analysis['Number of words']}\n" \
f"Number of tokens: {analysis['Number of tokens']}"
iface.update(analysis=analysis_str, live=True) # Update analysis section with the generated data
iface.outputs[0].postprocess = update_analysis # Update analysis after every response
iface.launch(debug=True)