(t *testing.T)
| 95 | } |
| 96 | |
| 97 | func TestSamplingWithTools_ToolResult(t *testing.T) { |
| 98 | ctx := context.Background() |
| 99 | ct, st := NewInMemoryTransports() |
| 100 | |
| 101 | // Track messages received by client |
| 102 | var gotParams *CreateMessageParams |
| 103 | |
| 104 | client := NewClient(testImpl, &ClientOptions{ |
| 105 | CreateMessageHandler: func(_ context.Context, req *CreateMessageRequest) (*CreateMessageResult, error) { |
| 106 | gotParams = req.Params |
| 107 | return &CreateMessageResult{ |
| 108 | Model: "test-model", |
| 109 | Role: "assistant", |
| 110 | Content: &TextContent{Text: "The result is 3"}, |
| 111 | }, nil |
| 112 | }, |
| 113 | Capabilities: &ClientCapabilities{ |
| 114 | Sampling: &SamplingCapabilities{Tools: &SamplingToolsCapabilities{}}, |
| 115 | }, |
| 116 | }) |
| 117 | |
| 118 | server := NewServer(testImpl, nil) |
| 119 | ss, err := server.Connect(ctx, st, nil) |
| 120 | if err != nil { |
| 121 | t.Fatal(err) |
| 122 | } |
| 123 | defer ss.Close() |
| 124 | |
| 125 | cs, err := client.Connect(ctx, ct, nil) |
| 126 | if err != nil { |
| 127 | t.Fatal(err) |
| 128 | } |
| 129 | defer cs.Close() |
| 130 | |
| 131 | params := &CreateMessageParams{ |
| 132 | MaxTokens: 1000, |
| 133 | Messages: []*SamplingMessage{ |
| 134 | {Role: "user", Content: &TextContent{Text: "Calculate 1+2"}}, |
| 135 | {Role: "assistant", Content: &ToolUseContent{ |
| 136 | ID: "tool_1", |
| 137 | Name: "calculator", |
| 138 | Input: map[string]any{"x": 1.0, "y": 2.0}, |
| 139 | }}, |
| 140 | {Role: "user", Content: &ToolResultContent{ |
| 141 | ToolUseID: "tool_1", |
| 142 | Content: []Content{&TextContent{Text: "3"}}, |
| 143 | }}, |
| 144 | }, |
| 145 | } |
| 146 | _, err = ss.CreateMessage(ctx, params) |
| 147 | if err != nil { |
| 148 | t.Fatalf("CreateMessage() error = %v", err) |
| 149 | } |
| 150 | |
| 151 | if diff := cmp.Diff(params, gotParams); diff != "" { |
| 152 | t.Errorf("CreateMessageParams mismatch (-want +got):\n%s", diff) |
| 153 | } |
| 154 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…