Esempio n. 1
0
        public async Task <CompletionResponse> CompletePrompt(
            string prompt,
            CompletionParameters completionParameters,
            Func <CompletionResponse, bool> conditions = null,
            int maxTries           = 5,
            string defaultResponse = ""
            )
        {
            var result        = new CompletionResponse();
            var validResponse = false;
            var tries         = 0;

            while (!validResponse && tries < maxTries)
            {
                tries++;
                var apiResult = await _api.Completions.CreateCompletionAsync(
                    prompt,
                    completionParameters.MaxTokens,
                    completionParameters.Temperature,
                    completionParameters.TopP,
                    1,
                    logProbs : completionParameters.LogProbs,
                    echo : completionParameters.Echo,
                    presencePenalty : completionParameters.PresencePenalty,
                    frequencyPenalty : completionParameters.FrequencyPenalty,
                    stopSequences : completionParameters.StopSequences
                    );

                result = ChoiceToCompletionResponse(apiResult.Completions[0]);

                if (conditions == null)
                {
                    break;
                }
                validResponse = conditions(result);
            }

            if (!validResponse)
            {
                result = new CompletionResponse
                {
                    FinishReason = "no_valid_responses",
                    Text         = defaultResponse
                }
            }
            ;

            return(result);
        }
Esempio n. 2
0
        public async Task <T> CompletePrompt <T>(
            string prompt,
            CompletionParameters completionParameters,
            Func <CompletionResponse, T> process,
            T defaultResponse,
            Func <T, bool> conditions = null,
            int maxTries = 5
            )
        {
            var processedResult = defaultResponse;
            var validResponse   = false;
            var tries           = 0;

            while (!validResponse && tries < maxTries)
            {
                tries++;
                var apiResult = await _api.Completions.CreateCompletionAsync(
                    prompt,
                    completionParameters.MaxTokens,
                    completionParameters.Temperature,
                    completionParameters.TopP,
                    1,
                    logProbs : completionParameters.LogProbs,
                    echo : completionParameters.Echo,
                    presencePenalty : completionParameters.PresencePenalty,
                    frequencyPenalty : completionParameters.FrequencyPenalty,
                    stopSequences : completionParameters.StopSequences
                    );

                var result = ChoiceToCompletionResponse(apiResult.Completions[0]);
                processedResult = process(result);

                if (conditions == null)
                {
                    break;
                }
                validResponse = conditions(processedResult);
            }

            return(processedResult);
        }