Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions dotnet/src/Generated/SessionEvents.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions go/generated_session_events.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 31 additions & 6 deletions go/internal/e2e/streaming_fidelity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package e2e

import (
"strings"
"sync"
"testing"

copilot "github.com/github/copilot-sdk/go"
Expand All @@ -25,18 +26,26 @@ func TestStreamingFidelity(t *testing.T) {
}

var events []copilot.SessionEvent
var mu sync.Mutex
session.On(func(event copilot.SessionEvent) {
mu.Lock()
events = append(events, event)
mu.Unlock()
})

_, err = session.SendAndWait(t.Context(), copilot.MessageOptions{Prompt: "Count from 1 to 5, separated by commas."})
if err != nil {
t.Fatalf("Failed to send message: %v", err)
}

mu.Lock()
snapshot := make([]copilot.SessionEvent, len(events))
copy(snapshot, events)
mu.Unlock()

// Should have streaming deltas before the final message
var deltaEvents []copilot.SessionEvent
for _, e := range events {
for _, e := range snapshot {
if e.Type == "assistant.message_delta" {
deltaEvents = append(deltaEvents, e)
}
Expand All @@ -54,7 +63,7 @@ func TestStreamingFidelity(t *testing.T) {

// Should still have a final assistant.message
hasAssistantMessage := false
for _, e := range events {
for _, e := range snapshot {
if e.Type == "assistant.message" {
hasAssistantMessage = true
break
Expand All @@ -67,7 +76,7 @@ func TestStreamingFidelity(t *testing.T) {
// Deltas should come before the final message
firstDeltaIdx := -1
lastAssistantIdx := -1
for i, e := range events {
for i, e := range snapshot {
if e.Type == "assistant.message_delta" && firstDeltaIdx == -1 {
firstDeltaIdx = i
}
Expand All @@ -92,18 +101,26 @@ func TestStreamingFidelity(t *testing.T) {
}

var events []copilot.SessionEvent
var mu sync.Mutex
session.On(func(event copilot.SessionEvent) {
mu.Lock()
events = append(events, event)
mu.Unlock()
})

_, err = session.SendAndWait(t.Context(), copilot.MessageOptions{Prompt: "Say 'hello world'."})
if err != nil {
t.Fatalf("Failed to send message: %v", err)
}

mu.Lock()
snapshot := make([]copilot.SessionEvent, len(events))
copy(snapshot, events)
mu.Unlock()

// No deltas when streaming is off
var deltaEvents []copilot.SessionEvent
for _, e := range events {
for _, e := range snapshot {
if e.Type == "assistant.message_delta" {
deltaEvents = append(deltaEvents, e)
}
Expand All @@ -114,7 +131,7 @@ func TestStreamingFidelity(t *testing.T) {

// But should still have a final assistant.message
var assistantEvents []copilot.SessionEvent
for _, e := range events {
for _, e := range snapshot {
if e.Type == "assistant.message" {
assistantEvents = append(assistantEvents, e)
}
Expand Down Expand Up @@ -153,8 +170,11 @@ func TestStreamingFidelity(t *testing.T) {
}

var events []copilot.SessionEvent
var mu sync.Mutex
session2.On(func(event copilot.SessionEvent) {
mu.Lock()
events = append(events, event)
mu.Unlock()
})

answer, err := session2.SendAndWait(t.Context(), copilot.MessageOptions{Prompt: "Now if you double that, what do you get?"})
Expand All @@ -167,9 +187,14 @@ func TestStreamingFidelity(t *testing.T) {
t.Errorf("Expected answer to contain '18', got %v", answer)
}

mu.Lock()
snapshot := make([]copilot.SessionEvent, len(events))
copy(snapshot, events)
mu.Unlock()

// Should have streaming deltas before the final message
var deltaEvents []copilot.SessionEvent
for _, e := range events {
for _, e := range snapshot {
if e.Type == "assistant.message_delta" {
deltaEvents = append(deltaEvents, e)
}
Expand Down
56 changes: 28 additions & 28 deletions nodejs/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion nodejs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
"author": "GitHub",
"license": "MIT",
"dependencies": {
"@github/copilot": "^1.0.39",
"@github/copilot": "^1.0.40-0",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
},
Expand Down
2 changes: 1 addition & 1 deletion nodejs/samples/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 21 additions & 1 deletion nodejs/src/generated/session-events.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading