Это функция API API ASP.NET для обработки чат-бота в реальном времени с локальной установкой QWEN2.5 с FastAPI.
Это текущий код, но StreamResponse не работает правильно.
Как оптимизировать это Код? < /p>
[Authorize]
[HttpPost("prompt")]
public async Task Prompt(PromptRequest request)
{
Response.ContentType = "text/plain";
Response.StatusCode = 200;
try
{
await HttpContext.Response.StartAsync(default).ConfigureAwait(true);
var userEmail = User.Claims.FirstOrDefault(c => c.Type.EndsWith("emailaddress"))?.Value;
if (string.IsNullOrEmpty(userEmail))
{
Response.StatusCode = (int)ErrorType.Unknown;
await Response.WriteAsync(ErrorType.Unknown.ToString());
return;
}
var user = await _context.Users
.Include(u => u.ChatbotHistories)
.Include(u => u.ChatbotCache)
.FirstOrDefaultAsync(u => u.EmailAddr == userEmail);
if (user == null)
{
Response.StatusCode = (int)ErrorType.UserNotFound;
await Response.WriteAsync(ErrorType.UserNotFound.ToString());
return;
}
var history = user.ChatbotHistories?.FirstOrDefault(c => c.ChatId == request.Id);
List his = history?.HistoryFilePath == null || user.ChatbotCache?.LastId == request.Id
? new List()
: (List)(JsonConvert.DeserializeObject(
System.IO.File.ReadAllText(history.HistoryFilePath)
) ?? new List());
var qwenAPI = await _context.EnvValues.AsNoTracking()
.FirstOrDefaultAsync(e => e.Type == EnvType.QWEN_API_URL);
var url = qwenAPI?.Value ?? "";
if (user.ChatbotCache != null && user.ChatbotCache.LastId != request.Id)
{
try { await _httpClient.GetAsync($"{url}/del-history?id={user.ChatbotCache.LastId}"); }
catch { }
}
var id = string.IsNullOrEmpty(request.Id) ? $"{Guid.NewGuid()}" : request.Id;
if (user.ChatbotCache == null)
{
await _context.ChatbotCaches.AddAsync(new ChatbotCache { User = user, LastId = id });
}
else
{
user.ChatbotCache.LastId = id;
}
await _context.SaveChangesAsync();
using var requestMessage = new HttpRequestMessage(HttpMethod.Post, url)
{
Content = new StringContent(JsonConvert.SerializeObject(new
{
Id = id,
Query = request.Query,
History = his,
Rag = request.Rag ?? false,
}), Encoding.UTF8, "application/json")
};
using var response = await _httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
if (!response.IsSuccessStatusCode)
{
Response.StatusCode = (int)ErrorType.QwenServerError;
await Response.WriteAsync(ErrorType.QwenServerError.ToString());
return;
}
var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream, Encoding.UTF8);
using var writer = new StreamWriter(Response.BodyWriter.AsStream(true), Encoding.UTF8, leaveOpen: true);
writer.AutoFlush = true;
string generatedText = "";
Console.WriteLine("Success");
char[] buffer = new char[1024];
while (!reader.EndOfStream)
{
int readCount = await reader.ReadAsync(buffer, 0, buffer.Length);
if (readCount > 0)
{
var chunk = new string(buffer, 0, readCount);
generatedText += chunk;
await writer.WriteAsync(chunk).ConfigureAwait(true);
await writer.FlushAsync(default(CancellationToken)).ConfigureAwait(true);
await Response.BodyWriter.FlushAsync(default(CancellationToken)).ConfigureAwait(true);
Console.Write(chunk);
}
}
reader.Close();
writer.Close();
await Response.CompleteAsync().ConfigureAwait(true);
his.Add((request.Query, generatedText));
var path = $"Chatbot/{id}.txt";
Directory.CreateDirectory(Path.GetDirectoryName(path) ?? "Chatbot");
System.IO.File.WriteAllText(path, JsonConvert.SerializeObject(his));
if (history == null)
{
await _context.ChatbotHistories.AddAsync(new ChatbotHistory
{
User = user,
ChatId = id,
Title = request.Query,
HistoryFilePath = path
});
}
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error prompting");
Response.StatusCode = (int)ErrorType.Unknown;
await Response.WriteAsync(ErrorType.Unknown.ToString());
}
}
< /code>
Основная задача - это функция Fetch Frontend не получает заголовок ответа изначально и получает только все формированные данные после всего сгенерированного текста.
Какие ошибки и решения для решения они?
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-asp-net
Как реализовать StreamResponse в asp.net ⇐ C#
Место общения программистов C#
1739354599
Anonymous
Это функция API API ASP.NET для обработки чат-бота в реальном времени с локальной установкой QWEN2.5 с FastAPI.
Это текущий код, но StreamResponse не работает правильно.
Как оптимизировать это Код? < /p>
[Authorize]
[HttpPost("prompt")]
public async Task Prompt(PromptRequest request)
{
Response.ContentType = "text/plain";
Response.StatusCode = 200;
try
{
await HttpContext.Response.StartAsync(default).ConfigureAwait(true);
var userEmail = User.Claims.FirstOrDefault(c => c.Type.EndsWith("emailaddress"))?.Value;
if (string.IsNullOrEmpty(userEmail))
{
Response.StatusCode = (int)ErrorType.Unknown;
await Response.WriteAsync(ErrorType.Unknown.ToString());
return;
}
var user = await _context.Users
.Include(u => u.ChatbotHistories)
.Include(u => u.ChatbotCache)
.FirstOrDefaultAsync(u => u.EmailAddr == userEmail);
if (user == null)
{
Response.StatusCode = (int)ErrorType.UserNotFound;
await Response.WriteAsync(ErrorType.UserNotFound.ToString());
return;
}
var history = user.ChatbotHistories?.FirstOrDefault(c => c.ChatId == request.Id);
List his = history?.HistoryFilePath == null || user.ChatbotCache?.LastId == request.Id
? new List()
: (List)(JsonConvert.DeserializeObject(
System.IO.File.ReadAllText(history.HistoryFilePath)
) ?? new List());
var qwenAPI = await _context.EnvValues.AsNoTracking()
.FirstOrDefaultAsync(e => e.Type == EnvType.QWEN_API_URL);
var url = qwenAPI?.Value ?? "";
if (user.ChatbotCache != null && user.ChatbotCache.LastId != request.Id)
{
try { await _httpClient.GetAsync($"{url}/del-history?id={user.ChatbotCache.LastId}"); }
catch { }
}
var id = string.IsNullOrEmpty(request.Id) ? $"{Guid.NewGuid()}" : request.Id;
if (user.ChatbotCache == null)
{
await _context.ChatbotCaches.AddAsync(new ChatbotCache { User = user, LastId = id });
}
else
{
user.ChatbotCache.LastId = id;
}
await _context.SaveChangesAsync();
using var requestMessage = new HttpRequestMessage(HttpMethod.Post, url)
{
Content = new StringContent(JsonConvert.SerializeObject(new
{
Id = id,
Query = request.Query,
History = his,
Rag = request.Rag ?? false,
}), Encoding.UTF8, "application/json")
};
using var response = await _httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
if (!response.IsSuccessStatusCode)
{
Response.StatusCode = (int)ErrorType.QwenServerError;
await Response.WriteAsync(ErrorType.QwenServerError.ToString());
return;
}
var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream, Encoding.UTF8);
using var writer = new StreamWriter(Response.BodyWriter.AsStream(true), Encoding.UTF8, leaveOpen: true);
writer.AutoFlush = true;
string generatedText = "";
Console.WriteLine("Success");
char[] buffer = new char[1024];
while (!reader.EndOfStream)
{
int readCount = await reader.ReadAsync(buffer, 0, buffer.Length);
if (readCount > 0)
{
var chunk = new string(buffer, 0, readCount);
generatedText += chunk;
await writer.WriteAsync(chunk).ConfigureAwait(true);
await writer.FlushAsync(default(CancellationToken)).ConfigureAwait(true);
await Response.BodyWriter.FlushAsync(default(CancellationToken)).ConfigureAwait(true);
Console.Write(chunk);
}
}
reader.Close();
writer.Close();
await Response.CompleteAsync().ConfigureAwait(true);
his.Add((request.Query, generatedText));
var path = $"Chatbot/{id}.txt";
Directory.CreateDirectory(Path.GetDirectoryName(path) ?? "Chatbot");
System.IO.File.WriteAllText(path, JsonConvert.SerializeObject(his));
if (history == null)
{
await _context.ChatbotHistories.AddAsync(new ChatbotHistory
{
User = user,
ChatId = id,
Title = request.Query,
HistoryFilePath = path
});
}
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error prompting");
Response.StatusCode = (int)ErrorType.Unknown;
await Response.WriteAsync(ErrorType.Unknown.ToString());
}
}
< /code>
Основная задача - это функция Fetch Frontend не получает заголовок ответа изначально и получает только все формированные данные после всего сгенерированного текста.
Какие ошибки и решения для решения они?
Подробнее здесь: [url]https://stackoverflow.com/questions/79432637/how-to-implement-streamresponse-in-asp-net[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия