chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import asyncio
|
||||
import uuid
|
||||
|
||||
from openai.types.responses import ResponseContentPartDoneEvent, ResponseTextDeltaEvent
|
||||
|
||||
from agents import Agent, RawResponsesStreamEvent, Runner, TResponseInputItem, trace
|
||||
from examples.auto_mode import input_with_fallback, is_auto_mode
|
||||
|
||||
"""
|
||||
This example shows the handoffs/routing pattern. The triage agent receives the first message, and
|
||||
then hands off to the appropriate agent based on the language of the request. Responses are
|
||||
streamed to the user.
|
||||
"""
|
||||
|
||||
french_agent = Agent(
|
||||
name="french_agent",
|
||||
instructions="You only speak French",
|
||||
)
|
||||
|
||||
spanish_agent = Agent(
|
||||
name="spanish_agent",
|
||||
instructions="You only speak Spanish",
|
||||
)
|
||||
|
||||
english_agent = Agent(
|
||||
name="english_agent",
|
||||
instructions="You only speak English",
|
||||
)
|
||||
|
||||
triage_agent = Agent(
|
||||
name="triage_agent",
|
||||
instructions="Handoff to the appropriate agent based on the language of the request.",
|
||||
handoffs=[french_agent, spanish_agent, english_agent],
|
||||
)
|
||||
|
||||
|
||||
async def main():
|
||||
# We'll create an ID for this conversation, so we can link each trace
|
||||
conversation_id = str(uuid.uuid4().hex[:16])
|
||||
|
||||
msg = input_with_fallback(
|
||||
"Hi! We speak French, Spanish and English. How can I help? ",
|
||||
"Hello, how do I say good evening in French?",
|
||||
)
|
||||
agent = triage_agent
|
||||
inputs: list[TResponseInputItem] = [{"content": msg, "role": "user"}]
|
||||
auto_mode = is_auto_mode()
|
||||
|
||||
while True:
|
||||
# Each conversation turn is a single trace. Normally, each input from the user would be an
|
||||
# API request to your app, and you can wrap the request in a trace()
|
||||
with trace("Routing example", group_id=conversation_id):
|
||||
result = Runner.run_streamed(
|
||||
agent,
|
||||
input=inputs,
|
||||
)
|
||||
async for event in result.stream_events():
|
||||
if not isinstance(event, RawResponsesStreamEvent):
|
||||
continue
|
||||
data = event.data
|
||||
if isinstance(data, ResponseTextDeltaEvent):
|
||||
print(data.delta, end="", flush=True)
|
||||
elif isinstance(data, ResponseContentPartDoneEvent):
|
||||
print("\n")
|
||||
|
||||
inputs = result.to_input_list()
|
||||
print("\n")
|
||||
|
||||
if auto_mode:
|
||||
break
|
||||
user_msg = input_with_fallback("Enter a message: ", "Thanks!")
|
||||
inputs.append({"content": user_msg, "role": "user"})
|
||||
agent = result.current_agent
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user