tmc / langchaingo

LangChain for Go, the easiest way to write LLM-based programs in Go
https://tmc.github.io/langchaingo/
MIT License
4.39k stars 597 forks source link

接收消息影响整个应用退出 #827

Open androidsr opened 4 months ago

androidsr commented 4 months ago

image 微信截图_20240509221349 这代码导致程序退出。。。。

func parseStreamingChatResponse(ctx context.Context, r http.Response, payload ChatRequest) (*ChatCompletionResponse, error) { //nolint:cyclop,lll scanner := bufio.NewScanner(r.Body) responseChan := make(chan StreamedChatResponsePayload) go func() { defer close(responseChan) for scanner.Scan() { line := scanner.Text() if line == "" { continue } if !strings.HasPrefix(line, "data:") { log.Fatalf("unexpected line: %v", line) } data := strings.TrimPrefix(line, "data: ") if data == "[DONE]" { return } var streamPayload StreamedChatResponsePayload err := json.NewDecoder(bytes.NewReader([]byte(data))).Decode(&streamPayload) if err != nil { log.Fatalf("failed to decode stream payload: %v", err) } responseChan <- streamPayload } if err := scanner.Err(); err != nil { log.Println("issue scanning response:", err) } }() // Combine response return combineStreamingChatResponse(ctx, payload, responseChan) }

wangjiancn commented 4 months ago

same as https://github.com/tmc/langchaingo/issues/822

androidsr commented 4 months ago

github.com/tmc/langchaingo@v0.1.10/llms/openai/internal/openaiclient/chat.go:379 if !strings.HasPrefix(line, "data:") { log.Fatalf("unexpected line: %v", line) }

func Fatalf(format string, v ...any) { std.Output(2, fmt.Sprintf(format, v...)) os.Exit(1) } 直接退出了整个应用程序。不能这么干

androidsr commented 4 months ago

image 另外收到一个ping的样子。