File size: 4,118 Bytes
db23382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e2105dd
db23382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import os
import openai
from transformers import pipeline, Conversation
import gradio as gr
import json
from dotenv import load_dotenv

# Load environment variables from the .env file de forma local
load_dotenv()
import base64

with open("Iso_Logotipo_Ceibal.png", "rb") as image_file:
    encoded_image = base64.b64encode(image_file.read()).decode()


openai.api_key = os.environ['OPENAI_API_KEY']

def clear_chat(message, chat_history):
     return "", []

def add_new_message(message,topic,age_range, chat_history):
     new_chat = []
     
     new_chat.append({"role": "system", "content": 'Sos encargado de hacer preguntas y llevar los puntos de un juego. Es un juego de preguntas y respuestas, tú tienes que hacer las preguntas del tema {} para un rango de edad de {}. Empieza con las preguntas desde el comienzo y es muy importante que solo hagas una pregunta por vez, hasta 4 preguntas para finalmente dar el resultado final. Da 3 opciones de respuesta por cada pregunta.'.format(topic,age_range)})
   
     for turn in chat_history:
          user, bot = turn
          new_chat.append({"role": "user", "content": user})
          new_chat.append({"role": "assistant","content":bot})
     new_chat.append({"role": "user","content":message})
     return new_chat
    
          

def respond(message, person,age_range, chat_history):
    prompt = add_new_message(message, person, age_range, chat_history)
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages= prompt,
        temperature=0.5,
        max_tokens=1000,
        stream=True,
        )

    token_counter = 0 
    partial_words = "" 

    counter=0
    for chunk in response:
        chunk_message = chunk['choices'][0]['delta']
        if(len(chat_history))<1:
            # print("entró acaá")
            partial_words += chunk_message.content
            chat_history.append([message,chunk_message.content])
        else:
            # print("antes", chat_history)
            if(len(chunk_message)!=0):
                if(len(chunk_message)==2):
                    partial_words += chunk_message.content
                    chat_history.append([message,chunk_message.content])
                else:
                    partial_words += chunk_message.content
                    chat_history[-1] =([message,partial_words])
        yield "",chat_history



def start( person,age_range, chat_history):
    message=  "Quiero empezar!"
    yield "",respond(message, person,age_range, chat_history)




with gr.Blocks() as demo:
    gr.Markdown("""
    <center>
    <h1>
    Uso de AI para un juego de preguntas.
    </h1>
    <img src='data:image/jpg;base64,{}' width=200px>
    <h3>
    Con este espacio podrás jugar a responder preguntas de manera correcta a un tema y sumar puntos!
    </h3>
    </center>
    """.format(encoded_image))
    with gr.Row():
        topic = gr.Textbox(label="Escribí el tema:")
        choice_age = gr.Radio(
                [
                    ("<12", "menores de 12 años"),
                    ("12-15", "entre 12 y 15 años"),
                    ("15-18", "entre 15 y 18 años"),
                    (">18" ,"mayores de 18"),
                ],
                label="Cuál es tu edad?",
            )
        start_btn = gr.Button("Quiero comenzar!")
    with gr.Row():
        chatbot = gr.Chatbot( height=550) #just to fit the notebook
    with gr.Row():
        with gr.Row():
            with gr.Column(scale=4):
                msg = gr.Textbox(label="Texto de entrada", value="Empecemos")
            with gr.Column(scale=1):
                btn = gr.Button("Enviar")
                clear = gr.ClearButton(components=[msg, chatbot], value="Borrar chat")

   


    btn.click(respond, inputs=[msg,topic,choice_age, chatbot], outputs=[msg, chatbot])
    msg.submit(respond, inputs=[msg, topic,choice_age,chatbot], outputs=[msg, chatbot]) #Press enter to submit
    clear.click(clear_chat,inputs=[msg, chatbot], outputs=[msg, chatbot])
    start_btn.click(respond, inputs=[msg,topic,choice_age, chatbot], outputs=[msg, chatbot])
demo.queue()
demo.launch()