123 lines
3.2 KiB
Python
123 lines
3.2 KiB
Python
import asyncio
|
|
import logging
|
|
import os
|
|
from datetime import datetime
|
|
|
|
from agents import (
|
|
Agent,
|
|
FunctionTool,
|
|
HandoffOutputItem,
|
|
ItemHelpers,
|
|
MessageOutputItem,
|
|
RunContextWrapper,
|
|
Runner,
|
|
ToolCallItem,
|
|
ToolCallOutputItem,
|
|
function_tool,
|
|
set_default_openai_api,
|
|
set_default_openai_client,
|
|
set_tracing_disabled,
|
|
trace,
|
|
)
|
|
from httpx import get
|
|
|
|
|
|
@function_tool
|
|
async def get_weather(location: str) -> str:
|
|
"""Fetch the weather for today.
|
|
|
|
Args:
|
|
location: The location to fetch the weather for.
|
|
"""
|
|
return f"{location} is sunny"
|
|
|
|
|
|
system_prompt = """
|
|
you are a helpful assistant for a real estate brokerage AI assistant.
|
|
"""
|
|
|
|
|
|
bot = Agent(
|
|
name="Assistant agent",
|
|
instructions=system_prompt,
|
|
# tools=[get_weather],
|
|
)
|
|
|
|
|
|
async def main():
|
|
# res = await Runner.run(
|
|
# starting_agent=bot,
|
|
# input="What is the weather today?",
|
|
# )
|
|
# print(res)
|
|
|
|
result = Runner.run_streamed(
|
|
starting_agent=bot,
|
|
# ---
|
|
# with func tool
|
|
input="Tell a joke about pirates.",
|
|
# ---
|
|
# no func tool
|
|
# input="give me a 2 sentences about life",
|
|
)
|
|
|
|
final = []
|
|
async for event in result.stream_events():
|
|
# We'll ignore the raw responses event deltas
|
|
name = getattr(event, "name", None)
|
|
# print(f"Event: {event.type} - name {name}")
|
|
# print(event)
|
|
# continue
|
|
if event.type == "raw_response_event":
|
|
if event.data.type == "response.output_text.delta":
|
|
final += event.data.delta
|
|
|
|
print(f"raw resp: {event}")
|
|
# When the agent updates, print that
|
|
elif event.type == "agent_updated_stream_event":
|
|
print(f"Agent updated: {event.new_agent.name}")
|
|
continue
|
|
# When items are generated, print them
|
|
elif event.type == "run_item_stream_event":
|
|
if event.item.type == "tool_call_item":
|
|
print("-- Tool was called")
|
|
elif event.item.type == "tool_call_output_item":
|
|
print(f"-- Tool output: {event.item.output}")
|
|
elif event.item.type == "message_output_item":
|
|
print(f"-- Message output:\n {ItemHelpers.text_message_output(event.item)}")
|
|
else:
|
|
print(f"-- Unknown item type: {event.item.type}")
|
|
pass # Ignore other event types
|
|
else:
|
|
print(f"-- Unknown out item type: {event.item.type}")
|
|
|
|
print(f"----------------------")
|
|
|
|
print(f"FinalFinalFinal: {''.join(final)}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|
|
|
|
|
|
# no func tool:
|
|
#
|
|
# Event: agent_updated_stream_event - name None
|
|
# Event: raw_response_event - name None
|
|
# ...
|
|
# Event: raw_response_event - name None
|
|
# Event: run_item_stream_event - name message_output_created
|
|
|
|
# with func tool:
|
|
#
|
|
# Event: agent_updated_stream_event - name None
|
|
# Event: raw_response_event - name None
|
|
# ...
|
|
# Event: raw_response_event - name None
|
|
# Event: run_item_stream_event - name tool_called
|
|
# Event: run_item_stream_event - name tool_output
|
|
# Event: raw_response_event - name None
|
|
# ...
|
|
# Event: raw_response_event - name None
|
|
# Event: run_item_stream_event - name message_output_created
|