using BotSharp.Abstraction.Agents.Enums; using BotSharp.Abstraction.Agents.Models; using BotSharp.Abstraction.ApiAdapters; using BotSharp.Abstraction.Conversations.Models; using BotSharp.Abstraction.Instructs; using BotSharp.Abstraction.Instructs.Models; using BotSharp.Core.Infrastructures; using BotSharp.OpenAPI.ViewModels.Instructs; namespace BotSharp.OpenAPI.Controllers; [Authorize] [ApiController] public class InstructModeController : ControllerBase, IApiAdapter { private readonly IServiceProvider _services; public InstructModeController(IServiceProvider services) { _services = services; } [HttpPost("/instruct/{agentId}")] public async Task InstructCompletion([FromRoute] string agentId, [FromBody] InstructMessageModel input) { var instructor = _services.GetRequiredService(); var agentService = _services.GetRequiredService(); Agent agent = await agentService.LoadAgent(agentId); // switch to different instruction template if (!string.IsNullOrEmpty(input.Template)) { agent.Instruction = agent.Templates.First(x => x.Name == input.Template).Content; } var conv = _services.GetRequiredService(); conv.States.SetState("provider", input.Provider) .SetState("model", input.Model); return await instructor.ExecuteInstruction(agent, new RoleDialogModel(AgentRole.User, input.Text), fn => Task.CompletedTask, fn => Task.CompletedTask, fn => Task.CompletedTask); } [HttpPost("/instruct/text-completion")] public async Task TextCompletion([FromBody] IncomingMessageModel message) { var textCompletion = CompletionProvider.GetTextCompletion(_services); return await textCompletion.GetCompletion(message.Text); } }