import os import copy import gradio as gr from llama_cpp import Llama from huggingface_hub import hf_hub_download # Fix for Python 3.13: audioop was removed from the standard library. # This try/except block handles the missing dependency if audioop-lts is installed. try: import audioop except ImportError: try: import audioop_lts as audioop except ImportError: print("Warning: audioop not found. If Gradio fails to load, install 'audioop-lts'.") # 1. Download the model correctly # Repo: unsloth/NVIDIA-Nemotron-3-Nano-4B-GGUF # File: NVIDIA-Nemotron-3-Nano-4B-Q4_K_M.gguf model_path = hf_hub_download( repo_id=os.environ.get("REPO_ID", "unsloth/NVIDIA-Nemotron-3-Nano-4B-GGUF"), filename=os.environ.get("MODEL_FILE", "NVIDIA-Nemotron-3-Nano-4B-Q4_K_M.gguf"), ) # 2. Initialize the Llama model llm = Llama( model_path=model_path, n_ctx=2048, n_gpu_layers=-1, # -1 uses all available GPU layers, change to 0 for CPU only ) def generate_text( message, history: list[tuple[str, str]], system_message, max_tokens, temperature, top_p, ): temp = "" # Standard ChatML / Llama format logic input_prompt = f"[INST] <>\n{system_message}\n<>\n\n " for interaction in history: input_prompt += f"{interaction[0]} [/INST] {interaction[1]} [INST] " input_prompt += f"{message} [/INST] " output = llm( input_prompt, temperature=temperature, top_p=top_p, top_k=40, repeat_penalty=1.1, max_tokens=max_tokens, stop=[ "[/INST]", "", "<|endoftext|>", "USER:", "ASSISTANT:", ], stream=True, ) for out in output: stream = copy.deepcopy(out) temp += stream["choices"][0]["text"] yield temp # 3. Define the Gradio Interface demo = gr.ChatInterface( generate_text, title="NVIDIA Nemotron-3 Nano (Llama-cpp)", description="Running NVIDIA Nemotron-3-Nano-4B via llama-cpp-python", examples=[ ['How to setup a human base on Mars? Give short answer.'], ['Explain theory of relativity to me like I’m 8 years old.'], ['What is 9,000 * 9,000?'] ], cache_examples=False, additional_inputs=[ gr.Textbox(value="You are a helpful and friendly AI assistant.", label="System message"), gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new 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"), ], ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)