Codeunit 339 No. Series Cop. Generate, source in 28

Source2526272829metadata in 28

src/Business Foundation/App/NoSeriesCopilot/src/Copilot/Tools/NoSeriesCopGenerate.Codeunit.al80 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------

namespace Microsoft.Foundation.NoSeries;

using System.AI;
using System.Azure.KeyVault;
using System.Telemetry;

codeunit 339 "No. Series Cop. Generate" implements "AOAI Function"
{
    InherentEntitlements = X;
    InherentPermissions = X;
    Access = Internal;

    var
        Telemetry: Codeunit Telemetry;
        FunctionNameLbl: Label 'GenerateNumberSeries', Locked = true;
        TelemetryTool4DefinitionRetrievalErr: Label 'Unable to retrieve the definition for No. Series Copilot Tool 4 from Azure Key Vault.', Locked = true;
        ToolLoadingErr: Label 'Unable to load the No. Series Copilot Tool 4. Please try again later.';

    procedure GetName(): Text
    begin
        exit(FunctionNameLbl);
    end;

    [NonDebuggable]
    procedure GetPrompt() Function: JsonObject;
    begin
        Function.ReadFrom(GetTool4Definition());
    end;

    procedure Execute(Arguments: JsonObject): Variant
    var
        NoSeriesCopilotImpl: Codeunit "No. Series Copilot Impl.";
        NoSeriesJArray: JsonArray;
        Completion: Text;
    begin
        if not GetNumberSeriesJsonArray(Arguments, NoSeriesJArray) then begin
            NoSeriesCopilotImpl.SendNotification(GetLastErrorText());
            exit(Completion);
        end;

        NoSeriesJArray.WriteTo(Completion);
        exit(Completion);
    end;

    procedure GetDefaultToolChoice(): Text
    begin
        exit('{"type": "function", "function": {"name": "GenerateNumberSeries"}}');
    end;

    [NonDebuggable]
    local procedure GetTool4Definition() Definition: Text
    var
        AzureKeyVault: Codeunit "Azure Key Vault";
    begin
        if not AzureKeyVault.GetAzureKeyVaultSecret('NoSeriesCopilotTool4Definition', Definition) then begin
            Telemetry.LogMessage('0000ND8', TelemetryTool4DefinitionRetrievalErr, Verbosity::Error, DataClassification::SystemMetadata);
            Error(ToolLoadingErr);
        end;
    end;

    [TryFunction]
    local procedure GetNumberSeriesJsonArray(Arguments: JsonObject; var NoSeriesJArray: JsonArray)
    var
        NoSeriesCopilotImpl: Codeunit "No. Series Copilot Impl.";
        JToken: JsonToken;
    begin
        if not Arguments.Get('noSeries', JToken) then
            Error(NoSeriesCopilotImpl.GetChatCompletionResponseErr());

        if not JToken.IsArray() then
            Error(NoSeriesCopilotImpl.GetChatCompletionResponseErr());

        NoSeriesJArray := JToken.AsArray();
    end;
}