File size: 2,933 Bytes
cf52a55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import chainlit as cl
import ollama

# ────────────────────────────────────────────────
# ConfiguraΓ§Γ΅es fixas (mude aqui o que precisar)
# ────────────────────────────────────────────────
MODEL_NAME = "IA-Doninha-llama2:latest"          # ← coloque o nome exato do seu modelo
SYSTEM_PROMPT = """

VocΓͺ Γ© um assistente extremamente ΓΊtil, direto e sarcΓ‘stico quando faz sentido.

Responda em portuguΓͺs do Brasil, de forma clara e concisa.

"""  # personalize bastante aqui!

# ────────────────────────────────────────────────

@cl.on_chat_start
async def start():
    # Mensagem de boas-vindas que aparece quando o usuΓ‘rio entra
    await cl.Message(
        content="Bem Vindo Γ  InteligΓͺncia Artificial da OperaΓ§Γ£o Doninha! NΓ£o faΓ§a perguntas idiotas"
    ).send()

    # Opcional: mostra um "pensando..." enquanto carrega
    cl.user_session.set("history", [])


@cl.on_message
async def main(message: cl.Message):
    # Pega o histΓ³rico da sessΓ£o (para manter contexto)
    history = cl.user_session.get("history") or []

    # Adiciona a mensagem do usuΓ‘rio no histΓ³rico
    history.append({"role": "user", "content": message.content})

    # Mostra "pensando..." na interface
    msg = cl.Message(content="")
    await msg.send()

    # Chama o Ollama com streaming (resposta aparece letra por letra)
    try:
        stream = ollama.chat(
            model=MODEL_NAME,
            messages=[
                {"role": "system", "content": SYSTEM_PROMPT},
                *history
            ],
            stream=True,
            options={
                "temperature": 0.7,
                "num_ctx": 8192  # aumenta se seu modelo suportar mais contexto
            }
        )

        full_response = ""

        for chunk in stream:
            if "message" in chunk and "content" in chunk["message"]:
                token = chunk["message"]["content"]
                full_response += token
                await msg.stream_token(token)

        # Finaliza a mensagem
        await msg.update()

        # Salva a resposta da IA no histΓ³rico
        history.append({"role": "assistant", "content": full_response})
        cl.user_session.set("history", history)

    except Exception as e:
        await cl.Message(
            content=f"Ops... deu ruim aqui: {str(e)}\nTenta de novo?"
        ).send()


# Opcional: botΓ£o para limpar conversa
@cl.action_callback(name="Limpar conversa")
async def clear_conversation():
    cl.user_session.set("history", [])
    await cl.Message(content="Conversa zerada! Pode comeΓ§ar do zero.").send()