Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
import os | |
import pickle | |
import numpy as np | |
import faiss | |
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline | |
import torch | |
from sentence_transformers import SentenceTransformer | |
# Carga del índice FAISS y los chunks de texto | |
with open("index.pkl", "rb") as f: | |
index, chunks = pickle.load(f) | |
# Modelo de embeddings (debe coincidir con el usado en indexador.py) | |
embedder = SentenceTransformer("jinaai/jina-embeddings-v2-base-es") | |
# Modelo LLM (LLaMA o similar) | |
llm = pipeline( | |
"text-generation", | |
model="meta-llama/Llama-3.2-3B-Instruct", | |
device_map="auto", | |
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32, | |
token=os.getenv("HF_KEY"), | |
trust_remote_code=True | |
) | |
def responder(pregunta): | |
pregunta_embedding = embedder.encode([pregunta]) | |
_, indices = index.search(np.array(pregunta_embedding).reshape(1, -1), k=50) | |
result_chunks = [chunks[i] for i in indices[0]] | |
contexto_final = "\n\n".join(result_chunks[:3]) | |
prompt = f""" | |
Actúa como un asesor legal colombiano, especializado en el Código de Tránsito, Código de Policía y Código Penal. | |
Tu tarea es analizar el siguiente contexto legal y responder la pregunta de forma clara, completa y profesional. | |
Instrucciones: | |
- Usa un lenguaje formal y comprensible. | |
- Cita artículos o sanciones si están presentes en el contexto. | |
- No inventes leyes que no están en el texto. | |
- Si no hay suficiente contexto, responde: | |
"No encontré información suficiente en la ley para responder a esta pregunta." | |
Contexto legal: | |
{contexto_final} | |
Pregunta: | |
{pregunta} | |
Respuesta: | |
""" | |
output = llm(prompt, max_new_tokens=400, temperature=0.4)[0]["generated_text"] | |
return output.split("Respuesta:")[-1].strip() if "Respuesta:" in output else output.strip() | |
# Interfaz Gradio | |
demo = gr.Interface( | |
fn=responder, | |
inputs=gr.Textbox(lines=2, label="Escribe tu pregunta"), | |
outputs=gr.Textbox(label="Respuesta generada"), | |
title="Asistente Legal Colombiano", | |
description="Consulta el Código de Tránsito, Código de Policía y Código Penal colombiano.", | |
theme="default" | |
) | |
demo.launch() |