chatgpt-kyc / app.py
dromerosm's picture
Update app.py
b5b699f
raw
history blame
5.03 kB
import gradio as gr
import os
import openai
from newspaper import Article
import json
import re
from transformers import GPT2Tokenizer
import requests
# define the text summarizer function
def text_prompt(page_url, contraseña, temp):
# Reemplazar estas líneas con cadenas de texto fijas
request = """Analizar el siguiente texto de una noticia en prensa y generar un informe tipo KYC para análisis de riesgos, considerando los siguientes aspectos:
1. Identificación de las partes involucradas (personas, empresas, entidades)
2. Actividades sospechosas o inusuales descritas en el texto"""
system_role = "Actua como analista de riesgos especializado en cumplimiento normativo y CSC. Tendrás una sólida formación en finanzas, derecho o gestión, y estaría familiarizado con la normativa local e internacional relacionada con la prevención del blanqueo de capitales y la financiación del terrorismo. Poseerás avanzadas capacidades analíticas y de investigación, lo que te permitirá evaluar eficazmente la información facilitada en las noticias y determinar el nivel de riesgo asociado a las partes implicadas. También tendrás excelentes dotes de comunicación escrita y verbal para presentar de forma clara y concisa las conclusiones en un informe accesible a los ejecutivos y otras partes interesadas de la organización. Además, estarás al día de las tendencias y novedades en el ámbito del cumplimiento de la normativa y la gestión de riesgos."
try:
headers = {'User-Agent': 'Chrome/83.0.4103.106'}
response = requests.get(page_url, headers=headers)
html = response.text
page = Article('')
page.set_html(html)
page.parse()
except Exception as e:
return "", f"--- An error occurred while processing the URL: {e} ---", ""
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
sentences = page.text.split('.')
tokens = []
page_text = ""
for sentence in sentences:
tokens.extend(tokenizer.tokenize(sentence))
# Trim text to a maximum of 3100 tokens
if len(tokens) > 3100:
break
page_text += sentence + ". "
# Delete the last space
page_text = page_text.strip()
num_tokens = len(tokens)
if num_tokens > 10 and contraseña.startswith("sk-"):
openai.api_key = contraseña
# get the response from openai API
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_role},
{"role": "user", "content": request + "\n\n" + 'Text:\n\n"' + page_text + '\n"'}
],
max_tokens=512,
temperature=temp,
top_p=1.0,
)
# get the response text
response_text = response['choices'][0]['message']['content']
total_tokens = response["usage"]["total_tokens"]
# clean the response text
response_text = re.sub(r'\s+', ' ', response_text)
response_text = f"#### [{page.title}]({page_url})\n\n{response_text.strip()}"
total_tokens_str = str(total_tokens) + " (${:.2f} USD)".format(total_tokens/1000*0.002)
return page.text, response_text, total_tokens_str
except Exception as e:
return page.text, f"--- An error occurred while processing the request: {e} ---", num_tokens
return page.text, "--- Check API-Key or Min number of tokens:", str(num_tokens)
# define the gradio interface
iface = gr.Interface(
fn=text_prompt,
inputs=[
gr.Textbox(lines=1, placeholder="Enter the Article's URL here...", label="Article's URL to analyse:", type="text"),
gr.Textbox(lines=1, placeholder="Enter your API-key here...", label="API-Key:", type="password"),
gr.Slider(0.0,1.0, value=0.3, label="Temperature:")
],
outputs=[gr.Textbox(label="Text from URL:"), gr.Markdown(label="Output from GPT:"), gr.Markdown(label="Total Tokens:")],
examples=[[ "https://www.eleconomista.es/andalucia/noticias/11534190/12/21/Nueva-condena-a-ex-presidente-de-Invercaria-por-dar-300000-euros-a-una-empresa-inviable.html","",0.2],
["https://www.eleconomista.es/andalucia/noticias/11533733/12/21/El-juez-procesa-a-35-investigados-en-la-pieza-de-las-sobrecomisiones-de-los-ERE-.html","",0.7]
],
title="ChatGPT - KYC from URL",
description="This tool allows to generate points of a KYC report based on the text retrieved from the URL using the [gpt-3.5-turbo] engine of OpenAI.Provide the url for text retrieval, your api-key and the temperature to process the text."
)
# error capturing in integration as a component
error_message = ""
try:
iface.queue(concurrency_count=20)
iface.launch()
except Exception as e:
error_message = "An error occurred: " + str(e)
iface.outputs[1].value = error_message