OpenAI-API-dotnet icon indicating copy to clipboard operation
OpenAI-API-dotnet copied to clipboard

StreamResponseFromChatbotAsync System.ArgumentException:

Open vb2250158 opened this issue 1 year ago • 4 comments

            var chat = api.Chat.CreateConversation();
            chat.AppendUserInput("Hi!");

            await chat.StreamResponseFromChatbotAsync(res =>
            {
                Console.Write(res);
            });

未经处理的异常: System.ArgumentException: 流不可读。 在 System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen) 在 System.IO.StreamReader..ctor(Stream stream) 在 OpenAI_API.EndpointBase.<HttpStreamingRequest>d__161.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore1.GetResult(Int16 token) 在 OpenAI_API.EndpointBase.<HttpStreamingRequest>d__161.System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult(Int16 token) 在 OpenAI_API.Chat.Conversation.<StreamResponseEnumerableFromChatbotAsync>d__26.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 OpenAI_API.Chat.Conversation.<StreamResponseEnumerableFromChatbotAsync>d__26.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore1.GetResult(Int16 token) 在 OpenAI_API.Chat.Conversation.<StreamResponseEnumerableFromChatbotAsync>d__26.System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult(Int16 token) 在 OpenAI_API.Chat.Conversation.<StreamResponseFromChatbotAsync>d__24.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 OpenAI_API.Chat.Conversation.<StreamResponseFromChatbotAsync>d__24.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 GPTTest.Program.<>c.<<Main>b__0_0>d.MoveNext() 位置 C:\Users\Administrator\RiderProjects\GPTTest\GPTTest\Program.cs:行号 20 --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 GPTTest.Program.Main(String[] args) 位置 C:\Users\Administrator\RiderProjects\GPTTest\GPTTest\Program.cs:行号 15 请按任意键继续. . .

vb2250158 avatar Apr 21 '23 07:04 vb2250158

What I'd like to know is how to catch an error and handle it gracefully. I'm just getting a plain 500 error returned with no detail.

var chat = api.Chat.CreateConversation();
chat.AppendUserInput("How to make a hamburger?");
await foreach (var res in chat.StreamResponseEnumerableFromChatbotAsync())
{
	 yield return res;
}

If I pass too long a string it throws an error, fair enough. But how to catch it in the example above?

lunar-safari avatar Apr 21 '23 07:04 lunar-safari

How does StreamResponseFromChatbotAsync work? After I call it, the API only returns the first word, await chat.StreamResponseFromChatbotAsync The code page after the line does not run and is blocked.

vb2250158 avatar Apr 21 '23 09:04 vb2250158

Snipaste_2023-04-21_18-26-25

vb2250158 avatar Apr 21 '23 10:04 vb2250158

How does StreamResponseFromChatbotAsync work? After I call it, the API only returns the first word, await chat.StreamResponseFromChatbotAsync The code page after the line does not run and is blocked.

This article helped me a lot. It's quite fiddly though! https://medium.com/@markotny97/streaming-iasyncenumerable-to-rxjs-front-end-8eb5323ca282

lunar-safari avatar Apr 21 '23 11:04 lunar-safari