3
3
from anthropic import Anthropic , AsyncAnthropic
4
4
5
5
import lunary
6
- from lunary .anthrophic import monitor , parse_message
6
+ from lunary .anthrophic import monitor , parse_message , agent
7
+
7
8
8
9
def sync_non_streaming ():
9
10
client = Anthropic ()
10
11
monitor (client )
11
12
12
13
message = client .messages .create (
13
14
max_tokens = 1024 ,
14
- messages = [{
15
- "role" : "user" ,
16
- "content" : "Hello, Claude" ,
17
- }],
15
+ messages = [
16
+ {
17
+ "role" : "user" ,
18
+ "content" : "Hello, Claude" ,
19
+ }
20
+ ],
18
21
model = "claude-3-opus-20240229" ,
19
22
)
20
23
print (message .content )
@@ -25,10 +28,12 @@ async def async_non_streaming():
25
28
26
29
message = await client .messages .create (
27
30
max_tokens = 1024 ,
28
- messages = [{
29
- "role" : "user" ,
30
- "content" : "Hello, Claude" ,
31
- }],
31
+ messages = [
32
+ {
33
+ "role" : "user" ,
34
+ "content" : "Hello, Claude" ,
35
+ }
36
+ ],
32
37
model = "claude-3-opus-20240229" ,
33
38
)
34
39
print (message .content )
@@ -39,10 +44,12 @@ def sync_streaming():
39
44
40
45
stream = client .messages .create (
41
46
max_tokens = 1024 ,
42
- messages = [{
43
- "role" : "user" ,
44
- "content" : "Hello, Claude" ,
45
- }],
47
+ messages = [
48
+ {
49
+ "role" : "user" ,
50
+ "content" : "Hello, Claude" ,
51
+ }
52
+ ],
46
53
model = "claude-3-opus-20240229" ,
47
54
stream = True ,
48
55
)
@@ -55,10 +62,12 @@ async def async_streaming():
55
62
56
63
stream = await client .messages .create (
57
64
max_tokens = 1024 ,
58
- messages = [{
59
- "role" : "user" ,
60
- "content" : "Hello, Claude" ,
61
- }],
65
+ messages = [
66
+ {
67
+ "role" : "user" ,
68
+ "content" : "Hello, Claude" ,
69
+ }
70
+ ],
62
71
model = "claude-3-opus-20240229" ,
63
72
stream = True ,
64
73
)
@@ -72,15 +81,18 @@ def sync_stream_helper():
72
81
73
82
with client .messages .stream (
74
83
max_tokens = 1024 ,
75
- messages = [{
76
- "role" : "user" ,
77
- "content" : "Hello, Claude" ,
78
- }],
84
+ messages = [
85
+ {
86
+ "role" : "user" ,
87
+ "content" : "Hello, Claude" ,
88
+ }
89
+ ],
79
90
model = "claude-3-opus-20240229" ,
80
91
) as stream :
81
92
for event in stream :
82
93
print (event )
83
94
95
+
84
96
async def async_stream_helper ():
85
97
client = monitor (AsyncAnthropic ())
86
98
@@ -108,10 +120,12 @@ def extra_arguments():
108
120
109
121
message = client .messages .create (
110
122
max_tokens = 1024 ,
111
- messages = [{
112
- "role" : "user" ,
113
- "content" : "Hello, Claude" ,
114
- }],
123
+ messages = [
124
+ {
125
+ "role" : "user" ,
126
+ "content" : "Hello, Claude" ,
127
+ }
128
+ ],
115
129
model = "claude-3-opus-20240229" ,
116
130
tags = ["translate" ],
117
131
user_id = "user123" ,
@@ -144,6 +158,7 @@ def anthrophic_bedrock():
144
158
)
145
159
print (message )
146
160
161
+
147
162
def tool_calls ():
148
163
from anthropic import Anthropic
149
164
from anthropic .types import ToolParam , MessageParam
@@ -210,7 +225,10 @@ async def async_tool_calls():
210
225
"input_schema" : {
211
226
"type" : "object" ,
212
227
"properties" : {
213
- "location" : {"type" : "string" , "description" : "The city and state, e.g. San Francisco, CA" },
228
+ "location" : {
229
+ "type" : "string" ,
230
+ "description" : "The city and state, e.g. San Francisco, CA" ,
231
+ },
214
232
"unit" : {
215
233
"type" : "string" ,
216
234
"enum" : ["celsius" , "fahrenheit" ],
@@ -229,6 +247,7 @@ async def async_tool_calls():
229
247
print (f"snapshot: { event .snapshot } " )
230
248
231
249
250
+ @agent ("DemoAgent" )
232
251
def reconcilliation_tool_calls ():
233
252
from anthropic import Anthropic
234
253
from anthropic .types import ToolParam , MessageParam
@@ -259,15 +278,36 @@ def reconcilliation_tool_calls():
259
278
max_tokens = 1024 ,
260
279
messages = [user_message ],
261
280
tools = tools ,
281
+ parent = message_id ,
262
282
)
263
283
print (f"Initial response: { message .model_dump_json (indent = 2 )} " )
264
284
265
285
assert message .stop_reason == "tool_use"
266
286
267
287
tool = next (c for c in message .content if c .type == "tool_use" )
288
+
289
+ for item in (
290
+ [
291
+ user_message ,
292
+ {"role" : message .role , "content" : message .content },
293
+ {
294
+ "role" : "user" ,
295
+ "content" : [
296
+ {
297
+ "type" : "tool_result" ,
298
+ "tool_use_id" : tool .id ,
299
+ "content" : [{"type" : "text" , "text" : "The weather is 73f" }],
300
+ }
301
+ ],
302
+ },
303
+ ]
304
+ ):
305
+ thread .track_message (item )
306
+
268
307
response = client .messages .create (
269
308
model = "claude-3-opus-20240229" ,
270
309
max_tokens = 1024 ,
310
+ parent = message_id ,
271
311
messages = [
272
312
user_message ,
273
313
{"role" : message .role , "content" : message .content },
@@ -286,6 +326,10 @@ def reconcilliation_tool_calls():
286
326
)
287
327
print (f"\n Final response: { response .model_dump_json (indent = 2 )} " )
288
328
329
+ for item in parse_message (response ):
330
+ thread .track_message (item )
331
+
332
+ return response
289
333
290
334
291
335
# sync_non_streaming()
@@ -304,4 +348,4 @@ def reconcilliation_tool_calls():
304
348
# tool_calls()
305
349
# asyncio.run(async_tool_calls())
306
350
307
- reconcilliation_tool_calls ()
351
+ reconcilliation_tool_calls ()
0 commit comments