UEI / app.py
GirishaBuilds01's picture
Update app.py
49539a5 verified
import gradio as gr
from PIL import Image
import torch
from uei_core.models import ModelPortfolio
from uei_core.uncertainty import UncertaintyEstimator
from uei_core.energy import EnergyProfiler
from uei_core.policy import UEIPolicy
from visuals import get_visual_ui
device = "cpu" # M1 CPU is optimized enough; GPU optional
models = ModelPortfolio(device=device)
unc = UncertaintyEstimator()
energy = EnergyProfiler()
policy = UEIPolicy()
def uei_infer(img):
x = models.preprocess(img)
# Step 1: Small model
logits_s, E_s = energy.measure(models.infer_small, x)
U_s = unc.estimate(logits_s)
# Step 2: Large model (to measure marginal utility)
logits_l, E_l = energy.measure(models.infer_large, x)
U_l = unc.estimate(logits_l)
decision = policy.decide(U_s, U_l, E_s, E_l)
if decision == "small":
final_logits = logits_s
energy_used = E_s
unc_used = U_s
model_name = "Low-Energy Small Model"
else:
final_logits = logits_l
energy_used = E_l
unc_used = U_l
model_name = "High-Energy Large Model"
probs = torch.softmax(final_logits, dim=1).squeeze()
top_idx = torch.argmax(probs).item()
confidence = float(probs[top_idx])
return {
"Predicted Class Index": top_idx,
"Confidence": confidence,
"Selected Model": model_name,
"Uncertainty": float(unc_used),
"Energy (proxy units)": energy_used
}
demo = gr.Interface(
fn=uei_infer,
inputs=gr.Image(type="pil"),
outputs=gr.JSON(),
title="Uncertainty-Elastic Inference (UEI)",
description="Energy-efficient inference by dynamically selecting models based on uncertainty-energy tradeoffs."
)
# ---------------------------
# NEW UI: Add Visualization Tab
# ---------------------------
visual_tab = get_visual_ui()
app = gr.TabbedInterface(
[
demo, # your original UEI inference app
visual_tab # new visualization dashboard
],
[
"UEI Inference",
"Visual Dashboard"
]
)
if __name__ == "__main__":
app.launch()