Skip to content

Commit 302291a

Browse files
committed
Example showing the use of the session save on turn
1 parent fc4633d commit 302291a

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import asyncio
2+
import tempfile
3+
4+
from agents import Agent, Runner, SQLiteSession, trace
5+
from agents.tool import function_tool
6+
7+
"""
8+
This example shows how an agent-as-tool can access the entire conversation history
9+
using a session. The session information is declared globally or stored in the
10+
user context and tools can then read that session and have the conversation history
11+
for all turns up to that point.
12+
"""
13+
14+
spanish_agent = Agent(
15+
name="spanish_agent",
16+
instructions="You translate the user's message to Spanish",
17+
handoff_description="An english to spanish translator",
18+
)
19+
20+
french_agent = Agent(
21+
name="french_agent",
22+
instructions="You translate the user's message to French",
23+
handoff_description="An english to french translator",
24+
)
25+
26+
italian_agent = Agent(
27+
name="italian_agent",
28+
instructions="You translate the user's message to Italian",
29+
handoff_description="An english to italian translator",
30+
)
31+
32+
33+
async def main(session_id, file_path):
34+
35+
@function_tool
36+
async def check_tool() -> str:
37+
"""A tool that looks at the entire conversation, checks
38+
your work, and asks for corrections if needed.
39+
40+
Returns
41+
-------
42+
str
43+
A string starting with either REJECTED or ACCEPTED,
44+
followed by instructions to correct the translations, if needed.
45+
"""
46+
47+
# Open the session and get all the messages as input items
48+
_session = SQLiteSession(session_id=session_id, db_path=file_path)
49+
input_messages = await _session.get_items()
50+
51+
check_agent = Agent(
52+
name="check_agent",
53+
instructions=(
54+
"Check the translations for correctness by reviewing the entire conversation and "
55+
"asking for corrections if needed. Respond with either REJECTED or ACCEPTED, "
56+
"followed by instructions to correct the translations, if needed."
57+
),
58+
)
59+
60+
output = await Runner.run(
61+
check_agent,
62+
input=input_messages,
63+
)
64+
return output.final_output
65+
66+
67+
orchestrator_agent = Agent(
68+
name="orchestrator_agent",
69+
instructions=(
70+
"You are a translation agent. Translate the user's text "
71+
"to Spanish, Italian and French. Always use the provided tools. "
72+
"After translating the text, you mush call the check_tool to "
73+
"ensure correctness."
74+
),
75+
tools=[
76+
spanish_agent.as_tool(
77+
tool_name="translate_to_spanish",
78+
tool_description="Translate the user's message to Spanish",
79+
),
80+
french_agent.as_tool(
81+
tool_name="translate_to_french",
82+
tool_description="Translate the user's message to French",
83+
),
84+
italian_agent.as_tool(
85+
tool_name="translate_to_italian",
86+
tool_description="Translate the user's message to Italian",
87+
),
88+
check_tool
89+
]
90+
)
91+
92+
msg = input("Hi! What would you like translated? ")
93+
94+
# Create a new SQLite session with the provided session ID and file path
95+
session = SQLiteSession(
96+
session_id=session_id,
97+
db_path=file_path,
98+
)
99+
100+
# Run the entire orchestration in a single trace
101+
with trace("Orchestrator evaluator"):
102+
orchestrator_result = await Runner.run(orchestrator_agent, msg, session=session)
103+
104+
print(f"\n\nFinal response:\n{orchestrator_result.final_output}")
105+
106+
107+
if __name__ == "__main__":
108+
with tempfile.NamedTemporaryFile("+r", suffix=".db") as db_file:
109+
# Create a new SQLite session with the temporary database file
110+
session_id = "ABCDEF"
111+
file_path = db_file
112+
113+
# Run the main function
114+
asyncio.run(main(session_id, file_path))
115+
116+
# This input triggers a "REJECTED" response from the check_tool most of the time
117+
# "hello, guten tag, hola, bonjure"

0 commit comments

Comments
 (0)