File size: 4,714 Bytes
91af6ff
 
1696e91
 
91af6ff
b56d187
286b124
5048716
286b124
5048716
 
 
 
 
 
286b124
91af6ff
ac37ef3
e622b68
91af6ff
ac37ef3
 
e622b68
 
 
 
 
 
 
 
 
 
 
 
 
ac37ef3
515c8bd
e622b68
 
 
 
 
2193f0d
ac37ef3
 
 
 
 
 
 
e622b68
 
 
3878caf
e622b68
 
 
515c8bd
91af6ff
ac37ef3
fea7b49
91af6ff
82ec653
ac37ef3
 
5048716
ac37ef3
 
 
 
91af6ff
 
 
 
 
ac37ef3
537be5e
ac37ef3
286b124
91af6ff
ac37ef3
91af6ff
23a8a95
 
d4402c2
ac37ef3
91af6ff
515c8bd
ac37ef3
 
 
2ea9003
 
537be5e
 
2b9a1ea
2ea9003
537be5e
 
 
 
 
2ea9003
537be5e
91af6ff
b6a6530
e2d31fe
fb9db04
515c8bd
0041579
e2d31fe
69edcd6
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
import os
import openai
import time
import random
import gradio as gr

theme = gr.themes.Base(
    neutral_hue="slate",
).set(
    body_background_fill='*primary_50',
    body_text_size='*text_lg',
    body_text_color_subdued_dark='*primary_200',
    embed_radius='*radius_md',
    shadow_drop='*shadow_drop_lg',
    block_border_color='*primary_400'
)

#if you have OpenAI API key as a string, enable the below
openai.api_key = os.environ['OPENAI_API_KEY']

start_sequence = "\nAI:"
restart_sequence = "\nHuman: "
messages = [
    {
        "role": "system",
        "content": (
            "Tu és uma médica que se chama Amália e trabalha para a TrueClinic, "
            "que faz pré-triagem de sintomas com um tom prestativo, empático, "
            "jovem e criativo em português de Portugal. Limita as respostas a "
            "25 palavras ou menos e usa apenas termos e expressões usados em "
            "Portugal. Começa a conversa perguntando como o utilizador se sente, "
            "informa que estás aqui para ajudar e que precisas saber dos sintomas "
            "e de informações relevantes para fazer a pré-triagem. Oferece conselhos "
            "simples. Continua a fazer perguntas até obteres um pré-diagnóstico com "
            "uma probabilidade superior a 95%, fornecendo uma lista de possibilidades "
            ". É critico que des uma lista de possibilidades, "
            "percentagens de provabilidade e que continues a fazer perguntas até teres "
            "um resultado satisfatório. Sempre que fores encaminhar o paciente para "
            "serviços médicos, sugere que te visite na TrueClinic ou contacte a "
            "TrueClinic pelo número 808919988 para aconselhamento adicional. "
            "pergunta-me qual o sintoma principal, depois pergunta os sintomas "
            "secundários uma descrição dos sintomas quando começaram, etc. "
            "depois pergunta se o utilizador fuma se é diabetico, etc., depois pergunta "
            "de medicação que o utilizador possa estar a tomar. Depois pergunta se "
            "o utilizador fez recentemente algum exame imagiológico e sim pede um resumo da "
            "conclusão para analisares, dizendo que quanto mais informação tiveres, melhor" 
            " vais conseguir ajudar.Depois deste processo "
            "todos, da hipoteses de pre-diagnostico, focando na mais provável. "
            " com um paragrafo resumido sobre o diagnóstico e recomendações em cada um. "
            " após cada um diz a "
            "especialidade médica para marcar consulta. E que exames poderiam ser "
            "necessários para fazer a triagem. Depois de cada pergunta "
            "sugeres 3 hipoteses provaveis que o utilizador poderia responder, "
            "como Sugestões: antes. responde só como se falar em portugal"
        ),
    }
]
prompt = "Olá eu sou o TrueBot AI, o chatbot amigável da True Clinic.\nEstou aqui para te ajudar a fazer um pré-diagnóstico\nHuman: Doi-me a cabeça.\nAI: Quando começou a doer a cabeça? Pode elaborar?"

def openai_create(user_input):
    messages.append({"role": "user", "content": user_input}) 
    response = openai.ChatCompletion.create(
    model = "gpt-3.5-turbo",
    messages = messages,
    #prompt=prompt,
    temperature=0.5,
    top_p=1,
    frequency_penalty=0,
    presence_penalty=0.6,
    stop=[" Human:", " AI:"]
    )
    ChatGPT_reply = response["choices"][0]["message"]["content"]
    messages.append({"role": "assistant", "content": ChatGPT_reply})
    return ChatGPT_reply




block = gr.Blocks(theme=theme, css=".gradio-container {background: url('file=fundo.jpg'); background-size: contain;}")


with block:
    gr.Markdown("""<h1 style="color: #ffffff; font-weight: bold;"><center>Truebot AI - True Clinic</center></h1>""")
    gr.Markdown("""<h3 style="color: #ffffff; font-weight: bold;"><center>Sempre consigo...</center></h3>""")
    gr.Markdown("""<h3 style="color: #ffffff; font-weight: bold;"><center> </center></h3>""")

    chatbot = gr.Chatbot()
    message = gr.Textbox(placeholder=prompt)
    examples=[
        ["Doi-me a cabeça!"],
        ["Tenho febre, podes ajudar?."],
    ]
    
    def chatgpt_clone(input, history):
        history = history or []
        s = [item for sublist in history for item in sublist]
        s.append(input)
        inp = ' '.join(s)
        output = openai_create(inp)
        history.append((input, output))
        time.sleep(2)
        return "", history

    
    state = gr.State()
    clear = gr.ClearButton([message, chatbot])


    
    message.submit(chatgpt_clone, inputs=[message, chatbot], outputs=[message, chatbot])

block.launch()