Блазор потоковая передача и обновление пользовательского интерфейса и обновление пользовательского интерфейсаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Блазор потоковая передача и обновление пользовательского интерфейса и обновление пользовательского интерфейса

Сообщение Anonymous »

У меня есть приложение Blazor Hosted Webassembly в соответствии с .net8. Это означает, что у меня есть клиент, сервер и общие проекты. /p>

Код: Выделить всё

[HttpPost, Route("/api/chat/communicate_async")]
public async IAsyncEnumerable DoCommunicateAsync(ChatRequest chat)
{
IAsyncEnumerable results = _IChat.DoCommunicateAsync(chat);
await foreach (var result in results)
{
yield return result;
}
}
< /code>
в клиенту, на странице бритвы у меня есть следующий код, чтобы каждый цикл итерации на контроллере был представлен в пользовательском интерфейсе: < /p>
CancellationToken cancellationToken = GetCancellationToken();
var requestContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(chatRequest), Encoding.UTF8, "application/json");
using var requestMessage = new HttpRequestMessage(HttpMethod.Post, "api/chat/communicate_async")
{
Content = requestContent
};
requestMessage.SetBrowserResponseStreamingEnabled(true); // Enable response streaming

using var response = await Http.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);

using Stream stream = await response.Content.ReadAsStreamAsync(cancellationToken);
var lines = System.Text.Json.JsonSerializer.DeserializeAsyncEnumerable(
stream,
new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
DefaultBufferSize = 128
},
cancellationToken);
await foreach (string? line in lines)
{
chatResponse.response += line;
StateHasChanged();
}
< /code>
Я также пробовал различный подход к клиенту, чтобы сделать каждую итерацию цикла на контроллере в UI: < /p>
CancellationToken cancellationToken = GetCancellationToken();
chatResponse.response = string.Empty;
var requestContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(chatRequest), Encoding.UTF8, "application/json");
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "api/chat/communicate_async")
{
Content = requestContent
};
//requestMessage.Headers.Accept.Append(new MediaTypeWithQualityHeaderValue("application/stream+json"));
requestMessage.SetBrowserResponseStreamingEnabled(true); // Enable response streaming

var response = await Http.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
IAsyncEnumerable results = response.Content.ReadFromJsonAsAsyncEnumerable();
await foreach (string? result in results)
{
chatResponse.response += result;
StateHasChanged();
}
< /code>
Клиент (с двумя подходами) кажется, что ожидает, пока все итерации не будут завершены в контроллере, чтобы сделать цикл JSON и обновить пользовательский интерфейс. До сих пор я прочитал много статей и пробовал разные вещи здесь: https://www.tpeczek.com/2021/07/aspnet-core-6-and-aasyncenumerable.html
и отсюда: Streaming Lines текста по HTTP с Blazor с использованием iAsyncenumerable
уже перепробовано. Обновление 2024/05/28  
кажется, что приведенный ниже код, который генерирует части предложения, хотя он итерат, хотя исинометабельный, кажется, не транслируется на клиенте (это из Местный LLM из библиотеки Llamasharp: < /p>
await foreach (string? result in session.ChatAsync(new ChatHistory.Message(AuthorRole.User, chat.prompt), inferenceParams, cancellationToken))
{
if (result != null)
{ yield return result; }
}
< /code>
Пока кажется ниже код, который транслируется, хотя клиент из библиотеки Azure.ai: < /p>
await foreach (StreamingChatCompletionsUpdate chatUpdate in client.GetChatCompletionsStreaming(completionsOptions))
{
string? result = chatUpdate.ContentUpdate;
if (result != null)
{ yield return result; }
}
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -ui-update
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Потоковая потоковая передача видео с камеры FLIR с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Потоковая потоковая передача Polars: Parquet Parquet на основе Shift (-1)
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Блазор унаследованное обновление компонентов внедренные свойства класса
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Потоковая передача вариантов использования в pyspark
    Гость » » в форуме Python
    0 Ответы
    65 Просмотры
    Последнее сообщение Гость
  • Потоковая передача вариантов использования в pyspark
    Гость » » в форуме Python
    0 Ответы
    62 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»