Spaces:
Sleeping
Sleeping
File size: 1,820 Bytes
75b206c 01247e0 dea7d9a 01247e0 5baf039 9b175a1 01247e0 5baf039 9b175a1 dea7d9a 9b175a1 dea7d9a 9b175a1 01247e0 5d1b435 9b175a1 dea7d9a 9b175a1 dea7d9a 01247e0 2f006a2 aee09f8 2f006a2 84376c0 2f006a2 9b175a1 a8f1aa1 9b175a1 01247e0 6c5f774 01247e0 6c5f774 01247e0 5baf039 9b175a1 | 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 58 59 | 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)
|