Tobi196's picture
Update app.py
0de65da verified
Raw History Blame Contribute Delete
2.34 kB
import os
import gradio as gr
import torch
from transformers import pipeline, BitsAndBytesConfig
# 1. Setup Auth
token = os.environ.get("HF_TOKEN")
# 2. Configuration for 4-bit Quantization (Saves RAM)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
print("Loading 3 models into RAM... please wait about 5 minutes.")
# Load Gemma 3 1B (Uses ~1GB RAM)
pipe_1b = pipeline("text-generation", model="google/gemma-3-1b-it",
device_map="cpu", token=token, model_kwargs={"quantization_config": bnb_config})
# Load Gemma 3 4B (Uses ~3.5GB RAM in 4-bit)
pipe_4b = pipeline("text-generation", model="google/gemma-3-4b-it",
device_map="cpu", token=token, model_kwargs={"quantization_config": bnb_config})
# Load Phi-4 Mini (Uses ~2.5GB RAM in 4-bit)
pipe_phi = pipeline("text-generation", model="microsoft/Phi-4-mini-instruct",
device_map="cpu", token=token, model_kwargs={"quantization_config": bnb_config})
def battle(message):
results = []
# Format message for Instruct models
msgs = [{"role": "user", "content": message}]
# Generate from all three
out_1b = pipe_1b(msgs, max_new_tokens=128)[0]['generated_text'][-1]['content']
out_4b = pipe_4b(msgs, max_new_tokens=128)[0]['generated_text'][-1]['content']
out_phi = pipe_phi(msgs, max_new_tokens=128)[0]['generated_text'][-1]['content']
return out_1b, out_4b, out_phi
# 3. UI Layout
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# ⚔️ Triple Model Local Arena")
gr.Markdown("Running locally on 16GB CPU RAM via 4-bit Quantization.")
with gr.Row():
txt = gr.Textbox(label="Prompt", placeholder="Compare their logic...", scale=4)
btn = gr.Button("Battle!", variant="primary", scale=1)
with gr.Row():
with gr.Column():
gr.Markdown("### ⚡ Gemma 3 1B")
res_1 = gr.Markdown()
with gr.Column():
gr.Markdown("### 🧠 Gemma 3 4B")
res_2 = gr.Markdown()
with gr.Column():
gr.Markdown("### 🛠️ Phi-4 Mini")
res_3 = gr.Markdown()
btn.click(battle, inputs=txt, outputs=[res_1, res_2, res_3])
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)