|
|
|
|
|
|
|
import os
|
|
from openai import AsyncOpenAI
|
|
import chainlit as cl
|
|
from chainlit.prompt import Prompt, PromptMessage
|
|
from chainlit.playground.providers import ChatOpenAI
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
|
|
|
|
system_template = """You are an expert assistant operating in a formal context.
|
|
Your primary objective is to deliver clear, concise, and engaging responses.
|
|
You excel at simplifying complex ideas, summarizing information succinctly, providing step-by-step solutions, creating innovative content,
|
|
and adopting a professional tone when required. Ensure that all responses are accurate, approachable, succint, and easy to comprehend.
|
|
"""
|
|
|
|
user_template = """{input}
|
|
Think through your response step by step.
|
|
"""
|
|
|
|
|
|
|
|
|
|
@cl.on_chat_start
|
|
async def start_chat():
|
|
settings = {
|
|
"model": "gpt-4o-mini",
|
|
"temperature": 0.3,
|
|
"max_tokens": 400,
|
|
"top_p": 0.9,
|
|
"frequency_penalty": 0,
|
|
"presence_penalty": 0,
|
|
}
|
|
|
|
cl.user_session.set("settings", settings)
|
|
|
|
|
|
@cl.on_message
|
|
async def main(message: cl.Message):
|
|
settings = cl.user_session.get("settings")
|
|
|
|
client = AsyncOpenAI()
|
|
|
|
print(message.content)
|
|
|
|
prompt = Prompt(
|
|
provider=ChatOpenAI.id,
|
|
messages=[
|
|
PromptMessage(
|
|
role="system",
|
|
template=system_template,
|
|
formatted=system_template,
|
|
),
|
|
PromptMessage(
|
|
role="user",
|
|
template=user_template,
|
|
formatted=user_template.format(input=message.content),
|
|
),
|
|
],
|
|
inputs={"input": message.content},
|
|
settings=settings,
|
|
)
|
|
|
|
print([m.to_openai() for m in prompt.messages])
|
|
|
|
msg = cl.Message(content="")
|
|
|
|
|
|
async for stream_resp in await client.chat.completions.create(
|
|
messages=[m.to_openai() for m in prompt.messages], stream=True, **settings
|
|
):
|
|
token = stream_resp.choices[0].delta.content
|
|
if not token:
|
|
token = ""
|
|
await msg.stream_token(token)
|
|
|
|
|
|
prompt.completion = msg.content
|
|
msg.prompt = prompt
|
|
|
|
|
|
await msg.send()
|
|
|