-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrun_agent.py
More file actions
126 lines (96 loc) · 4.22 KB
/
run_agent.py
File metadata and controls
126 lines (96 loc) · 4.22 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
#!/usr/bin/env python3
# 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.
"""File Tools Example.
This example demonstrates how to use file operation tools (Read, Write, Edit, Grep, Bash, Glob)
in TRPC Agent for file operations, text editing, and search functionality.
"""
import asyncio
import os
import shutil
import tempfile
import uuid
from dotenv import load_dotenv
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()
from agent.agent import create_agent
async def run_file_tools_agent():
"""Run the file tools agent demo"""
app_name = "file_tools_demo"
# Create working directory in system temp directory
system_temp = tempfile.gettempdir()
work_dir = os.path.join(system_temp, "file_tools_demo")
os.makedirs(work_dir, exist_ok=True)
print(f"📁 Working directory: {work_dir}")
try:
# Create initial test files
test_file = os.path.join(work_dir, "test.txt")
with open(test_file, "w") as f:
f.write("Hello, World!\nThis is a test file.\nLine 3\n")
config_file = os.path.join(work_dir, "config.ini")
with open(config_file, "w") as f:
f.write("[Database]\nhost=localhost\nport=5432\n")
print(f"✅ Created test files: test.txt, config.ini")
# Create agent with working directory
agent = create_agent(work_dir=work_dir)
session_service = InMemorySessionService()
runner = Runner(app_name=app_name, agent=agent, session_service=session_service)
user_id = "demo_user"
# Test queries demonstrating different tools
demo_queries = [
"Read the content of test.txt",
"Add a new line 'Line 4' to test.txt",
"Search for 'test' in all files in the current directory",
"Find all .txt files in the current directory",
]
for query in demo_queries:
current_session_id = str(uuid.uuid4())
await session_service.create_session(
app_name=app_name,
user_id=user_id,
session_id=current_session_id,
)
print(f"🆔 Session ID: {current_session_id[:8]}...")
print(f"📝 User: {query}")
user_content = Content(parts=[Part.from_text(text=query)])
print("🤖 Assistant: ", end="", flush=True)
async for event in runner.run_async(user_id=user_id,
session_id=current_session_id,
new_message=user_content):
if not event.content or not event.content.parts:
continue
if event.partial:
for part in event.content.parts:
if part.text:
print(part.text, end="", flush=True)
continue
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}]")
# Uncomment to get the full text output of the LLM
# elif part.text:
# print(f"\n✅ {part.text}")
print("\n" + "-" * 40)
await runner.close()
# Show final file contents
print("\n📄 Final file contents:")
print("\n--- test.txt ---")
with open(test_file, "r") as f:
print(f.read())
print("\n✅ File Tools demonstration completed!")
finally:
# Cleanup: remove working directory immediately after run
print(f"\n🧹 Cleaning up working directory: {work_dir}")
shutil.rmtree(work_dir, ignore_errors=True)
if __name__ == "__main__":
asyncio.run(run_file_tools_agent())