import gradio # For the GUI from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline # For LLMs! # Instantiate the model that we'll be calling. This is a tiny one! MODEL_ID = "HuggingFaceTB/SmolLM2-135M-Instruct" tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) pipe = pipeline( task="text-generation", model=AutoModelForCausalLM.from_pretrained( MODEL_ID, ), tokenizer=tokenizer ) # Create a helper to format the chat message appropriately def _format_chat(system_prompt: str, user_prompt: str, history: list[dict]) -> str: """Format messages using chat template if available.""" messages = [{"role": "system", "content": system_prompt}] messages.extend(history) messages.append({"role": "user", "content": user_prompt}) template = getattr(tokenizer, "chat_template", None) return tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) # Create an LLM helper function def _llm_generate(prompt: str, max_tokens: int, temperature: float) -> str: out = pipe( prompt, max_new_tokens=max_tokens, do_sample=True, temperature=temperature, return_full_text=False ) return out[0]["generated_text"].strip() # Wrap the above in a response function that will be the primary entry point for the GUI def respond( message, history: list[dict[str, str]], system_message, max_tokens, temperature, ): formatted = _format_chat(system_message, message, history) response = _llm_generate( formatted, max_tokens=max_tokens, temperature=temperature, ) return response # Last but not least, here's the UI! This one is pretty simple. chatbot = gradio.ChatInterface( respond, type="messages", additional_inputs=[ gradio.Textbox( value=( "You are a chatbot that helps come up with fancy, exciting names for research papers." ), label="System message" ), gradio.Slider(minimum=0, maximum=256, value=128, step=16, label="Max new tokens"), gradio.Slider(minimum=0.1, maximum=2.0, value=0.9, step=0.1, label="Temperature"), ], ) with gradio.Blocks() as demo: # Let's start by adding a title and introduction gradio.Markdown( "# A Simple Chatbot" ) gradio.Markdown( "This app runs a simple chatbot on CPU and exposes a few backen parameters too." ) # Now insert the chat window chatbot.render() if __name__ == "__main__": demo.launch(debug=True)