ollama

Форк
0
77 строк · 1.8 Кб
1
import * as readline from "readline";
2

3
const model = "llama2";
4
type Message = {
5
  role: "assistant" | "user" | "system";
6
  content: string;
7
}
8
const messages: Message[] = [{
9
  role: "system",
10
  content: "You are a helpful AI agent."
11
}]
12

13
const rl = readline.createInterface({
14
  input: process.stdin,
15
  output: process.stdout
16
})
17

18
async function chat(messages: Message[]): Promise<Message> {
19
  const body = {
20
    model: model,
21
    messages: messages
22
  }
23

24
  const response = await fetch("http://localhost:11434/api/chat", {
25
    method: "POST",
26
    body: JSON.stringify(body)
27
  })
28

29
  const reader = response.body?.getReader()
30
  if (!reader) {
31
    throw new Error("Failed to read response body")
32
  }
33
  let content = ""
34
  while (true) {
35
    const { done, value } = await reader.read()
36
    if (done) {
37
      break;
38
    }
39
    const rawjson = new TextDecoder().decode(value);
40
    const json = JSON.parse(rawjson)
41

42
    if (json.done === false) {
43
      process.stdout.write(json.message.content);
44
      content += json.message.content
45
    }
46

47
  }
48
  return { role: "assistant", content: content };
49
}
50

51
async function askQuestion(): Promise<void> {
52
  return new Promise<void>((resolve) => {
53
    rl.question("\n\nAsk a question: (press enter alone to quit)\n\n", async (user_input) => {
54
      if (user_input.trim() === "") {
55
        rl.close();
56
        console.log("Thankyou. Goodbye.\n")
57
        console.log("=======\nHere is the message history that was used in this conversation.\n=======\n")
58
        messages.forEach(message => {
59
          console.log(message)
60
        })
61
        resolve();
62
      } else {
63
        console.log();
64
        messages.push({ role: "user", content: user_input });
65
        messages.push(await chat(messages));
66
        await askQuestion(); // Ask the next question
67
      }
68
    });
69
  });
70
}
71

72
async function main() {
73
  await askQuestion();
74

75
}
76

77
main();

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.