LangChain(JS) with Llama cpp for embeddings and prompt example

1 minute read

LangChain JS example with Llama cpp for embeddings and prompt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import 'dotenv/config'
import { LlamaCpp } from '@langchain/community/llms/llama_cpp'
import { LlamaCppEmbeddings } from '@langchain/community/embeddings/llama_cpp'
import { ChatPromptTemplate } from '@langchain/core/prompts'
import { StringOutputParser } from '@langchain/core/output_parsers'
import { MemoryVectorStore } from 'langchain/vectorstores/memory'

const LLAMA_MODEL_LOCAL_PATH = process.env.LLAMA_PATH || ''

async function streamingResponse(model: LlamaCpp) {
  const prompt = 'Tell me a short story about a happy Llama.'
  const stream = await model.stream(prompt)
  for await (const chunk of stream) {
    console.log(chunk)
  }
}

async function memoryVectorStore(modelPath: string) {
  const embeddings = new LlamaCppEmbeddings({
    modelPath,
  })
  const vectorStore = await MemoryVectorStore.fromTexts(
    ['Hello world', 'Bye bye', 'hello nice world'],
    [{ id: 2 }, { id: 1 }, { id: 3 }],
    embeddings,
  )

  const resultOne = await vectorStore.similaritySearch('hello world', 1)
  console.log(resultOne)
}

await memoryVectorStore(LLAMA_MODEL_LOCAL_PATH)

async function prompt(modelPath: string) {
  const model = new LlamaCpp({
    modelPath,
    temperature: 0.7,
  })

  const prompt = ChatPromptTemplate.fromMessages([
    ['human', 'Tell me a short joke about {topic}'],
  ])

  const outputParser = new StringOutputParser()
  const chain = prompt.pipe(model).pipe(outputParser)

  const response = await chain.invoke({
    topic: 'ice cream',
  })

  console.log(response)
}

await prompt(LLAMA_MODEL_LOCAL_PATH)

Categories:

Updated: