private void SetValuesFromParameterFile()

in src/ai/commands/chat_command.cs [975:1051]


        private void SetValuesFromParameterFile(string parameterFile)
        {
            var existing = FileHelpers.DemandFindFileInDataPath(parameterFile, _values, "chat parameter");
            var text = FileHelpers.ReadAllText(existing, Encoding.Default);
            string[] sections = text.Split("---\n");
            if (sections.Length < 2)
            {
                sections = text.Split("---\r\n");
            }
            var deserializer = new DeserializerBuilder()
                .WithNamingConvention(UnderscoredNamingConvention.Instance)
                .Build();

            if (sections.Length > 2)
            {
                var promptyFrontMatterText = sections[1];
                var chatTemplate = sections[2];
                var obj = deserializer.Deserialize<PromptyFrontMatter>(promptyFrontMatterText);
                Dictionary<string, object> templateInputs = ParsePromptySample(obj.Sample ?? "sample.json");
                string parsedText;
                switch (obj.Template.ToLower())
                {
                    // default assumption for templating language is jinja2
                    case "jinja2":
                    case "":
                        parsedText = ParseJinja(chatTemplate, templateInputs);
                        break;
                    default:
                        parsedText = "";
                        _values.AddThrowError("ERROR:", $"parsing {parameterFile}; {obj.Template} parser not implemented.");
                        break;
                }
                if (!String.IsNullOrEmpty(parsedText))
                {
                    // set values

                    if (!string.IsNullOrEmpty(obj.Model.AzureDeployment)) ConfigDeploymentToken.Data().Set(_values, obj.Model.AzureDeployment);
                    if (!string.IsNullOrEmpty(obj.Model.AzureEndpoint)) ConfigEndpointUriToken.Data().Set(_values, obj.Model.AzureEndpoint);
                    string systemPrompt = "";
                    string[] separators = { "\n", "\r\n"};
                    var textlines = parsedText.Split(separators, StringSplitOptions.None);
                    if (textlines[0].ToLower().Equals("system:"))
                    {
                        parsedText = "";
                        var systemPromptEnded = false;
                        foreach (var line in textlines[1..])
                        {
                            if (string.IsNullOrEmpty(line)) systemPromptEnded = true;
                            if (systemPromptEnded)
                            {
                                parsedText += $"{line}\n";
                            }
                            else
                            {
                                systemPrompt += $"{line}\n";
                            }
                        };
                        if (!string.IsNullOrEmpty(systemPrompt)) _values.Reset("chat.message.system.prompt", systemPrompt);
                    }
                    if (!string.IsNullOrEmpty(parsedText)) _values.Reset("chat.message.user.prompt", parsedText);

                    if (obj.Parameters != null)
                    {
                        var modelParams = obj.Parameters;
                        if (modelParams.Temperature != 0) _values.Reset("chat.options.temperature", modelParams.Temperature.ToString());
                        if (modelParams.MaxTokens != 0) _values.Reset("chat.options.max.tokens", modelParams.MaxTokens.ToString());
                        if (modelParams.FrequencyPenalty != 0) _values.Reset("chat.options.frequency.penalty", modelParams.FrequencyPenalty.ToString());
                        if (modelParams.PresencePenalty != 0) _values.Reset("chat.options.presence.penalty", modelParams.PresencePenalty.ToString());
                        if (modelParams.Stop != null) _values.Reset("chat.options.stop.sequence", modelParams.Stop.ToString());
                    }
                }
            }
            else
            { 
                _values.AddThrowError("ERROR:", $"parsing {parameterFile}; unable to parse, incorrect yaml format.");
            }
        }