Skip to content
This repository was archived by the owner on Feb 14, 2025. It is now read-only.

Commit 06defc2

Browse files
committed
feat: code cleanup and tested agent, reconciliation and threads
Signed-off-by: Thraize <[email protected]>
1 parent 90a713e commit 06defc2

File tree

2 files changed

+180
-84
lines changed

2 files changed

+180
-84
lines changed

examples/anthrophic.py

+71-27
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
from anthropic import Anthropic, AsyncAnthropic
44

55
import lunary
6-
from lunary.anthrophic import monitor, parse_message
6+
from lunary.anthrophic import monitor, parse_message, agent
7+
78

89
def sync_non_streaming():
910
client = Anthropic()
1011
monitor(client)
1112

1213
message = client.messages.create(
1314
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+
],
1821
model="claude-3-opus-20240229",
1922
)
2023
print(message.content)
@@ -25,10 +28,12 @@ async def async_non_streaming():
2528

2629
message = await client.messages.create(
2730
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+
],
3237
model="claude-3-opus-20240229",
3338
)
3439
print(message.content)
@@ -39,10 +44,12 @@ def sync_streaming():
3944

4045
stream = client.messages.create(
4146
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+
],
4653
model="claude-3-opus-20240229",
4754
stream=True,
4855
)
@@ -55,10 +62,12 @@ async def async_streaming():
5562

5663
stream = await client.messages.create(
5764
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+
],
6271
model="claude-3-opus-20240229",
6372
stream=True,
6473
)
@@ -72,15 +81,18 @@ def sync_stream_helper():
7281

7382
with client.messages.stream(
7483
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+
],
7990
model="claude-3-opus-20240229",
8091
) as stream:
8192
for event in stream:
8293
print(event)
8394

95+
8496
async def async_stream_helper():
8597
client = monitor(AsyncAnthropic())
8698

@@ -108,10 +120,12 @@ def extra_arguments():
108120

109121
message = client.messages.create(
110122
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+
],
115129
model="claude-3-opus-20240229",
116130
tags=["translate"],
117131
user_id="user123",
@@ -144,6 +158,7 @@ def anthrophic_bedrock():
144158
)
145159
print(message)
146160

161+
147162
def tool_calls():
148163
from anthropic import Anthropic
149164
from anthropic.types import ToolParam, MessageParam
@@ -210,7 +225,10 @@ async def async_tool_calls():
210225
"input_schema": {
211226
"type": "object",
212227
"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+
},
214232
"unit": {
215233
"type": "string",
216234
"enum": ["celsius", "fahrenheit"],
@@ -229,6 +247,7 @@ async def async_tool_calls():
229247
print(f"snapshot: {event.snapshot}")
230248

231249

250+
@agent("DemoAgent")
232251
def reconcilliation_tool_calls():
233252
from anthropic import Anthropic
234253
from anthropic.types import ToolParam, MessageParam
@@ -259,15 +278,36 @@ def reconcilliation_tool_calls():
259278
max_tokens=1024,
260279
messages=[user_message],
261280
tools=tools,
281+
parent=message_id,
262282
)
263283
print(f"Initial response: {message.model_dump_json(indent=2)}")
264284

265285
assert message.stop_reason == "tool_use"
266286

267287
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+
268307
response = client.messages.create(
269308
model="claude-3-opus-20240229",
270309
max_tokens=1024,
310+
parent=message_id,
271311
messages=[
272312
user_message,
273313
{"role": message.role, "content": message.content},
@@ -286,6 +326,10 @@ def reconcilliation_tool_calls():
286326
)
287327
print(f"\nFinal response: {response.model_dump_json(indent=2)}")
288328

329+
for item in parse_message(response):
330+
thread.track_message(item)
331+
332+
return response
289333

290334

291335
# sync_non_streaming()
@@ -304,4 +348,4 @@ def reconcilliation_tool_calls():
304348
# tool_calls()
305349
# asyncio.run(async_tool_calls())
306350

307-
reconcilliation_tool_calls()
351+
reconcilliation_tool_calls()

0 commit comments

Comments
 (0)