| import chainlit as cl
|
| import ollama
|
|
|
|
|
|
|
|
|
| MODEL_NAME = "IA-Doninha-llama2:latest"
|
| 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.
|
| """
|
|
|
|
|
|
|
| @cl.on_chat_start
|
| async def start():
|
|
|
| await cl.Message(
|
| content="Bem Vindo Γ InteligΓͺncia Artificial da OperaΓ§Γ£o Doninha! NΓ£o faΓ§a perguntas idiotas"
|
| ).send()
|
|
|
|
|
| cl.user_session.set("history", [])
|
|
|
|
|
| @cl.on_message
|
| async def main(message: cl.Message):
|
|
|
| history = cl.user_session.get("history") or []
|
|
|
|
|
| history.append({"role": "user", "content": message.content})
|
|
|
|
|
| msg = cl.Message(content="")
|
| await msg.send()
|
|
|
|
|
| try:
|
| stream = ollama.chat(
|
| model=MODEL_NAME,
|
| messages=[
|
| {"role": "system", "content": SYSTEM_PROMPT},
|
| *history
|
| ],
|
| stream=True,
|
| options={
|
| "temperature": 0.7,
|
| "num_ctx": 8192
|
| }
|
| )
|
|
|
| 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)
|
|
|
|
|
| await msg.update()
|
|
|
|
|
| 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()
|
|
|
|
|
|
|
| @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() |