123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import * as readline from "readline";
- const model = "llama3";
- type Message = {
- role: "assistant" | "user" | "system";
- content: string;
- }
- const messages: Message[] = [{
- role: "system",
- content: "You are a helpful AI agent."
- }]
- const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout
- })
- async function chat(messages: Message[]): Promise<Message> {
- const body = {
- model: model,
- messages: messages
- }
- const response = await fetch("http://localhost:11434/api/chat", {
- method: "POST",
- body: JSON.stringify(body)
- })
- const reader = response.body?.getReader()
- if (!reader) {
- throw new Error("Failed to read response body")
- }
- let content = ""
- while (true) {
- const { done, value } = await reader.read()
- if (done) {
- break;
- }
- const rawjson = new TextDecoder().decode(value);
- const json = JSON.parse(rawjson)
- if (json.done === false) {
- process.stdout.write(json.message.content);
- content += json.message.content
- }
- }
- return { role: "assistant", content: content };
- }
- async function askQuestion(): Promise<void> {
- return new Promise<void>((resolve) => {
- rl.question("\n\nAsk a question: (press enter alone to quit)\n\n", async (user_input) => {
- if (user_input.trim() === "") {
- rl.close();
- console.log("Thankyou. Goodbye.\n")
- console.log("=======\nHere is the message history that was used in this conversation.\n=======\n")
- messages.forEach(message => {
- console.log(message)
- })
- resolve();
- } else {
- console.log();
- messages.push({ role: "user", content: user_input });
- messages.push(await chat(messages));
- await askQuestion(); // Ask the next question
- }
- });
- });
- }
- async function main() {
- await askQuestion();
- }
- main();
|