using LLama.Common; using LLama.WebAPI.Models; using LLama.WebAPI.Services; using Microsoft.AspNetCore.Mvc; using System; namespace LLama.WebAPI.Controllers { [ApiController] [Route("[controller]")] public class ChatController : ControllerBase { private readonly ILogger _logger; public ChatController(ILogger logger) { _logger = logger; } [HttpPost("Send")] public Task SendMessage([FromBody] SendMessageInput input, [FromServices] StatefulChatService _service) { return _service.Send(input); } [HttpPost("Send/Stream")] public async Task SendMessageStream([FromBody] SendMessageInput input, [FromServices] StatefulChatService _service, CancellationToken cancellationToken) { Response.ContentType = "text/event-stream"; await foreach (var r in _service.SendStream(input)) { await Response.WriteAsync("data:" + r + "\n\n", cancellationToken); await Response.Body.FlushAsync(cancellationToken); } await Response.CompleteAsync(); } [HttpPost("History")] public async Task SendHistory([FromBody] HistoryInput input, [FromServices] StatelessChatService _service) { var history = new ChatHistory(); var messages = input.Messages.Select(m => new ChatHistory.Message(Enum.Parse(m.Role), m.Content)); history.Messages.AddRange(messages); return await _service.SendAsync(history); } } }