CamiloVega commited on
Commit
5163b18
·
verified ·
1 Parent(s): 1ab6330

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -7
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 os
 
 
 
 
 
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 generar_noticia(instrucciones, hechos, tamaño, tono, *args):
56
- """Genera una noticia a partir de instrucciones, hechos y transcripciones."""
57
- base_de_conocimiento = {"instrucciones": instrucciones, "hechos": hechos, "contenido_documentos": [], "audio_data": []}
 
 
 
 
 
 
 
 
 
 
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)