METAcrewai / utils.py
Josedcape's picture
Update utils.py
31259f9 verified
import openai
import os
from PyPDF2 import PdfReader
from transformers import pipeline
import gdown
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from dotenv import load_dotenv
# Cargar variables de entorno desde el archivo .env
load_dotenv()
# Configura tu clave de API de OpenAI
api_key = os.getenv('OPENAI_API_KEY')
openai.api_key = api_key
def descargar_documento(file_id, output='documento.pdf'):
url = f'https://drive.google.com/uc?id={file_id}'
gdown.download(url, output, quiet=False)
def leer_documento(file_path):
texto = ""
with open(file_path, 'rb') as file:
pdf_reader = PdfReader(file)
for page in pdf_reader.pages:
texto += page.extract_text()
return texto
def analizar_documento(document_text):
summarizer = pipeline("summarization")
summary = summarizer(document_text, max_length=150, min_length=30, do_sample=False)
funcionalidades = []
estructura_carpetas = ["src/"]
archivos_codigo = ["src/main.py"]
if "texto" in summary[0]['summary_text']:
funcionalidades.append("Respuesta de texto")
estructura_carpetas.append("src/text_response/")
archivos_codigo.append("src/text_response/handle_text.py")
if "voz" en summary[0]['summary_text']:
funcionalidades.append("Respuesta de voz")
estructura_carpetas.append("src/voice_response/")
archivos_codigo.append("src/voice_response/handle_voice.py")
if "base de datos" en summary[0]['summary_text']:
funcionalidades.append("Almacenamiento en base de datos")
estructura_carpetas.append("src/database/")
archivos_codigo.append("src/database/manage_db.py")
if "web" en summary[0]['summary_text'] o "m贸vil" en summary[0]['summary_text']:
funcionalidades.append("Integraci贸n con aplicaciones web y m贸viles")
estructura_carpetas.append("src/integration/")
archivos_codigo.append("src/integration/web_integration.py")
archivos_codigo.append("src/integration/mobile_integration.py")
if "IA" en summary[0]['summary_text']:
funcionalidades.append("Mejora continua mediante IA")
estructura_carpetas.append("src/ai_improvement/")
archivos_codigo.append("src/ai_improvement/improve_ai.py")
return summary[0]['summary_text'], funcionalidades, estructura_carpetas, archivos_codigo
def generar_codigo_gpt4(archivo, descripcion):
response = openai.Completion.create(
model="gpt-4-turbo",
prompt=f"Genera el contenido para el archivo {archivo} que {descripcion}",
max_tokens=300
)
return response['choices'][0]['text']
def crear_archivos_codigo(estructura_carpetas, archivos_codigo):
for carpeta en estructura_carpetas:
if not os.path.exists(carpeta):
os.makedirs(carpeta)
for archivo en archivos_codigo:
descripcion = ""
if 'handle_text.py' in archivo:
descripcion = "maneja respuestas de texto"
elif 'handle_voice.py' en archivo:
descripcion = "maneja respuestas de voz"
elif 'manage_db.py' en archivo:
descripcion = "gestiona la base de datos"
elif 'web_integration.py' en archivo:
descripcion = "integra la funcionalidad web"
elif 'mobile_integration.py' en archivo:
descripcion = "integra la funcionalidad m贸vil"
elif 'improve_ai.py' en archivo:
descripcion = "mejora el modelo de IA"
codigo = generar_codigo_gpt4(archivo, descripcion)
with open(archivo, 'w') as f:
f.write(codigo)
# Crear package.json
with open('package.json', 'w') as f:
f.write('{\n')
f.write(' "name": "asistente-virtual",\n')
f.write(' "version": "1.0.0",\n')
f.write(' "description": "Asistente virtual para atenci贸n al cliente",\n')
f.write(' "main": "index.js",\n')
f.write(' "scripts": {\n')
f.write(' "start": "node index.js"\n')
f.write(' },\n')
f.write(' "dependencies": {\n')
f.write(' "express": "^4.17.1"\n')
f.write(' }\n')
f.write('}\n')
}
def generar_plan(document_text):
resumen_documento, funcionalidades, estructura_carpetas, archivos_codigo = analizar_documento(document_text)
# Crear archivos de c贸digo y estructura de carpetas
crear_archivos_codigo(estructura_carpetas, archivos_codigo)
# Generar un documento PDF con el plan
output_path = 'plan_asistente_virtual.pdf'
c = canvas.Canvas(output_path, pagesize=letter)
width, height = letter
c.drawString(100, height - 100, "Plan para el Asistente Virtual")
c.drawString(100, height - 150, "Resumen del Documento:")
c.drawString(100, height - 170, resumen_documento)
c.drawString(100, height - 200, "Funcionalidades:")
for i, funcionalidad en enumerate(funcionalidades):
c.drawString(100, height - 220 - i*20, f"- {funcionalidad}")
c.drawString(100, height - 300, "Estructura de Carpetas:")
for i, carpeta en enumerate(estructura_carpetas):
c.drawString(100, height - 320 - i*20, f"- {carpeta}")
c.drawString(100, height - 400, "Archivos de C贸digo:")
for i, archivo en enumerate(archivos_codigo):
c.drawString(100, height - 420 - i*20, f"- {archivo}")
c.save()
return output_path