The Step
class is a Python Context Manager that can be used to create steps in your chainlit app. The step is created when the context manager is entered and is updated to the client when the context manager is exited.
Parameters
The name of the step. Default to the name of the decorated function.
The type of the step, useful for monitoring and debugging.
Elements to attach to the step.
By default the feedback buttons are disabled for steps. Set this to False
to
enable them.
By default the step will be nested under the previous step/message. Set this
to True
to make it a root step.
show_input
Union[bool, str]
default: "False"By default only the output of the step is shown. Set this to True
to also
show the input. You can also set this to a language like json
or python
to
syntax highlight the input.
Send a Step
import chainlit as cl
@cl.on_message
async def main():e
async with cl.Step(name="Test") as step:
step.input = "hello"
step.output = "world"
Stream the Output
from openai import AsyncOpenAI
import chainlit as cl
client = AsyncOpenAI()
@cl.on_message
async def main(msg: cl.Message):
root = True
async with cl.Step(name="gpt4", type="llm", root=root) as step:
step.input = msg.content
stream = await client.chat.completions.create(
messages=[{"role": "user", "content": msg.content}],
stream=True,
model="gpt-4",
temperature=0,
)
async for part in stream:
delta = part.choices[0].delta
if delta.content:
await step.stream_token(delta.content)
Nest Steps
To nest steps, simply create a step inside another step.
import chainlit as cl
@cl.on_chat_start
async def main():
async with cl.Step(name="Parent step") as parent_step:
parent_step.input = "Parent step input"
async with cl.Step(name="Child step") as child_step:
child_step.input = "Child step input"
child_step.output = "Child step output"
parent_step.output = "Parent step output"
Update a Step
import chainlit as cl
@cl.on_chat_start
async def main():
async with cl.Step(name="Parent step") as step:
step.input = "Parent step input"
step.output = "Parent step output"
await cl.sleep(2)
step.output = "Parent step output updated"
await step.update()
Remove a Step
import chainlit as cl
@cl.on_chat_start
async def main():
async with cl.Step(name="Parent step") as step:
step.input = "Parent step input"
step.output = "Parent step output"
await cl.sleep(2)
await step.remove()