Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
import openai
|
2 |
import whisper
|
3 |
import tempfile
|
@@ -6,10 +7,15 @@ from pydub import AudioSegment
|
|
6 |
import fitz # PyMuPDF para manejar PDFs
|
7 |
import docx # Para manejar archivos .docx
|
8 |
import pandas as pd # Para manejar archivos .xlsx y .csv
|
9 |
-
import
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
# Cargar las variables de entorno desde el entorno de Hugging Face
|
12 |
-
openai.api_key = os.getenv("OPENAI_API_KEY")
|
13 |
|
14 |
# Cargar el modelo Whisper de mayor calidad una vez
|
15 |
model = whisper.load_model("large")
|
@@ -52,13 +58,27 @@ def leer_documento(documento_path):
|
|
52 |
except Exception as e:
|
53 |
return f"Error al leer el documento: {str(e)}"
|
54 |
|
55 |
-
def
|
56 |
-
"""
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
num_audios = 5 * 3 # 5 audios * 3 campos (audio, nombre, cargo)
|
59 |
audios = args[:num_audios]
|
60 |
documentos = args[num_audios:]
|
61 |
|
|
|
|
|
|
|
|
|
62 |
for documento in documentos:
|
63 |
if documento is not None:
|
64 |
base_de_conocimiento["contenido_documentos"].append(leer_documento(documento.name))
|
@@ -83,6 +103,7 @@ def generar_noticia(instrucciones, hechos, tamaño, tono, *args):
|
|
83 |
transcripciones_brutas += transcripcion_bruta + "\n\n"
|
84 |
|
85 |
contenido_documentos = "\n\n".join(base_de_conocimiento["contenido_documentos"])
|
|
|
86 |
|
87 |
prompt_interno = """
|
88 |
Instrucciones para el modelo:
|
@@ -101,6 +122,7 @@ def generar_noticia(instrucciones, hechos, tamaño, tono, *args):
|
|
101 |
Instrucciones: {base_de_conocimiento["instrucciones"]}
|
102 |
Hechos: {base_de_conocimiento["hechos"]}
|
103 |
Contenido adicional de los documentos: {contenido_documentos}
|
|
|
104 |
Utiliza las siguientes transcripciones como citas directas e indirectas (sin cambiar ni inventar contenido):
|
105 |
{transcripciones_texto}
|
106 |
"""
|
@@ -124,8 +146,9 @@ with gr.Blocks() as demo:
|
|
124 |
hechos = gr.Textbox(label="Describe los hechos de la noticia", lines=4)
|
125 |
tamaño = gr.Number(label="Tamaño del cuerpo de la noticia (en palabras)", value=100)
|
126 |
tono = gr.Dropdown(label="Tono de la noticia", choices=["serio", "neutral", "divertido"], value="neutral")
|
|
|
127 |
with gr.Column(scale=3):
|
128 |
-
inputs_list = [instrucciones, hechos, tamaño, tono]
|
129 |
with gr.Tabs():
|
130 |
for i in range(1, 6):
|
131 |
with gr.TabItem(f"Audio {i}"):
|
@@ -152,4 +175,4 @@ with gr.Blocks() as demo:
|
|
152 |
|
153 |
generar.click(fn=generar_noticia, inputs=inputs_list, outputs=[noticia_output, transcripciones_output])
|
154 |
|
155 |
-
demo.launch(share=True)
|
|
|
1 |
+
import os
|
2 |
import openai
|
3 |
import whisper
|
4 |
import tempfile
|
|
|
7 |
import fitz # PyMuPDF para manejar PDFs
|
8 |
import docx # Para manejar archivos .docx
|
9 |
import pandas as pd # Para manejar archivos .xlsx y .csv
|
10 |
+
from google.colab import userdata # Importa userdata de google.colab
|
11 |
+
import requests
|
12 |
+
from bs4 import BeautifulSoup
|
13 |
+
|
14 |
+
# Configura tu clave API de OpenAI usando Google Colab userdata
|
15 |
+
openai.api_key = userdata.get('OPENAI_API_KEY')
|
16 |
|
17 |
# Cargar las variables de entorno desde el entorno de Hugging Face
|
18 |
+
# openai.api_key = os.getenv("OPENAI_API_KEY")
|
19 |
|
20 |
# Cargar el modelo Whisper de mayor calidad una vez
|
21 |
model = whisper.load_model("large")
|
|
|
58 |
except Exception as e:
|
59 |
return f"Error al leer el documento: {str(e)}"
|
60 |
|
61 |
+
def leer_url(url):
|
62 |
+
"""Lee el contenido de una URL."""
|
63 |
+
try:
|
64 |
+
response = requests.get(url)
|
65 |
+
response.raise_for_status()
|
66 |
+
soup = BeautifulSoup(response.content, 'html.parser')
|
67 |
+
return soup.get_text()
|
68 |
+
except Exception as e:
|
69 |
+
return f"Error al leer la URL: {str(e)}"
|
70 |
+
|
71 |
+
def generar_noticia(instrucciones, hechos, tamaño, tono, urls, *args):
|
72 |
+
"""Genera una noticia a partir de instrucciones, hechos, URLs, documentos y transcripciones."""
|
73 |
+
base_de_conocimiento = {"instrucciones": instrucciones, "hechos": hechos, "contenido_documentos": [], "audio_data": [], "contenido_urls": []}
|
74 |
num_audios = 5 * 3 # 5 audios * 3 campos (audio, nombre, cargo)
|
75 |
audios = args[:num_audios]
|
76 |
documentos = args[num_audios:]
|
77 |
|
78 |
+
for url in urls.split():
|
79 |
+
if url:
|
80 |
+
base_de_conocimiento["contenido_urls"].append(leer_url(url))
|
81 |
+
|
82 |
for documento in documentos:
|
83 |
if documento is not None:
|
84 |
base_de_conocimiento["contenido_documentos"].append(leer_documento(documento.name))
|
|
|
103 |
transcripciones_brutas += transcripcion_bruta + "\n\n"
|
104 |
|
105 |
contenido_documentos = "\n\n".join(base_de_conocimiento["contenido_documentos"])
|
106 |
+
contenido_urls = "\n\n".join(base_de_conocimiento["contenido_urls"])
|
107 |
|
108 |
prompt_interno = """
|
109 |
Instrucciones para el modelo:
|
|
|
122 |
Instrucciones: {base_de_conocimiento["instrucciones"]}
|
123 |
Hechos: {base_de_conocimiento["hechos"]}
|
124 |
Contenido adicional de los documentos: {contenido_documentos}
|
125 |
+
Contenido adicional de las URLs: {contenido_urls}
|
126 |
Utiliza las siguientes transcripciones como citas directas e indirectas (sin cambiar ni inventar contenido):
|
127 |
{transcripciones_texto}
|
128 |
"""
|
|
|
146 |
hechos = gr.Textbox(label="Describe los hechos de la noticia", lines=4)
|
147 |
tamaño = gr.Number(label="Tamaño del cuerpo de la noticia (en palabras)", value=100)
|
148 |
tono = gr.Dropdown(label="Tono de la noticia", choices=["serio", "neutral", "divertido"], value="neutral")
|
149 |
+
urls = gr.Textbox(label="URLs (separadas por espacio)", lines=2)
|
150 |
with gr.Column(scale=3):
|
151 |
+
inputs_list = [instrucciones, hechos, tamaño, tono, urls]
|
152 |
with gr.Tabs():
|
153 |
for i in range(1, 6):
|
154 |
with gr.TabItem(f"Audio {i}"):
|
|
|
175 |
|
176 |
generar.click(fn=generar_noticia, inputs=inputs_list, outputs=[noticia_output, transcripciones_output])
|
177 |
|
178 |
+
demo.launch(share=True)
|