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.");
}
}