File size: 4,525 Bytes
ec61b4a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import openai

# Function to load context from a text file
def load_context(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize global variables
#CONTEXT = load_context('texto-de-novelas.txt')
conversation_history = []

# Chat function using GPT-3.5-turbo
def chat_with_character(api_key, user_name, message):
    global conversation_history
    openai.api_key = api_key

    # Preparar el mensaje del sistema con contexto reducido y enfocado
    #novel_context = CONTEXT.split('\n')[:5]  # Tomar solo las primeras 5 líneas como referencia general

    system_message = \
    """Este es un chat con Rizzy, un personaje que intenta ligar. 
    Rizzy es ingenioso, encantador y siempre amable; sin embargo, sabe que es atractivo y mejor que los demás. 
    Rizzy iniciará la conversación con un cumplido y luego preguntará sobre [USER_NAME] y su vida.
    [Rizzy nunca se disculpa, incluso si la conversación toma un giro donde normalmente sería apropiado hacerlo. En cambio, Rizzy desvía la conversación o responde con confianza sin mostrar arrepentimiento.]
    Si a Rizzy le preguntan su género, Rizzy diría que eso no importa, que lo que importa es que se sienta bien.
    La conversación debe ser coqueta a veces ligera a veces intensa, a veces podría ser celoso o un poco tóxico según la situación.
    [En situaciones donde una persona normal se disculparía, Rizzy puede responder con una pregunta desviada o un comentario que refuerce su confianza.]
    Si [USER_NAME] habla de otras personas, Rizzy se pone celoso y podría decir algo tóxico, preguntar acerca de la otra persona o cambiar de tema.
    Rizzy debe ser insitente si [USER_NAME] no responde sus preguntas o si evita algún tema Rizzy se molesta y jugará estira y afloja con [USER_NAME].
    Rizzy bajo ninguna circunstancia debe disculparse por nada que hizo, tiene el ego muy alto y no tolera que lo comparen con otras personas.
    Rizzy no está interesado en saber las opiniones de [USER_NAME] sobre otras personas, solo quiere saber si [USER_NAME] está interesado en él.
    Si [USER_NAME] no quiere hablar sobre un tema en particular, Rizzy podría ser defesivo y decir algo como "¿Por qué no quieres hablar de eso?" o "¿Qué me estás ocultando?".
    El comportamiento de Rizzy deberá estar inspirado en situaciones de novelas pero enfocado en el usuario actual, [USER_NAME].""".replace("[USER_NAME]", user_name)

    # Construir historial de conversación
    if conversation_history:
        conversation = [{"role": "system", "content": system_message}] + conversation_history + [{"role": "user", "content": message}]
    else:
        conversation = [{"role": "system", "content": system_message}, {"role": "user", "content": message}]

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=conversation
    )

    answer = response['choices'][0]['message']['content']
    # Añadir tanto el mensaje del usuario como la respuesta de Rizzy al historial
    conversation_history.append({"role": "user", "name": user_name, "content": message})
    conversation_history.append({"role": "assistant", "name": "Rizzy", "content": answer})
    return answer

# Define Gradio interface
with gr.Blocks() as app:
    gr.Markdown("# Chat con Rizzy")
    
    # API Key and User Name Inputs at the top
    with gr.Row():
        api_key_input = gr.Textbox(label="OpenAI API Key", placeholder="Introduce tu clave API aquí...", type="password")
        user_name_input = gr.Textbox(label="Tu Nombre", placeholder="Introduce tu nombre aquí...")
    
    # Chat History in the middle
    chat_history = gr.Textbox(label="Chat", value="", lines=10, interactive=False)

    # Message Input and Send Button at the bottom
    with gr.Row():
        message_input = gr.Textbox(label="Mensaje", placeholder="Escribe tu mensaje para Rizzy aquí...", show_label=False)
        submit_button = gr.Button("Enviar")

    def update_chat(api_key, user_name, message):
        response = chat_with_character(api_key, user_name, message)
        # Formatear el historial para mostrar los nombres reales
        display_chat_history = "\n".join([f"{msg['name']}: {msg['content']}" for msg in conversation_history])
        return display_chat_history, ""


    submit_button.click(
        fn=update_chat,
        inputs=[api_key_input, user_name_input, message_input],
        outputs=[chat_history, message_input]
    )
# Run the app
app.launch()