68 lines
2.9 KiB
C#
68 lines
2.9 KiB
C#
namespace LLama.Examples.Examples
|
|
{
|
|
using LLama.Common;
|
|
using System;
|
|
|
|
internal class CodingAssistant
|
|
{
|
|
// Source paper with example prompts:
|
|
// https://doi.org/10.48550/arXiv.2308.12950
|
|
const string InstructionPrefix = "[INST]";
|
|
const string InstructionSuffix = "[/INST]";
|
|
const string SystemInstruction = "You're an intelligent, concise coding assistant. " +
|
|
"Wrap code in ``` for readability. Don't repeat yourself. " +
|
|
"Use best practice and good coding standards.";
|
|
|
|
public static async Task Run()
|
|
{
|
|
string modelPath = UserSettings.GetModelPath();
|
|
if (!modelPath.Contains("codellama", StringComparison.InvariantCultureIgnoreCase))
|
|
{
|
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
|
Console.WriteLine("WARNING: the model you selected is not a Code LLama model!");
|
|
Console.WriteLine("For this example we specifically recommend 'codellama-7b-instruct.Q4_K_S.gguf'");
|
|
Console.WriteLine("Press ENTER to continue...");
|
|
Console.ReadLine();
|
|
}
|
|
|
|
var parameters = new ModelParams(modelPath)
|
|
{
|
|
ContextSize = 4096
|
|
};
|
|
using var model = LLamaWeights.LoadFromFile(parameters);
|
|
using var context = model.CreateContext(parameters);
|
|
var executor = new InstructExecutor(context, InstructionPrefix, InstructionSuffix, null);
|
|
|
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
|
Console.WriteLine("The executor has been enabled. In this example, the LLM will follow your instructions." +
|
|
"\nIt's a 7B Code Llama, so it's trained for programming tasks like \"Write a C# function reading " +
|
|
"a file name from a given URI\" or \"Write some programming interview questions\"." +
|
|
"\nWrite 'exit' to exit");
|
|
Console.ForegroundColor = ConsoleColor.White;
|
|
|
|
var inferenceParams = new InferenceParams()
|
|
{
|
|
Temperature = 0.8f,
|
|
MaxTokens = -1,
|
|
};
|
|
|
|
string instruction = $"{SystemInstruction}\n\n";
|
|
await Console.Out.WriteAsync("Instruction: ");
|
|
instruction += Console.ReadLine() ?? "Ask me for instructions.";
|
|
while (instruction != "exit")
|
|
{
|
|
|
|
Console.ForegroundColor = ConsoleColor.Green;
|
|
await foreach (var text in executor.InferAsync(instruction + Environment.NewLine, inferenceParams))
|
|
{
|
|
Console.Write(text);
|
|
}
|
|
Console.ForegroundColor = ConsoleColor.White;
|
|
|
|
await Console.Out.WriteAsync("Instruction: ");
|
|
instruction = Console.ReadLine() ?? "Ask me for instructions.";
|
|
}
|
|
}
|
|
}
|
|
}
|