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