55 "log"
66 "os"
77 "os/exec"
8+ "strings"
89
910 "github.com/anthropics/anthropic-sdk-go"
1011 "github.com/anthropics/anthropic-sdk-go/option"
@@ -64,24 +65,35 @@ func main() {
6465 anthropicClient := anthropic .NewClient (
6566 option .WithAPIKey (apiKey ),
6667 )
68+ messages := []anthropic.MessageParam {}
69+ if len (os .Args ) <= 1 {
70+ log .Fatal ("Usage: go run main.go <content>" )
71+ return
72+ }
73+ content := strings .Join (os .Args [1 :], " " )
74+
75+ messages = append (messages , anthropic .NewUserMessage (anthropic .NewTextBlock (content )))
6776 message , err := anthropicClient .Messages .New (ctx , anthropic.MessageNewParams {
6877 Model : anthropic .ModelClaude_3_Haiku_20240307 ,
6978 MaxTokens : 256 ,
70- Messages : []anthropic.MessageParam {
71- anthropic .NewUserMessage (anthropic .NewTextBlock ("Give me all failed agents" )),
72- },
73- Tools : claudeTools ,
79+ Messages : messages ,
80+ Tools : claudeTools ,
7481 })
7582 if err != nil {
7683 log .Fatal (err )
7784 }
7885
86+ assistantMessageContent := []anthropic.ContentBlockParamUnion {}
87+ toolResults := []anthropic.ContentBlockParamUnion {}
88+
7989 for _ , block := range message .Content {
8090 switch block := block .AsAny ().(type ) {
8191 case anthropic.TextBlock :
8292 println (block .Text )
83- println ( )
93+ assistantMessageContent = append ( assistantMessageContent , anthropic . NewTextBlock ( block . Text ) )
8494 case anthropic.ToolUseBlock :
95+ assistantMessageContent = append (assistantMessageContent , anthropic .NewToolUseBlock (block .ID , block .Input , block .Name ))
96+
8597 params := & mcp.CallToolParams {
8698 Name : block .Name ,
8799 Arguments : block .Input ,
@@ -93,10 +105,41 @@ func main() {
93105 if res .IsError {
94106 log .Fatal ("tool failed" )
95107 }
108+
96109 for _ , c := range res .Content {
97110 log .Print (c .(* mcp.TextContent ).Text )
98111 println ()
99112 }
113+
114+ toolResults = append (toolResults , anthropic .NewToolResultBlock (
115+ block .ID ,
116+ res .Content [0 ].(* mcp.TextContent ).Text ,
117+ false ,
118+ ))
119+ }
120+ }
121+
122+ if len (toolResults ) > 0 {
123+
124+ messages = append (messages , anthropic .NewAssistantMessage (assistantMessageContent ... ))
125+
126+ messages = append (messages , anthropic .NewUserMessage (toolResults ... ))
127+
128+ message , err = anthropicClient .Messages .New (ctx , anthropic.MessageNewParams {
129+ Model : anthropic .ModelClaude_3_Haiku_20240307 ,
130+ MaxTokens : 256 ,
131+ Messages : messages ,
132+ Tools : claudeTools ,
133+ })
134+ if err != nil {
135+ log .Fatal (err )
136+ }
137+
138+ for _ , block := range message .Content {
139+ if textBlock , ok := block .AsAny ().(anthropic.TextBlock ); ok {
140+ println ("\n Final response:" )
141+ println (textBlock .Text )
142+ }
100143 }
101144 }
102145}
0 commit comments