Python_tutor / app.py
krisha06's picture
Update app.py
9b175a1 verified
Raw
History Blame
1.82 kB
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import streamlit as st
# Load tokenizer and model
base_model = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(base_model)
model = AutoModelForCausalLM.from_pretrained(base_model, device_map="cpu")
model = PeftModel.from_pretrained(model, "lora_adapter") # Change if needed
model.eval()
# Format prompt (no USER/ASSISTANT lines to confuse model)
def format_prompt(instruction):
return f"""You are a helpful and expert Python programming tutor.
You only answer questions related to Python programming.
If the question is unrelated to Python, say:
"Sorry, I can only answer Python-related questions."
Question: {instruction}
Answer:"""
# Generate answer
def chat(instruction):
prompt = format_prompt(instruction)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.1
)
full_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Only return the model's answer
return full_output.split("Answer:")[-1].strip()
# Streamlit UI
st.set_page_config(page_title="🐍 Python Tutor Chatbot (LoRA)")
st.title("🐍 Python Tutor Chatbot (LoRA)")
st.write("Ask me Python programming questions!")
user_input = st.text_area("Your question:")
if st.button("Get Answer") and user_input.strip():
with st.spinner("Thinking..."):
response = chat(user_input)
st.markdown("**Answer:**")
if "```" in response:
st.markdown(response)
else:
st.write(response)