-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrun_agent.py
More file actions
145 lines (117 loc) · 3.88 KB
/
run_agent.py
File metadata and controls
145 lines (117 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Tencent is pleased to support the open source community by making tRPC-Agent-Python available.
#
# Copyright (C) 2026 Tencent. All rights reserved.
#
# tRPC-Agent-Python is licensed under Apache-2.0.
"""
LangGraph Calculator Agent Demo
This example demonstrates basic LangGraphAgent usage with trpc_agent_sdk framework,
showing how to:
1. Create a LangGraph with tool calling
2. Run the agent with Runner
3. Handle streaming events
"""
import asyncio
import uuid
from dotenv import load_dotenv
from trpc_agent_sdk.agents import RunConfig
from trpc_agent_sdk.runners import Runner
from trpc_agent_sdk.sessions import InMemorySessionService
from trpc_agent_sdk.types import Content
from trpc_agent_sdk.types import Part
load_dotenv()
async def run_agent(
runner: Runner,
user_id: str,
session_id: str,
query: str,
) -> None:
"""Run agent with a single query and handle events.
Args:
runner: The runner instance
user_id: User identifier
session_id: Session identifier
query: User query text
"""
user_content = Content(parts=[Part.from_text(text=query)])
print("Assistant: ", end="", flush=True)
try:
run_config = RunConfig()
# run_config = RunConfig(agent_run_config={
# "subgraphs": True,
# })
async for event in runner.run_async(
user_id=user_id,
session_id=session_id,
new_message=user_content,
run_config=run_config,
):
if not event.content or not event.content.parts:
continue
# Print streaming text
if event.partial:
for part in event.content.parts:
if part.text:
print(part.text, end="", flush=True)
continue
# Print tool calls and responses
for part in event.content.parts:
if part.thought:
continue
if part.function_call:
print(f"\n[Invoke Tool: {part.function_call.name}({part.function_call.args})]")
elif part.function_response:
print(f"[Tool Result: {part.function_response.response}]")
# # Print final text response
# for part in event.content.parts:
# if part.text and not event.partial:
# print(part.text, end="", flush=True)
except Exception as e:
print(f"\nError: {e}")
print() # New line after response
def create_runner(app_name: str, session_service: InMemorySessionService) -> Runner:
"""Create a new runner instance.
Args:
app_name: Application name
session_service: Session service instance
Returns:
A new Runner instance
"""
from agent.agent import root_agent
return Runner(app_name=app_name, agent=root_agent, session_service=session_service)
async def run_demo() -> None:
"""Run LangGraph agent demo with multiple queries."""
print("=" * 60)
print("LangGraph Agent Demo")
print("=" * 60)
print()
# Common settings
app_name = "langgraph_demo"
user_id = "demo_user"
session_id = str(uuid.uuid4())
# Create session service
session_service = InMemorySessionService()
await session_service.create_session(
app_name=app_name,
user_id=user_id,
session_id=session_id,
state={},
)
# Create runner
runner = create_runner(app_name, session_service)
# Demo queries
queries = [
"Hello, who are you?",
"Please calculate 15 multiply 23.",
"Now divide the result by 5.",
"Thank you!",
]
for query in queries:
print(f"User: {query}")
await run_agent(runner, user_id, session_id, query)
print()
print("=" * 60)
print("Demo completed!")
print("=" * 60)
if __name__ == "__main__":
asyncio.run(run_demo())