Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
from peft import PeftModel | |
base_model_id = "openlm-research/open_llama_3b" | |
adapter_path = "jalonso24/lora-lateblight-v3" | |
# Load to CPU (safe on Spaces) | |
base_model = AutoModelForCausalLM.from_pretrained( | |
base_model_id, | |
torch_dtype=torch.float32 | |
).to("cpu") | |
model = PeftModel.from_pretrained(base_model, adapter_path) | |
tokenizer = AutoTokenizer.from_pretrained(base_model_id, use_fast=False) | |
tokenizer.pad_token = tokenizer.eos_token | |
# New structured prompt logic | |
def predict_risk(prompt): | |
structured_prompt = ( | |
f"{prompt.strip()}\n\n" | |
"Clasifica el riesgo de tiz贸n tard铆o (elige una sola opci贸n):\n" | |
"- Bajo\n- Moderado\n- Alto\n\nRespuesta:" | |
) | |
inputs = tokenizer(structured_prompt, return_tensors="pt") | |
inputs = {k: v.to("cpu") for k, v in inputs.items()} | |
with torch.no_grad(): | |
outputs = model.generate( | |
**inputs, | |
max_new_tokens=10, | |
temperature=0.5, | |
do_sample=False, | |
pad_token_id=tokenizer.eos_token_id | |
) | |
response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
result = response.split("Respuesta:")[-1].strip().split("\n")[0] | |
return result | |
# Interface | |
examples = [[ | |
"Variedad: INIA-302 Amarilis\n" | |
"Precipitaci贸n: 18.4 mm\n" | |
"Temperatura M谩xima: 17.2掳C\n" | |
"Temperatura M铆nima: 6.1掳C\n" | |
"Humedad Promedio: 84.12%\n" | |
"Mes de siembra: noviembre" | |
]] | |
gr.Interface( | |
fn=predict_risk, | |
inputs=gr.Textbox(lines=8, label="Escenario estructurado"), | |
outputs=gr.Textbox(label="Predicci贸n del modelo"), | |
title="馃尡 Riesgo de Tiz贸n Tard铆o (LLaMA + LoRA)", | |
description="Predice si el riesgo es Bajo, Moderado o Alto usando datos estructurados.", | |
examples=examples | |
).launch() | |