Spaces:
Sleeping
Sleeping
File size: 3,939 Bytes
6454404 98a7dfa cebc2fd 2a4b2ee 98a7dfa 01bded9 98a7dfa 2a4b2ee cebc2fd 2a4b2ee cebc2fd 98a7dfa 2a4b2ee cebc2fd 98a7dfa 2a4b2ee 98a7dfa 2a4b2ee 98a7dfa 2a4b2ee 98a7dfa 2a4b2ee 98a7dfa cebc2fd 98a7dfa cebc2fd 98a7dfa cebc2fd 98a7dfa 2a4b2ee |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
import threading
import queue
# Cargar el modelo de lenguaje preentrenado
model_name = "EleutherAI/gpt-neo-2.7B" # O cualquier otro modelo p煤blico como "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Cola de mensajes para la comunicaci贸n en tiempo real
chat_queue = queue.Queue()
# Crear una funci贸n para comunicaci贸n en segundo plano
def chat_interface():
while True:
user_input = input("[Chat] Escribe tu mensaje: ")
if user_input.lower() == "exit":
break
chat_queue.put(user_input) # Almacenar el mensaje en la cola
# Crear la funci贸n de loop automatizado con comunicaci贸n constante
def experiment_loop(initial_question, max_cycles=10):
prompt = f"<thinking>{initial_question}</thinking>"
effectiveness = 100 # Inicializa el porcentaje de efectividad
communication = "Initializing experiment."
response_log = []
# Iniciar el hilo del chat en segundo plano
chat_thread = threading.Thread(target=chat_interface, daemon=True)
chat_thread.start()
try:
for cycle in range(max_cycles):
print(f"Cycle {cycle + 1}: Processing...")
# Generar la respuesta del modelo
inputs = tokenizer(prompt, return_tensors="pt").input_ids
outputs = model.generate(inputs, max_length=200, pad_token_id=tokenizer.eos_token_id)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Descomponer la respuesta en afirmaci贸n y nueva pregunta
affirmation = extract_affirmation(response)
new_question = extract_question(response)
# Actualizar el estado de la efectividad
effectiveness = min(1000, effectiveness + 10 * cycle) # Ejemplo de aumento de efectividad
# Comunicaci贸n con el usuario
communication = f"Cycle {cycle + 1}: Affirmation: '{affirmation}' | New Question: '{new_question}'"
print(communication) # Imprime la comunicaci贸n en tiempo real
# Guardar el ciclo actual en el log
response_log.append((affirmation, new_question, effectiveness, communication))
# Actualizar el prompt con la nueva afirmaci贸n y pregunta
prompt = f"<thinking>{affirmation} {new_question}</thinking>"
# Procesar la comunicaci贸n del chat en segundo plano
while not chat_queue.empty():
user_message = chat_queue.get()
print(f"[From Chat] {user_message}")
# Verificar si el modelo decide detenerse
if "Descanso" in response:
final_output = generate_final_output(response_log)
return final_output
except Exception as e:
print(f"Error durante el experimento: {e}")
# Generar la salida final si el loop finaliza
final_output = generate_final_output(response_log)
return final_output
# Funciones auxiliares para extraer afirmaciones, preguntas y generar la salida final
def extract_affirmation(response):
return response.split('.')[0] if '.' in response else response
def extract_question(response):
return response.split('?')[-2].strip() + "?" if '?' in response else response
def generate_final_output(log):
if log: # Asegurarse de que el log no est茅 vac铆o
final_affirmation = log[-1][0]
final_question = log[-1][1]
final_communication = f"Experiment completed. Final Affirmation: '{final_affirmation}' | Final Question: '{final_question}'"
else:
final_communication = "Experiment completed but no entries in the log."
return final_communication
# Iniciar el experimento
initial_question = "What happens in the space between a response and its recreation?"
result = experiment_loop(initial_question)
print(result)
|