|
- from typing import List, cast
-
- import chainlit as cl
- import yaml
- from autogen_agentchat.agents import AssistantAgent
- from autogen_agentchat.base import Response
- from autogen_agentchat.messages import ModelClientStreamingChunkEvent, TextMessage
- from autogen_core import CancellationToken
- from autogen_core.models import ChatCompletionClient
-
-
- @cl.set_starters # type: ignore
- async def set_starts() -> List[cl.Starter]:
- return [
- cl.Starter(
- label="Greetings",
- message="Hello! What can you help me with today?",
- ),
- cl.Starter(
- label="Weather",
- message="Find the weather in New York City.",
- ),
- ]
-
-
- @cl.step(type="tool") # type: ignore
- async def get_weather(city: str) -> str:
- return f"The weather in {city} is 73 degrees and Sunny."
-
-
- @cl.on_chat_start # type: ignore
- async def start_chat() -> None:
- # Load model configuration and create the model client.
- with open("model_config.yaml", "r") as f:
- model_config = yaml.safe_load(f)
- model_client = ChatCompletionClient.load_component(model_config)
-
- # Create the assistant agent with the get_weather tool.
- assistant = AssistantAgent(
- name="assistant",
- tools=[get_weather],
- model_client=model_client,
- system_message="You are a helpful assistant",
- model_client_stream=True, # Enable model client streaming.
- reflect_on_tool_use=True, # Reflect on tool use.
- )
-
- # Set the assistant agent in the user session.
- cl.user_session.set("prompt_history", "") # type: ignore
- cl.user_session.set("agent", assistant) # type: ignore
-
-
- @cl.on_message # type: ignore
- async def chat(message: cl.Message) -> None:
- # Get the assistant agent from the user session.
- agent = cast(AssistantAgent, cl.user_session.get("agent")) # type: ignore
- # Construct the response message.
- response = cl.Message(content="")
- async for msg in agent.on_messages_stream(
- messages=[TextMessage(content=message.content, source="user")],
- cancellation_token=CancellationToken(),
- ):
- if isinstance(msg, ModelClientStreamingChunkEvent):
- # Stream the model client response to the user.
- await response.stream_token(msg.content)
- elif isinstance(msg, Response):
- # Done streaming the model client response. Send the message.
- await response.send()
|