-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Description
问题描述
从 v1.1.42 升级到 v1.1.55+ 后,流式事件的 GetResponse() 和 GetText().GetText() 对特定事件返回 nil 或空值。编译无错误,运行时静默失败。
影响版本
- 正常: v1.1.42
- 异常: v1.1.55, v1.2.2
复现步骤
使用 v1.1.42 官方流式示例 (example/responses/basic/main.go) 的写法:
resp, err := client.CreateResponsesStream(ctx, req)
for {
event, err := resp.Recv()
if err == io.EOF { break }
// v1.1.42 正常,v1.1.55+ 返回 nil
if responseEvent := event.GetResponse(); responseEvent != nil {
responseId = responseEvent.GetResponse().GetId()
}
}
func handleEvent(event *responses.Event) {
case responses.EventType_response_output_text_done.String():
// v1.1.42 正常,v1.1.55+ 返回空字符串
fmt.Printf("text: %s\n", event.GetText().GetText())
}预期行为
GetResponse() 对 response_completed、response_failed、response_incomplete、response_in_progress 事件返回有效数据(与 v1.1.42 一致)。
实际行为
v1.1.55+ 中,GetResponse() 仅对 response_created 事件有效,其他事件返回 nil。
根因
oneof 实现方式变更:
v1.1.42:
case EventType_response_completed:
oneof := Event_Response{} // 共用类型v1.1.55+:
case EventType_response_completed:
oneof := Event_ResponseCompleted{} // 专用类型迁移方案
| 事件 | v1.1.42 | v1.1.55+ |
|---|---|---|
response_completed |
e.GetResponse().GetResponse() |
e.GetResponseCompleted().GetResponse() |
response_failed |
e.GetResponse().GetResponse() |
e.GetResponseFailed().GetResponse() |
response_output_text_done |
e.GetText().GetText() |
e.GetTextDone().GetText() |
环境
- Go: 1.23.4
- OS: macOS (darwin/arm64)
Metadata
Metadata
Assignees
Labels
No labels