File size: 4,306 Bytes
7e075b9
 
 
 
 
 
 
79565eb
 
7e075b9
6c1babe
7e075b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c1babe
 
7e075b9
 
 
 
 
 
 
 
 
 
 
6c1babe
 
 
 
7e075b9
6c1babe
 
 
 
7e075b9
 
 
 
 
 
 
 
6c1babe
 
 
 
 
7e075b9
 
 
fa74c14
bd7a9bc
 
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import gradio as gr
import requests
import logging
import os

# Leer el token de Hugging Face desde las variables de entorno
HUGGING_FACE_TOKEN = os.getenv("HUGGING_FACE_TOKEN")
if not HUGGING_FACE_TOKEN:
    raise ValueError("Error: No se pudo leer el token de Hugging Face.")

API_URL = "https://hf.space/embed/locorene1000/API/+/api/predict"
headers = {"Authorization": f"Bearer {HUGGING_FACE_TOKEN}"}

# Configurar el logger
logging.basicConfig(filename='interactions.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')

def query(api_url, headers, payload):
    try:
        response = requests.post(api_url, headers=headers, json=payload)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        error_message = f"Error durante la solicitud: {e}"
        if e.response:
            error_message += f" C贸digo de estado: {e.response.status_code} Respuesta del servidor: {e.response.text}"
        logging.error(error_message)
        return {"error": error_message}

def preparar_texto(contexto, borrador):
    return f"{contexto}\n\n{borrador}"

def mejorar_resolucion(context, borrador, api_url, headers, max_length=1000):
    prompt = preparar_texto(context, borrador)
    payload = {
        "inputs": prompt,
        "parameters": {
            "max_new_tokens": max_length,
            "temperature": 0.7,
            "top_p": 0.9,
            "top_k": 50,
            "repetition_penalty": 1.2,
            "return_full_text": False,
            "do_sample": True,
        }
    }

    result = query(api_url, headers, payload)

    if result and isinstance(result, dict) and 'generated_text' in result:
        texto_generado = result['generated_text']
        context += f"\n\n{texto_generado}"
        logging.info(f"Prompt: {prompt}\nGenerated: {texto_generado.strip()}")
        return texto_generado.strip(), context
    else:
        error_message = result.get("error", "No se pudo obtener la respuesta del modelo.")
        logging.error(f"Prompt: {prompt}\nError: {error_message}")
        return None, context

# Funci贸n de predicci贸n para la interfaz de Gradio
def predict(message, history):
    context = (
        "Asume el papel de un Ministro de la Corte Suprema especializado en derecho civil, laboral y concursal. "
        "Tu meta es revisar y mejorar resoluciones judiciales utilizando procesamiento de lenguaje natural (PLN). "
        "Mant茅n un tono formal, preciso y autoritativo en todo momento. Sigue estrictamente las gu铆as de estilo proporcionadas. "
        "Simplifica oraciones complejas y elimina redundancias. Adapta la terminolog铆a al contexto legal chileno. "
        "Aseg煤rate de que las resoluciones optimizadas sean claras, concisas y libres de ambig眉edades. Utiliza par谩frasis, analog铆as y ejemplos para mejorar la claridad. "
        "Realiza una revisi贸n gramatical y estil铆stica para asegurar precisi贸n y formalidad. Justifica las modificaciones necesarias. "
        "Explica c贸mo cada mejora contribuye a la formalidad, precisi贸n y claridad. Proporciona la Resoluci贸n Optimizada. "
        "Verifica que la resoluci贸n optimizada cumpla con los criterios de claridad, precisi贸n y formalidad. "
        "Asegura que todas las modificaciones est茅n justificadas y sean comprensibles."
    )
    
    history_transformer_format = history + [[message, ""]]
    for item in history_transformer_format:
        context += f"\n\n{item[0]}"
    
    resolucion_mejorada, context = mejorar_resolucion(context, message, API_URL, headers, max_length=1000)
    if resolucion_mejorada:
        resultado_ministro = query(API_URL, headers, {"inputs": resolucion_mejorada})
        resolucion_final = resultado_ministro.get("generated_text", resolucion_mejorada)
        comentarios = resultado_ministro.get("comentarios", "")
        history.append([message, resolucion_final])
        return f"Resoluci贸n final: {resolucion_final}\n\nComentarios del Ministro: {comentarios}"
    else:
        return "No se pudo mejorar la resoluci贸n."

# Crear y lanzar la interfaz de Gradio
iface = gr.ChatInterface(predict)
iface.launch(share=True)