Skip to content
Open
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
12 changes: 10 additions & 2 deletions docs/setup/local-cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ func main() {

session, _ := client.CreateSession(ctx, &copilot.SessionConfig{Model: "gpt-4.1"})
response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: "Hello!"})
fmt.Println(*response.Data.Content)
if response != nil {
if d, ok := response.Data.(*copilot.AssistantMessageData); ok {
fmt.Println(d.Content)
}
}
}
```
<!-- /docs-validate: hidden -->
Expand All @@ -115,7 +119,11 @@ defer client.Stop()

session, _ := client.CreateSession(ctx, &copilot.SessionConfig{Model: "gpt-4.1"})
response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: "Hello!"})
fmt.Println(*response.Data.Content)
if response != nil {
if d, ok := response.Data.(*copilot.AssistantMessageData); ok {
fmt.Println(d.Content)
}
}
```

</details>
Expand Down
27 changes: 20 additions & 7 deletions python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ python chat.py

```python
import asyncio
from typing import cast

from copilot import CopilotClient
from copilot.session import PermissionHandler
from copilot.generated.session_events import AssistantMessageData

async def main():
# Client automatically starts on enter and cleans up on exit
Expand All @@ -38,7 +40,7 @@ async def main():

def on_event(event):
if event.type.value == "assistant.message":
print(event.data.content)
print(cast(AssistantMessageData, event.data).content)
elif event.type.value == "session.idle":
done.set()

Expand All @@ -57,7 +59,10 @@ If you need more control over the lifecycle, you can call `start()`, `stop()`, a

```python
import asyncio
from typing import cast

from copilot import CopilotClient
from copilot.generated.session_events import AssistantMessageData
from copilot.session import PermissionHandler

async def main():
Expand All @@ -74,7 +79,7 @@ async def main():

def on_event(event):
if event.type.value == "assistant.message":
print(event.data.content)
print(cast(AssistantMessageData, event.data).content)
elif event.type.value == "session.idle":
done.set()

Expand Down Expand Up @@ -333,7 +338,15 @@ Enable streaming to receive assistant response chunks as they're generated:

```python
import asyncio
from typing import cast

from copilot import CopilotClient
from copilot.generated.session_events import (
AssistantMessageData,
AssistantMessageDeltaData,
AssistantReasoningData,
AssistantReasoningDeltaData,
)
from copilot.session import PermissionHandler

async def main():
Expand All @@ -350,20 +363,20 @@ async def main():
match event.type.value:
case "assistant.message_delta":
# Streaming message chunk - print incrementally
delta = event.data.delta_content or ""
delta = cast(AssistantMessageDeltaData, event.data).delta_content or ""
print(delta, end="", flush=True)
case "assistant.reasoning_delta":
# Streaming reasoning chunk (if model supports reasoning)
delta = event.data.delta_content or ""
delta = cast(AssistantReasoningDeltaData, event.data).delta_content or ""
print(delta, end="", flush=True)
case "assistant.message":
# Final message - complete content
print("\n--- Final message ---")
print(event.data.content)
print(cast(AssistantMessageData, event.data).content)
case "assistant.reasoning":
# Final reasoning content (if model supports reasoning)
print("--- Reasoning ---")
print(event.data.content)
print(cast(AssistantReasoningData, event.data).content)
case "session.idle":
# Session finished processing
done.set()
Expand Down
Loading
Loading