Spaces:
Sleeping
Sleeping
File size: 1,827 Bytes
75b206c 01247e0 dea7d9a 01247e0 5baf039 75a88cc 01247e0 5baf039 75a88cc 01247e0 ca66e20 75a88cc dea7d9a ca66e20 75a88cc ca66e20 dea7d9a 75a88cc dea7d9a 01247e0 5d1b435 01247e0 a8f1aa1 6c5f774 01247e0 5baf039 dea7d9a 75a88cc dea7d9a 01247e0 dea7d9a 01247e0 5deaa96 dea7d9a a8f1aa1 01247e0 a8f1aa1 01247e0 a8f1aa1 01247e0 6c5f774 01247e0 6c5f774 01247e0 5baf039 5deaa96 | 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 60 61 62 63 64 | import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import streamlit as st
# Load tokenizer
base_model = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(base_model)
# Load base model in empty (meta) state and move to CPU
model = AutoModelForCausalLM.from_pretrained(
base_model,
torch_dtype=torch.float32,
low_cpu_mem_usage=True,
device_map="auto"
)
model = model.to_empty(device=torch.device("cpu"))
# Load LoRA adapter and move to CPU
model = PeftModel.from_pretrained(model, "lora_adapter", device_map="cpu")
model.eval()
# Format prompt for Python tutoring
def format_prompt(instruction):
return f"""### SYSTEM:
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."
### USER:
{instruction}
### ASSISTANT:
"""
# Generate answer
def chat(instruction):
prompt = format_prompt(instruction)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=256,
do_sample=False,
temperature=0.0,
top_p=1.0,
repetition_penalty=1.1
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response.split("### ASSISTANT:")[-1].strip()
# Streamlit UI
st.set_page_config(page_title="🐍 Python Tutor Chatbot")
st.title("🐍 Python Tutor Chatbot")
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:**")
st.write(response)
|