API / app.py
locorene1000's picture
a
6c1babe
raw
history blame
4.31 kB
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)