Arsh014's picture
Update app.py
1cfea7f verified
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
from peft import PeftModel
base_model_id = "NousResearch/Llama-2-7b-chat-hf"
lora_path = "Arsh014/lora-llama2-finetuned"
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
model = AutoModelForCausalLM.from_pretrained(
base_model_id,
load_in_8bit=True,
torch_dtype=torch.float16,
device_map="auto"
)
try:
model = PeftModel.from_pretrained(model, lora_path)
model.eval() # Set model to evaluation mode
except Exception as e:
print(f"Error loading LoRA adapter from {lora_path}. Ensure it exists and is correct.")
print(f"Error: {e}")
# 5. Create a text-generation pipeline
print("Creating text-generation pipeline.")
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer
)
def format_prompt(instruction, code):
"""Formats the instruction and input code into the required prompt template."""
return f"""### Instruction:
{instruction}
### Input:
{code}
### Response:"""
def explain_dockerfile(instruction, code):
"""Generates the explanation using the text-generation pipeline."""
if not instruction or not code:
return "Please provide both an instruction and the Dockerfile code."
prompt = format_prompt(instruction, code)
# Generate response
response = pipe(
prompt,
max_new_tokens=256,
do_sample=True,
temperature=0.7,
return_full_text=False
)
generated_text = response[0]["generated_text"].strip()
if "### Response:" in generated_text:
return generated_text.split("### Response:")[-1].strip()
return generated_text
# 6. Gradio Interface
print("Launching Gradio Interface...")
iface = gr.Interface(
fn=explain_dockerfile,
inputs=[
gr.Textbox(
label="Instruction",
placeholder="e.g., Explain the function of each line and the overall goal of this Dockerfile.",
value="Explain this Dockerfile in detail and suggest one security improvement.",
lines=2
),
gr.Textbox(
label="Dockerfile Code",
lines=10,
placeholder="Paste your Dockerfile here, e.g., \nFROM python:3.9-slim\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\nCOPY . .\nCMD [\"python\", \"app.py\"]",
value="FROM node:18-alpine\nWORKDIR /usr/src/app\nCOPY package*.json ./ \nRUN npm install\nCOPY . .\nEXPOSE 3000\nCMD [ \"npm\", \"start\" ]"
)
],
outputs=gr.Textbox(
label="Explanation (Generated by LoRA Model)",
lines=15
),
title="LoRA-Tuned Llama-2 Dockerfile Explainer",
description="A simple application to explain complex Dockerfiles using a fine-tuned Llama-2 model (via LoRA).",
live=False
)
if __name__ == "__main__":
iface.launch()