Vastu / app.py
DevSh116's picture
Update app.py
8967b88 verified
Raw
History Blame Contribute Delete
2.95 kB
import os
import torch
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# ---------------------------------
# CONFIG
# ---------------------------------
# BASE_MODEL = "meta-llama/Meta-Llama-3-8B-Instruct"
BASE_MODEL = "mistralai/Mistral-7B-Instruct-v0.2"
LORA_PATH = "vastu_lora_adapter_975"
DEVICE = "cpu"
HF_TOKEN = os.getenv("HF_TOKEN") # πŸ”₯ REQUIRED
SYSTEM_PROMPT = """You are a strict and authoritative Vastu Shastra expert.
You clearly classify every placement as IDEAL, ACCEPTABLE, or INADVISABLE.
You always give practical remedies if something is wrong.
Your tone is confident, traditional, and decisive.
Avoid unnecessary philosophy. Be precise and actionable.
"""
# ---------------------------------
# LOAD MODEL (CPU SAFE)
# ---------------------------------
@torch.inference_mode()
def load_model():
tokenizer = AutoTokenizer.from_pretrained(
BASE_MODEL,
token=HF_TOKEN,
trust_remote_code=True,
)
tokenizer.pad_token = tokenizer.eos_token
base_model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL,
token=HF_TOKEN, # πŸ”₯ REQUIRED
torch_dtype=torch.float32,
device_map="cpu", # πŸ”₯ FIXED
low_cpu_mem_usage=True,
trust_remote_code=True,
)
model = PeftModel.from_pretrained(
base_model,
LORA_PATH,
)
model.eval()
return model, tokenizer
model, tokenizer = load_model()
# ---------------------------------
# GENERATION (CPU OPTIMIZED)
# ---------------------------------
def generate_response(user_prompt):
prompt = f"""### System:
{SYSTEM_PROMPT}
### User:
{user_prompt}
### Response:
"""
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(
**inputs,
max_new_tokens=128,
do_sample=False,
temperature=0.3,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id,
)
decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
return decoded.split("### Response:")[-1].strip()
# ---------------------------------
# GRADIO UI
# ---------------------------------
with gr.Blocks(title="🧭 Vastu AI Advisor (CPU)") as demo:
gr.Markdown("# 🧭 Vastu AI Advisor")
gr.Markdown(
"**CPU-based demo.** Responses may take ~30–45 seconds.\n\n"
"Ask questions about room placement, directions, and remedies."
)
chatbot = gr.Chatbot(height=420)
msg = gr.Textbox(
placeholder="Ask a Vastu question (e.g. Is a toilet in NE acceptable?)",
lines=2,
)
def chat(user_msg, history):
response = generate_response(user_msg)
history.append((user_msg, response))
return history, ""
msg.submit(chat, [msg, chatbot], [chatbot, msg])
demo.launch(
server_name="0.0.0.0", # πŸ”₯ REQUIRED FOR HF SPACES
server_port=7860,
)