File size: 2,961 Bytes
506c92c e14bcdf 506c92c e14bcdf ad27687 e14bcdf be2c3d1 cf42c9a e14bcdf 547b515 e14bcdf 547b515 e14bcdf cf42c9a 506c92c e14bcdf 547b515 be2c3d1 547b515 e14bcdf 547b515 e14bcdf 547b515 506c92c e14bcdf 506c92c e14bcdf 506c92c e14bcdf 506c92c e14bcdf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# ββ Model & tokenizer βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
model_name = "microsoft/Phi-3-mini-4k-instruct" # 3.8β―Bβparam open instruct model :contentReference[oaicite:0]{index=0}
# seed for reproducibility
torch.random.manual_seed(0)
# load tokenizer (no gating, open access) :contentReference[oaicite:1]{index=1}
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
# load as causalβLM, quantize to int8 to halve memory & speed up inference :contentReference[oaicite:2]{index=2}
model = AutoModelForCausalLM.from_pretrained(model_name)
# compile once for ~30% further speedβup :contentReference[oaicite:3]{index=3}
model = torch.compile(model)
# ββ Prompt template ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
prompt_prefix = """
You are an energyβsaving expert tasked to help households reduce their monthly electricity bills.
Given the user's appliance usage information (device name, wattage, hours used per day, days used per week):
1. Flag the highest energy consumers.
2. Recommend practical, empathetic, achievable actions.
3. Suggest appliance swaps (e.g. LED, inverter AC) and habit changes.
Format with bullet points.
Here is the summary:
"""
# ββ Generation function ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def generate_recommendation(appliance_info: str) -> str:
prompt = prompt_prefix + appliance_info + "\n\nRecommendations:"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=150,
use_cache=True,
do_sample=False,
temperature=0.0
)
text = tokenizer.decode(outputs[0], skip_special_tokens=True)
# return only the recommendations section
return text.split("Recommendations:")[-1].strip()
# ββ Gradio interface ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
iface = gr.Interface(
fn=generate_recommendation,
inputs=gr.Textbox(lines=8, placeholder="e.g. Refrigerator: 150β―W, 8β―h/day, 7β―days/week\n..."),
outputs="text",
title="EnergyβSaving Tips (Phiβ3βMiniβ4KβInstruct)",
description="Paste your perβappliance summary to get targeted energyβsaving recommendations."
)
if __name__ == "__main__":
iface.launch()
|