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() |