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)