MCPcopy Index your code
hub / github.com/docker/docker-agent / streamCompletion

Method streamCompletion

cmd/wasm/runtime_wasm.go:431–530  ·  view source on GitHub ↗

streamCompletion runs one streaming completion call and emits deltas.

(ctx context.Context, prov provider.Provider, messages []chat.Message, agentTools []tools.Tool)

Source from the content-addressed store, hash-verified

429
430// streamCompletion runs one streaming completion call and emits deltas.
431func (rt *wasmRuntime) streamCompletion(ctx context.Context, prov provider.Provider, messages []chat.Message, agentTools []tools.Tool) (*wasmStreamResult, error) {
432 stream, err := prov.CreateChatCompletionStream(ctx, messages, agentTools)
433 if err != nil {
434 return nil, fmt.Errorf("opening stream: %w", err)
435 }
436 defer stream.Close()
437
438 var content strings.Builder
439 var reasoning strings.Builder
440 var toolCalls []tools.ToolCall
441 var usage *chat.Usage
442 var finishReason chat.FinishReason
443
444 toolCallIndex := make(map[string]int)
445
446 for {
447 resp, err := stream.Recv()
448 if errors.Is(err, io.EOF) {
449 break
450 }
451 if err != nil {
452 return nil, fmt.Errorf("reading stream: %w", err)
453 }
454
455 if resp.Usage != nil {
456 usage = resp.Usage
457 }
458
459 for _, choice := range resp.Choices {
460 // Tool call deltas.
461 if len(choice.Delta.ToolCalls) > 0 {
462 for _, delta := range choice.Delta.ToolCalls {
463 idx, exists := toolCallIndex[delta.ID]
464 if !exists {
465 idx = len(toolCalls)
466 toolCallIndex[delta.ID] = idx
467 toolCalls = append(toolCalls, tools.ToolCall{
468 ID: delta.ID,
469 Type: delta.Type,
470 })
471 }
472 tc := &toolCalls[idx]
473 if delta.Type != "" {
474 tc.Type = delta.Type
475 }
476 if delta.Function.Name != "" {
477 tc.Function.Name = delta.Function.Name
478 }
479 if delta.Function.Arguments != "" {
480 tc.Function.Arguments += delta.Function.Arguments
481 }
482
483 // Emit partial tool call event.
484 if tc.Function.Name != "" {
485 rt.emitEvent(map[string]any{
486 "type": "tool_call_delta",
487 "id": tc.ID,
488 "name": tc.Function.Name,

Callers 1

streamWithFallbackMethod · 0.95

Calls 5

emitEventMethod · 0.95
CloseMethod · 0.65
RecvMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected