Doninha / app.py
0danielfonseca's picture
Upload 42 files
cf52a55 verified
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()