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)