File size: 2,809 Bytes
4b28e77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import torch
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM

# Cargar el modelo de lenguaje preentrenado
model_name = "gpt-neo-2.7B"  # Puedes cambiarlo a GPT-J o cualquier otro
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Crear la funci贸n de loop automatizado
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 = []
    
    for cycle in range(max_cycles):
        # Generar la respuesta del modelo
        inputs = tokenizer(prompt, return_tensors="pt").input_ids
        outputs = model.generate(inputs, max_length=200)
        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}'"

        # Guardar el ciclo actual en el log
        response_log.append((affirmation, new_question, effectiveness, communication))
        
        # Verificar si el modelo decide detenerse
        if "Descanso" in response:
            final_output = generate_final_output(response_log)
            return final_output
        
        # Actualizar el prompt con la nueva afirmaci贸n y pregunta
        prompt = f"<thinking>{affirmation} {new_question}</thinking>"

    # Si se alcanza el n煤mero m谩ximo de ciclos sin detenerse
    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):
    # L贸gica para extraer la afirmaci贸n de la respuesta
    return response.split('.')[0]

def extract_question(response):
    # L贸gica para extraer la nueva pregunta de la respuesta
    return response.split('?')[-2].strip() + "?"

def generate_final_output(log):
    final_affirmation = log[-1][0]
    final_question = log[-1][1]
    final_communication = f"Experiment completed. Final Affirmation: '{final_affirmation}' | Final Question: '{final_question}'"
    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)