from flask import Flask, render_template_string, request, jsonify from transformers import pipeline, set_seed import threading # --- CONFIGURACIÓN DEL MODELO --- # Cargamos el modelo al inicio una sola vez print("Cargando modelo GPT-2...") generator = pipeline('text-generation', model='openai-community/gpt2') set_seed(42) print("Modelo cargado.") app = Flask(__name__) # --- PLANTILLA HTML/CSS/JS (Incrustada para tener un solo archivo manejable) --- # Esto define la interfaz visual completa HTML_TEMPLATE = """ GPT-2 Chat Clone
GPT-2

Examples

"Explain quantum computing in simple terms"
"Got any creative ideas for a 10 year old’s birthday?"

Capabilities

Remembers what user said earlier in the conversation
Allows user to provide follow-up corrections

Limitations

May occasionally generate incorrect information
Limited knowledge of world and events after 2021
""" # --- RUTAS FLASK --- @app.route('/') def home(): return render_template_string(HTML_TEMPLATE) @app.route('/generate', methods=['POST']) def generate(): data = request.json prompt_text = data.get('prompt', '') if not prompt_text: return jsonify({'response': 'Please write something.'}) try: # Generar texto con GPT-2 # max_length es dinámico para no tardar una eternidad input_len = len(prompt_text.split()) response = generator( prompt_text, max_length=input_len + 60, # Genera unas 60 palabras num_return_sequences=1, pad_token_id=50256, no_repeat_ngram_size=2, temperature=0.7, top_k=50, top_p=0.95 ) full_text = response[0]['generated_text'] # Limpieza básica: Quitamos el prompt original para simular un chat # (Opcional, GPT-2 no es un modelo de chat instruccional, así que a veces ayuda ver todo) bot_response = full_text.replace(prompt_text, "", 1).strip() if not bot_response: bot_response = "..." return jsonify({'response': bot_response}) except Exception as e: return jsonify({'response': f"Error: {str(e)}"}) # Configuración necesaria para Hugging Face Spaces if __name__ == '__main__': app.run(host='0.0.0.0', port=7860)