import gradio as gr from transformers import AutoModelForCausalLM, AutoTokenizer import time import random # Load the model and tokenizer model_id = "microsoft/phi-2" # Change to your desired model 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 */ font-family: 'Roboto', sans-serif; } .gradio-interface { background-color: rgba(0, 0, 0, 0.8); /* Dark translucent background */ border: 3px solid #00FF00; /* Green border */ padding: 20px; box-shadow: 0 0 10px rgba(0, 255, 0, 0.5); /* Green shadow */ } .gradio-button { background-color: #00FF00; /* Green button */ color: white; border: none; padding: 10px 20px; font-size: 16px; cursor: pointer; } .gradio-button:hover { background-color: #00CC00; /* Darker green on hover */ } .gradio-textbox { background-color: #111111; /* Dark gray background */ color: #00FF00; /* Green text */ border: 1px solid #00FF00; /* Green border */ padding: 10px; margin-bottom: 10px; } .gradio-text-area { background-color: #111111; /* Dark gray background */ color: #00FF00; /* Green text */ border: 1px solid #00FF00; /* Green border */ padding: 10px; } .gradio-slider { background-color: #111111; /* Dark gray background */ color: #00FF00; /* Green text */ } .gradio-slider .slider-bar { background-color: #00FF00; /* Green slider bar */ } .gradio-slider .slider-thumb { background-color: #00FF00; /* Green slider thumb */ } .gradio-label { color: #00FF00; /* Green labels */ } h1, h2 { color: #00FF00; /* Green headings */ text-align: center; } .analysis-container { margin-top: 20px; padding: 10px; border: 1px solid #00FF00; } """ iface = gr.Interface( fn=get_response, inputs=[ gr.Textbox(label="Your message:", lines=5, placeholder="Ask me anything...", show_label=True), 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), gr.HTML(elem_id="analysis"), ], title="NVIDIA AI Chat", description="Engage in a conversation with our advanced AI model. Customize the response using various parameters.", theme="default", css=css, 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})" time.sleep(1) # 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"