(t *testing.T)
| 319 | } |
| 320 | |
| 321 | func TestSamplingWithTools_ParallelToolCalls(t *testing.T) { |
| 322 | ctx := context.Background() |
| 323 | ct, st := NewInMemoryTransports() |
| 324 | |
| 325 | result := &CreateMessageWithToolsResult{ |
| 326 | Model: "test-model", |
| 327 | Role: "assistant", |
| 328 | Content: []Content{ |
| 329 | &ToolUseContent{ID: "call_1", Name: "weather", Input: map[string]any{"city": "SF"}}, |
| 330 | &ToolUseContent{ID: "call_2", Name: "weather", Input: map[string]any{"city": "NY"}}, |
| 331 | }, |
| 332 | StopReason: "toolUse", |
| 333 | } |
| 334 | // Client returns parallel tool use results |
| 335 | client := NewClient(testImpl, &ClientOptions{ |
| 336 | CreateMessageWithToolsHandler: func(_ context.Context, req *CreateMessageWithToolsRequest) (*CreateMessageWithToolsResult, error) { |
| 337 | return result, nil |
| 338 | }, |
| 339 | Capabilities: &ClientCapabilities{ |
| 340 | Sampling: &SamplingCapabilities{Tools: &SamplingToolsCapabilities{}}, |
| 341 | }, |
| 342 | }) |
| 343 | |
| 344 | server := NewServer(testImpl, nil) |
| 345 | ss, err := server.Connect(ctx, st, nil) |
| 346 | if err != nil { |
| 347 | t.Fatal(err) |
| 348 | } |
| 349 | defer ss.Close() |
| 350 | |
| 351 | cs, err := client.Connect(ctx, ct, nil) |
| 352 | if err != nil { |
| 353 | t.Fatal(err) |
| 354 | } |
| 355 | defer cs.Close() |
| 356 | |
| 357 | gotResult, err := ss.CreateMessageWithTools(ctx, &CreateMessageWithToolsParams{ |
| 358 | MaxTokens: 1000, |
| 359 | Messages: []*SamplingMessageV2{ |
| 360 | {Role: "user", Content: []Content{&TextContent{Text: "Weather in SF and NY"}}}, |
| 361 | }, |
| 362 | Tools: []*Tool{ |
| 363 | {Name: "weather", InputSchema: map[string]any{"type": "object"}}, |
| 364 | }, |
| 365 | }) |
| 366 | if err != nil { |
| 367 | t.Fatalf("CreateMessageWithTools() error = %v", err) |
| 368 | } |
| 369 | |
| 370 | if diff := cmp.Diff(result, gotResult); diff != "" { |
| 371 | t.Errorf("CreateMessageWithToolsResult mismatch (-want +got):\n%s", diff) |
| 372 | } |
| 373 | } |
| 374 | |
| 375 | func TestNewClient_BothHandlersPanics(t *testing.T) { |
| 376 | defer func() { |
nothing calls this directly
no test coverage detected
searching dependent graphs…