Compare commits

..

2 Commits

Author SHA1 Message Date
thucpn d751af3ba1 fix: use tsx 2024-12-20 17:15:41 +07:00
thucpn 6e0bf26566 fix: add start command for stackblitz 2024-12-20 17:11:32 +07:00
463 changed files with 9665 additions and 17710 deletions
+1 -1
View File
@@ -25,4 +25,4 @@ jobs:
run: pnpm run build run: pnpm run build
- name: Pre Release - name: Pre Release
run: pnpx pkg-pr-new publish --pnpm ./packages/* ./packages/providers/* ./packages/providers/storage/* run: pnpx pkg-pr-new publish ./packages/* ./packages/providers/*
+6 -1
View File
@@ -83,6 +83,11 @@ jobs:
run: pnpm install run: pnpm install
- name: Build - name: Build
run: pnpm run build run: pnpm run build
- name: Use Build For Examples
run: |
pnpm link ../packages/llamaindex/
cd readers && pnpm link ../../packages/llamaindex/
working-directory: ./examples
- name: Run Type Check - name: Run Type Check
run: pnpm run type-check run: pnpm run type-check
- name: Run Circular Dependency Check - name: Run Circular Dependency Check
@@ -145,7 +150,7 @@ jobs:
done done
- name: Pack provider packages - name: Pack provider packages
run: | run: |
for dir in packages/providers/* packages/providers/storage/*; do for dir in packages/providers/*; do
if [ -d "$dir" ] && [ -f "$dir/package.json" ]; then if [ -d "$dir" ] && [ -f "$dir/package.json" ]; then
echo "Packing $dir" echo "Packing $dir"
pnpm pack --pack-destination ${{ runner.temp }} -C $dir pnpm pack --pack-destination ${{ runner.temp }} -C $dir
+3 -1
View File
@@ -1 +1,3 @@
pnpm run lint-staged pnpm format
pnpm lint
npx lint-staged
-1
View File
@@ -1 +0,0 @@
LlamaIndexTS
+1 -2
View File
@@ -14,6 +14,5 @@
"[json]": { "[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
}, },
"prettier.prettierPath": "./node_modules/prettier", "prettier.prettierPath": "./node_modules/prettier"
"prettier.configPath": "prettier.config.mjs"
} }
+33 -7
View File
@@ -65,18 +65,44 @@ yarn add llamaindex
See our official document: <https://ts.llamaindex.ai/docs/llamaindex/getting_started/> See our official document: <https://ts.llamaindex.ai/docs/llamaindex/getting_started/>
### Adding provider packages ### Tips when using in non-Node.js environments
In most cases, you'll also need to install provider packages to use LlamaIndexTS. These are for adding AI models, file readers for ingestion or storing documents, e.g. in vector databases. When you are importing `llamaindex` in a non-Node.js environment(such as Vercel Edge, Cloudflare Workers, etc.)
Some classes are not exported from top-level entry file.
For example, to use the OpenAI LLM, you would install the following package: The reason is that some classes are only compatible with Node.js runtime,(e.g. `PDFReader`) which uses Node.js specific APIs(like `fs`, `child_process`, `crypto`).
```shell If you need any of those classes, you have to import them instead directly though their file path in the package.
npm install @llamaindex/openai Here's an example for importing the `PineconeVectorStore` class:
pnpm install @llamaindex/openai
yarn add @llamaindex/openai ```typescript
import { PineconeVectorStore } from "llamaindex/storage/vectorStore/PineconeVectorStore";
``` ```
As the `PDFReader` is not working with the Edge runtime, here's how to use the `SimpleDirectoryReader` with the `LlamaParseReader` to load PDFs:
```typescript
import { SimpleDirectoryReader } from "llamaindex/readers/SimpleDirectoryReader";
import { LlamaParseReader } from "llamaindex/readers/LlamaParseReader";
export const DATA_DIR = "./data";
export async function getDocuments() {
const reader = new SimpleDirectoryReader();
// Load PDFs using LlamaParseReader
return await reader.loadData({
directoryPath: DATA_DIR,
fileExtToReader: {
pdf: new LlamaParseReader({ resultType: "markdown" }),
},
});
}
```
> _Note_: Reader classes have to be added explictly to the `fileExtToReader` map in the Edge version of the `SimpleDirectoryReader`.
You'll find a complete example with LlamaIndexTS here: https://github.com/run-llama/create_llama_projects/tree/main/nextjs-edge-llamaparse
## Playground ## Playground
Check out our NextJS playground at https://llama-playground.vercel.app/. The source is available at https://github.com/run-llama/ts-playground Check out our NextJS playground at https://llama-playground.vercel.app/. The source is available at https://github.com/run-llama/ts-playground
-108
View File
@@ -1,113 +1,5 @@
# @llamaindex/doc # @llamaindex/doc
## 0.1.0
### Minor Changes
- 6a4a737: Remove re-exports from llamaindex main package
- f4588bc: Remove readers package from llamaindex
### Patch Changes
- c7c0800: fix: fumadoc build fail
- a87efb9: docs: update chat engine docs
- 7bd5d93: docs: update workflow doc
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- llamaindex@0.9.0
- @llamaindex/core@0.5.0
- @llamaindex/cloud@3.0.0
- @llamaindex/node-parser@1.0.0
- @llamaindex/openai@0.1.52
- @llamaindex/readers@2.0.0
## 0.0.41
### Patch Changes
- Updated dependencies [1c908fd]
- @llamaindex/openai@0.1.51
- @llamaindex/node-parser@0.0.24
- @llamaindex/workflow@0.0.10
- @llamaindex/readers@1.0.25
- @llamaindex/cloud@2.0.24
- @llamaindex/core@0.4.23
- llamaindex@0.8.37
## 0.0.40
### Patch Changes
- Updated dependencies [cb608b5]
- @llamaindex/openai@0.1.50
- @llamaindex/node-parser@0.0.23
- @llamaindex/workflow@0.0.9
- @llamaindex/readers@1.0.24
- @llamaindex/cloud@2.0.23
- @llamaindex/core@0.4.22
- llamaindex@0.8.36
## 0.0.39
### Patch Changes
- 6d4d96f: chore: update examples and docs to use unified imports
- Updated dependencies [15563a0]
- @llamaindex/openai@0.1.49
- llamaindex@0.8.35
## 0.0.38
### Patch Changes
- Updated dependencies [9f8ad37]
- Updated dependencies [7265f74]
- llamaindex@0.8.34
- @llamaindex/openai@0.1.48
## 0.0.37
### Patch Changes
- Updated dependencies [2019a04]
- @llamaindex/openai@0.1.47
- llamaindex@0.8.33
## 0.0.36
### Patch Changes
- f02621e: Fix internal links between chapters
- Updated dependencies [34faf48]
- Updated dependencies [4df1fe6]
- Updated dependencies [9456616]
- Updated dependencies [d6c270e]
- Updated dependencies [1892e1c]
- Updated dependencies [1931bbc]
- llamaindex@0.8.32
- @llamaindex/core@0.4.21
- @llamaindex/cloud@2.0.22
- @llamaindex/openai@0.1.46
- @llamaindex/node-parser@0.0.22
- @llamaindex/readers@1.0.23
## 0.0.35
### Patch Changes
- Updated dependencies [5dec9f9]
- Updated dependencies [fd9c829]
- Updated dependencies [d211b7a]
- Updated dependencies [0ebbfc1]
- @llamaindex/cloud@2.0.21
- llamaindex@0.8.31
- @llamaindex/core@0.4.20
- @llamaindex/node-parser@0.0.21
- @llamaindex/openai@0.1.45
- @llamaindex/readers@1.0.22
## 0.0.34 ## 0.0.34
### Patch Changes ### Patch Changes
+10 -11
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/doc", "name": "@llamaindex/doc",
"version": "0.1.0", "version": "0.0.34",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "pnpm run build:docs && next build", "build": "pnpm run build:docs && next build",
@@ -28,19 +28,18 @@
"@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-slot": "^1.1.0",
"@radix-ui/react-tooltip": "^1.1.4", "@radix-ui/react-tooltip": "^1.1.4",
"@vercel/functions": "^1.5.0", "@vercel/functions": "^1.5.0",
"@scalar/api-client-react": "^1.1.25",
"ai": "^3.4.33", "ai": "^3.4.33",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.0",
"clsx": "2.1.1", "clsx": "2.1.1",
"foxact": "^0.2.41", "foxact": "^0.2.41",
"framer-motion": "^11.11.17", "framer-motion": "^11.11.17",
"fumadocs-core": "^14.7.7", "fumadocs-core": "14.6.0",
"fumadocs-docgen": "^1.3.7", "fumadocs-docgen": "1.3.2",
"fumadocs-mdx": "^11.5.3", "fumadocs-mdx": "^11.1.2",
"fumadocs-openapi": "^5.12.0", "fumadocs-openapi": "^5.8.2",
"fumadocs-twoslash": "^2.0.3", "fumadocs-twoslash": "^2.0.2",
"fumadocs-typescript": "^3.0.3", "fumadocs-typescript": "^3.0.2",
"fumadocs-ui": "^14.7.7", "fumadocs-ui": "14.6.0",
"hast-util-to-jsx-runtime": "^2.3.2", "hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"lucide-react": "^0.460.0", "lucide-react": "^0.460.0",
@@ -55,8 +54,8 @@
"rehype-katex": "^7.0.1", "rehype-katex": "^7.0.1",
"remark-math": "^6.0.0", "remark-math": "^6.0.0",
"rimraf": "^6.0.1", "rimraf": "^6.0.1",
"shiki": "^2.3.2", "shiki": "1.23.1",
"shiki-magic-move": "^1.0.0", "shiki-magic-move": "^0.5.0",
"swr": "^2.2.5", "swr": "^2.2.5",
"tailwind-merge": "^2.5.2", "tailwind-merge": "^2.5.2",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
+4 -10
View File
@@ -76,19 +76,15 @@ export default function HomePage() {
> >
<MagicMove <MagicMove
code={[ code={[
`import { OpenAI } from "@llamaindex/openai"; `import { OpenAI } from "llamaindex";
const llm = new OpenAI(); const llm = new OpenAI();
const response = await llm.complete({ prompt: "How are you?" });`, const response = await llm.complete({ prompt: "How are you?" });`,
`import { OpenAI } from "@llamaindex/openai"; `import { OpenAI } from "llamaindex";
const llm = new OpenAI(); const llm = new OpenAI();
const response = await llm.chat({ const response = await llm.chat({
messages: [{ content: "Tell me a joke.", role: "user" }], messages: [{ content: "Tell me a joke.", role: "user" }],
});`, });`,
`import { ChatMemoryBuffer } from "llamaindex"; `import { OpenAI, ChatMemoryBuffer } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
const llm = new OpenAI({ model: 'gpt4o-turbo' }); const llm = new OpenAI({ model: 'gpt4o-turbo' });
const buffer = new ChatMemoryBuffer({ const buffer = new ChatMemoryBuffer({
tokenLimit: 128_000, tokenLimit: 128_000,
@@ -98,9 +94,7 @@ const response = await llm.chat({
messages: buffer.getMessages(), messages: buffer.getMessages(),
stream: true stream: true
});`, });`,
`import { ChatMemoryBuffer } from "llamaindex"; `import { OpenAIAgent, ChatMemoryBuffer } from "llamaindex";
import { OpenAIAgent } from "@llamaindex/openai";
const agent = new OpenAIAgent({ const agent = new OpenAIAgent({
llm, llm,
tools: [...myTools] tools: [...myTools]
@@ -5,24 +5,4 @@ title: Gemini Agent
import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock'; import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock';
import CodeSourceGemini from "!raw-loader!../../../../../../../examples/gemini/agent.ts"; import CodeSourceGemini from "!raw-loader!../../../../../../../examples/gemini/agent.ts";
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/google
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/google
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/google
```
</Tabs>
## Source
<DynamicCodeBlock lang="ts" code={CodeSourceGemini} /> <DynamicCodeBlock lang="ts" code={CodeSourceGemini} />
@@ -12,8 +12,9 @@ Here's a simple example of how to use the Context-Aware Agent:
import { import {
Document, Document,
VectorStoreIndex, VectorStoreIndex,
OpenAIContextAwareAgent,
OpenAI,
} from "llamaindex"; } from "llamaindex";
import { OpenAI, OpenAIContextAwareAgent } from "@llamaindex/openai";
async function createContextAwareAgent() { async function createContextAwareAgent() {
// Create and index some documents // Create and index some documents
@@ -57,3 +58,4 @@ In this example, the Context-Aware Agent uses the retriever to fetch relevant co
## Available Context-Aware Agents ## Available Context-Aware Agents
- `OpenAIContextAwareAgent`: A context-aware agent using OpenAI's models. - `OpenAIContextAwareAgent`: A context-aware agent using OpenAI's models.
- `AnthropicContextAwareAgent`: A context-aware agent using Anthropic's models.
@@ -2,8 +2,6 @@
title: Local LLMs title: Local LLMs
--- ---
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
LlamaIndex.TS supports OpenAI and [other remote LLM APIs](other_llms). You can also run a local LLM on your machine! LlamaIndex.TS supports OpenAI and [other remote LLM APIs](other_llms). You can also run a local LLM on your machine!
## Using a local model via Ollama ## Using a local model via Ollama
@@ -26,23 +24,7 @@ The first time you run it will also automatically download and install the model
### Switch the LLM in your code ### Switch the LLM in your code
To switch the LLM in your code, you first need to make sure to install the package for the Ollama model provider: To tell LlamaIndex to use a local LLM, use the `Settings` object:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install @llamaindex/ollama
```
```shell tab="yarn"
yarn add @llamaindex/ollama
```
```shell tab="pnpm"
pnpm add @llamaindex/ollama
```
</Tabs>
Then, to tell LlamaIndex to use a local LLM, use the `Settings` object:
```javascript ```javascript
Settings.llm = new Ollama({ Settings.llm = new Ollama({
@@ -52,25 +34,7 @@ Settings.llm = new Ollama({
### Use local embeddings ### Use local embeddings
If you're doing retrieval-augmented generation, LlamaIndex.TS will also call out to OpenAI to index and embed your data. To be entirely local, you can use a local embedding model from Huggingface like this: If you're doing retrieval-augmented generation, LlamaIndex.TS will also call out to OpenAI to index and embed your data. To be entirely local, you can use a local embedding model like this:
First install the Huggingface model provider package:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install @llamaindex/huggingface
```
```shell tab="yarn"
yarn add @llamaindex/huggingface
```
```shell tab="pnpm"
pnpm add @llamaindex/huggingface
```
</Tabs>
And then set the embedding model in your code:
```javascript ```javascript
Settings.embedModel = new HuggingFaceEmbedding({ Settings.embedModel = new HuggingFaceEmbedding({
@@ -7,36 +7,14 @@ import CodeSource from "!raw-loader!../../../../../../../examples/mistral";
By default LlamaIndex.TS uses OpenAI's LLMs and embedding models, but we support [lots of other LLMs](../modules/llms) including models from Mistral (Mistral, Mixtral), Anthropic (Claude) and Google (Gemini). By default LlamaIndex.TS uses OpenAI's LLMs and embedding models, but we support [lots of other LLMs](../modules/llms) including models from Mistral (Mistral, Mixtral), Anthropic (Claude) and Google (Gemini).
If you don't want to use an API at all you can [run a local model](../../examples/local_llm). If you don't want to use an API at all you can [run a local model](../../examples/local_llm)
This example runs you through the process of setting up a Mistral model:
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/mistral
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/mistral
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/mistral
```
</Tabs>
## Using another LLM ## Using another LLM
You can specify what LLM LlamaIndex.TS will use on the `Settings` object, like this: You can specify what LLM LlamaIndex.TS will use on the `Settings` object, like this:
```typescript ```typescript
import { MistralAI } from "@llamaindex/mistral"; import { MistralAI, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new MistralAI({ Settings.llm = new MistralAI({
model: "mistral-tiny", model: "mistral-tiny",
@@ -51,8 +29,7 @@ You can see examples of other APIs we support by checking out "Available LLMs" i
A frequent gotcha when trying to use a different API as your LLM is that LlamaIndex will also by default index and embed your data using OpenAI's embeddings. To completely switch away from OpenAI you will need to set your embedding model as well, for example: A frequent gotcha when trying to use a different API as your LLM is that LlamaIndex will also by default index and embed your data using OpenAI's embeddings. To completely switch away from OpenAI you will need to set your embedding model as well, for example:
```typescript ```typescript
import { MistralAIEmbedding } from "@llamaindex/mistral"; import { MistralAIEmbedding, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.embedModel = new MistralAIEmbedding(); Settings.embedModel = new MistralAIEmbedding();
``` ```
@@ -1,12 +1,10 @@
--- ---
title: Installation title: Installation
description: How to install llamaindex packages. description: Install llamaindex by running a single command.
--- ---
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; import { Tab, Tabs } from "fumadocs-ui/components/tabs";
To install llamaindex, run the following command:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> <Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm" ```shell tab="npm"
npm install llamaindex npm install llamaindex
@@ -21,25 +19,6 @@ To install llamaindex, run the following command:
``` ```
</Tabs> </Tabs>
In most cases, you'll also need an LLM package to use LlamaIndex. For example, to use the OpenAI LLM, you would install the following:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install @llamaindex/openai
```
```shell tab="yarn"
yarn add @llamaindex/openai
```
```shell tab="pnpm"
pnpm add @llamaindex/openai
```
</Tabs>
Go to [Using other LLM APIs](/docs/llamaindex/examples/other_llms) to find out how to use other LLMs.
## What's next? ## What's next?
<Cards> <Cards>
@@ -70,8 +70,10 @@ In Cloudflare Worker and similar serverless JS environment, you need to be aware
- Some Node.js modules are not available in Cloudflare Worker, such as `node:fs`, `node:child_process`, `node:cluster`... - Some Node.js modules are not available in Cloudflare Worker, such as `node:fs`, `node:child_process`, `node:cluster`...
- You are recommend to design your code using network request, such as use `fetch` API to communicate with database, insteadof a long-running process in Node.js. - You are recommend to design your code using network request, such as use `fetch` API to communicate with database, insteadof a long-running process in Node.js.
- Some of LlamaIndex.TS packages are not available in Cloudflare Worker, for example `@llamaindex/readers` and `@llamaindex/huggingface`. - Some of LlamaIndex.TS modules are not available in Cloudflare Worker, for example `SimpleDirectoryReader` (requires `node:fs`), Some multimodal API that relies on [`onnxruntime-node`](https://www.npmjs.com/package/onnxruntime-node)(we might port to HTTP based module in the future).
- The main `llamaindex` is designed to work in all JavaScript environment, including Cloudflare Worker. If you find any issue, please report to us. - `@llamaindex/core` is designed to work in all JavaScript environment, including Cloudflare Worker. If you find any issue, please report to us.
- `@llamaindex/env` is a JS environment binding module, which polyfill some Node.js/Modern Web API (for example, we have a memory based `fs` module, and Crypto API polyfill). It is designed to work in all JavaScript environment, including Cloudflare Worker. - `@llamaindex/env` is a JS environment binding module, which polyfill some Node.js/Modern Web API (for example, we have a memory based `fs` module, and Crypto API polyfill). It is designed to work in all JavaScript environment, including Cloudflare Worker.
## Known issues
- `llamaindex` not work perfectly in Cloudflare Worker, bundle size will be larger than 1MB, which is the limit of Cloudflare Worker. You will need import submodule instead of the whole `llamaindex` module.
@@ -9,7 +9,7 @@ LlamaIndex.TS is written in TypeScript and designed to be used in TypeScript pro
We do lots of work on strong typing to make sure you have a great typing experience with LlamaIndex.TS. We do lots of work on strong typing to make sure you have a great typing experience with LlamaIndex.TS.
```ts twoslash ```ts twoslash
import { PromptTemplate } from 'llamaindex' import { PromptTemplate } from '@llamaindex/core/prompts'
const promptTemplate = new PromptTemplate({ const promptTemplate = new PromptTemplate({
template: `Context information from multiple sources is below. template: `Context information from multiple sources is below.
--------------------- ---------------------
@@ -29,7 +29,7 @@ promptTemplate.format({
``` ```
```ts twoslash ```ts twoslash
import { FunctionTool } from 'llamaindex' import { FunctionTool } from '@llamaindex/core/tools'
import { z } from 'zod' import { z } from 'zod'
// ---cut-before--- // ---cut-before---
@@ -15,12 +15,12 @@ In LlamaIndex, an agent is a semi-autonomous piece of software powered by an LLM
You'll need to have a recent version of [Node.js](https://nodejs.org/en) installed. Then you can install LlamaIndex.TS by running You'll need to have a recent version of [Node.js](https://nodejs.org/en) installed. Then you can install LlamaIndex.TS by running
```bash ```bash
npm install llamaindex @llamaindex/openai @llamaindex/readers @llamaindex/huggingface npm install llamaindex
``` ```
## Choose your model ## Choose your model
By default we'll be using OpenAI with GPT-4, as it's a powerful model and easy to get started with. If you'd prefer to run a local model, see [using a local model](3_local_model). By default we'll be using OpenAI with GPT-4, as it's a powerful model and easy to get started with. If you'd prefer to run a local model, see [using a local model](local_model).
## Get an OpenAI API key ## Get an OpenAI API key
@@ -36,4 +36,4 @@ We'll use `dotenv` to pull the API key out of that .env file, so also run:
npm install dotenv npm install dotenv
``` ```
Now you're ready to [create your agent](2_create_agent). Now you're ready to [create your agent](create_agent).
@@ -31,8 +31,7 @@ First we'll need to pull in our dependencies. These are:
- Dotenv to load our API key from the .env file - Dotenv to load our API key from the .env file
```javascript ```javascript
import { FunctionTool, Settings } from "llamaindex"; import { OpenAI, FunctionTool, OpenAIAgent, Settings } from "llamaindex";
import { OpenAI, OpenAIAgent } from "@llamaindex/openai";
import "dotenv/config"; import "dotenv/config";
``` ```
@@ -178,5 +177,5 @@ The second piece of output is the response from the LLM itself, where the `messa
Great! We've built an agent with tool use! Next you can: Great! We've built an agent with tool use! Next you can:
- [See the full code](https://github.com/run-llama/ts-agents/blob/main/1_agent/agent.ts) - [See the full code](https://github.com/run-llama/ts-agents/blob/main/1_agent/agent.ts)
- [Switch to a local LLM](3_local_model) - [Switch to a local LLM](local_model)
- Move on to [add Retrieval-Augmented Generation to your agent](4_agentic_rag) - Move on to [add Retrieval-Augmented Generation to your agent](agentic_rag)
@@ -89,4 +89,4 @@ You can use a ReActAgent instead of an OpenAIAgent in any of the further example
### Next steps ### Next steps
Now you've got a local agent, you can [add Retrieval-Augmented Generation to your agent](4_agentic_rag). Now you've got a local agent, you can [add Retrieval-Augmented Generation to your agent](agentic_rag).
@@ -13,34 +13,22 @@ To learn more about RAG, we recommend this [introduction](https://docs.llamainde
We're going to start with the same agent we [built in step 1](https://github.com/run-llama/ts-agents/blob/main/1_agent/agent.ts), but make a few changes. You can find the finished version [in the repository](https://github.com/run-llama/ts-agents/blob/main/2_agentic_rag/agent.ts). We're going to start with the same agent we [built in step 1](https://github.com/run-llama/ts-agents/blob/main/1_agent/agent.ts), but make a few changes. You can find the finished version [in the repository](https://github.com/run-llama/ts-agents/blob/main/2_agentic_rag/agent.ts).
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai @llamaindex/huggingface
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai @llamaindex/huggingface
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai @llamaindex/huggingface
```
</Tabs>
### New dependencies ### New dependencies
We'll be bringing in `SimpleDirectoryReader`, `HuggingFaceEmbedding`, `VectorStoreIndex`, and `QueryEngineTool`, `OpenAIContextAwareAgent` from LlamaIndex.TS, as well as the dependencies we previously used. We'll be bringing in `SimpleDirectoryReader`, `HuggingFaceEmbedding`, `VectorStoreIndex`, and `QueryEngineTool`, `OpenAIContextAwareAgent` from LlamaIndex.TS, as well as the dependencies we previously used.
```javascript ```javascript
import { FunctionTool, QueryEngineTool, Settings, VectorStoreIndex } from "llamaindex"; import {
import { OpenAI, OpenAIAgent } from "@llamaindex/openai"; OpenAI,
import { HuggingFaceEmbedding } from "@llamaindex/huggingface"; FunctionTool,
import { SimpleDirectoryReader } from "@llamaindex/readers/directory"; OpenAIAgent,
OpenAIContextAwareAgent,
Settings,
SimpleDirectoryReader,
HuggingFaceEmbedding,
VectorStoreIndex,
QueryEngineTool,
} from "llamaindex";
``` ```
### Add an embedding model ### Add an embedding model
@@ -165,4 +153,4 @@ The `OpenAIContextAwareAgent` approach simplifies the setup by allowing you to d
On the other hand, using the `QueryEngineTool` offers more flexibility and power. This method allows for customization in how queries are constructed and executed, enabling you to query data from various storages and process them in different ways. However, this added flexibility comes with increased complexity and response time due to the separate tool call and queryEngine generating tool output by LLM that is then passed to the agent. On the other hand, using the `QueryEngineTool` offers more flexibility and power. This method allows for customization in how queries are constructed and executed, enabling you to query data from various storages and process them in different ways. However, this added flexibility comes with increased complexity and response time due to the separate tool call and queryEngine generating tool output by LLM that is then passed to the agent.
So now we have an agent that can index complicated documents and answer questions about them. Let's [combine our math agent and our RAG agent](5_rag_and_tools)! So now we have an agent that can index complicated documents and answer questions about them. Let's [combine our math agent and our RAG agent](rag_and_tools)!
@@ -127,4 +127,4 @@ In the final tool call, it used the `sumNumbers` function to add the two budgets
} }
``` ```
Great! Now let's improve accuracy by improving our parsing with [LlamaParse](6_llamaparse). Great! Now let's improve accuracy by improving our parsing with [LlamaParse](llamaparse).
@@ -17,4 +17,4 @@ const documents = await reader.loadData("../data/sf_budget_2023_2024.pdf");
Now you will be able to ask more complicated questions of the same PDF and get better results. You can find this code [in our repo](https://github.com/run-llama/ts-agents/blob/main/4_llamaparse/agent.ts). Now you will be able to ask more complicated questions of the same PDF and get better results. You can find this code [in our repo](https://github.com/run-llama/ts-agents/blob/main/4_llamaparse/agent.ts).
Next up, let's persist our embedded data so we don't have to re-parse every time by [using a vector store](7_qdrant). Next up, let's persist our embedded data so we don't have to re-parse every time by [using a vector store](qdrant).
@@ -65,13 +65,13 @@ Since parsing a PDF can be slow, especially a large one, using the pre-parsed ch
In this guide you've learned how to In this guide you've learned how to
- [Create an agent](2_create_agent) - [Create an agent](create_agent)
- Use remote LLMs like GPT-4 - Use remote LLMs like GPT-4
- [Use local LLMs like Mixtral](3_local_model) - [Use local LLMs like Mixtral](local_model)
- [Create a RAG query engine](4_agentic_rag) - [Create a RAG query engine](agentic_rag)
- [Turn functions and query engines into agent tools](5_rag_and_tools) - [Turn functions and query engines into agent tools](rag_and_tools)
- Combine those tools - Combine those tools
- [Enhance your parsing with LlamaParse](6_llamaparse) - [Enhance your parsing with LlamaParse](llamaparse)
- Persist your data in a vector store - Persist your data in a vector store
The next steps are up to you! Try creating more complex functions and query engines, and set your agent loose on the world. The next steps are up to you! Try creating more complex functions and query engines, and set your agent loose on the world.
@@ -10,7 +10,7 @@ import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
<Accordions> <Accordions>
<Accordion title="Install @llamaindex/readers"> <Accordion title="Install @llamaindex/readers">
If you want to use the reader module, you need to install `@llamaindex/readers` If you want to only use reader modules, you can install `@llamaindex/readers`
<Tabs groupId="install-llamaindex" items={["npm", "yarn", "pnpm"]} persist> <Tabs groupId="install-llamaindex" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm" ```shell tab="npm"
@@ -31,73 +31,72 @@ import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
We offer readers for different file formats. We offer readers for different file formats.
```ts twoslash <Tabs groupId="llamaindex-or-readers" items={["llamaindex", "@llamaindex/readers"]} persist>
import { CSVReader } from '@llamaindex/readers/csv' ```ts twoslash tab="llamaindex"
import { PDFReader } from '@llamaindex/readers/pdf' import { CSVReader } from 'llamaindex'
import { JSONReader } from '@llamaindex/readers/json' import { PDFReader } from 'llamaindex'
import { MarkdownReader } from '@llamaindex/readers/markdown' import { JSONReader } from 'llamaindex'
import { HTMLReader } from '@llamaindex/readers/html' import { MarkdownReader } from 'llamaindex'
// you can find more readers in the documentation import { HTMLReader } from 'llamaindex'
``` // you can find more readers in the documentation
```
```ts twoslash tab="@llamaindex/readers"
import { CSVReader } from '@llamaindex/readers/csv'
import { PDFReader } from '@llamaindex/readers/pdf'
import { JSONReader } from '@llamaindex/readers/json'
import { MarkdownReader } from '@llamaindex/readers/markdown'
import { HTMLReader } from '@llamaindex/readers/html'
// you can find more readers in the documentation
```
</Tabs>
## SimpleDirectoryReader ## SimpleDirectoryReader
`SimpleDirectoryReader` is the simplest way to load data from local files into LlamaIndex. `SimpleDirectoryReader` is the simplest way to load data from local files into LlamaIndex.
```ts twoslash <Tabs groupId="llamaindex-or-readers" items={["llamaindex", "@llamaindex/readers"]} persist>
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
const reader = new SimpleDirectoryReader() ```ts twoslash tab="llamaindex"
const documents = await reader.loadData("./data") import { SimpleDirectoryReader } from "llamaindex";
// ^?
const reader = new SimpleDirectoryReader()
const documents = await reader.loadData("./data")
// ^?
const texts = documents.map(doc => doc.getText()) const texts = documents.map(doc => doc.getText())
// ^? // ^?
``` ```
```ts twoslash tab="@llamaindex/readers"
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
const reader = new SimpleDirectoryReader()
const documents = await reader.loadData("./data")
// ^?
## Tips when using in non-Node.js environments const texts = documents.map(doc => doc.getText())
// ^?
When using `@llamaindex/readers` in a non-Node.js environment (such as Vercel Edge, Cloudflare Workers, etc.) ```
Some classes are not exported from top-level entry file.
The reason is that some classes are only compatible with Node.js runtime, (e.g. `PDFReader`) which uses Node.js specific APIs (like `fs`, `child_process`, `crypto`).
If you need any of those classes, you have to import them instead directly through their file path in the package.
As the `PDFReader` is not working with the Edge runtime, here's how to use the `SimpleDirectoryReader` with the `LlamaParseReader` to load PDFs:
```typescript
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { LlamaParseReader } from "@llamaindex/cloud";
export const DATA_DIR = "./data";
export async function getDocuments() {
const reader = new SimpleDirectoryReader();
// Load PDFs using LlamaParseReader
return await reader.loadData({
directoryPath: DATA_DIR,
fileExtToReader: {
pdf: new LlamaParseReader({ resultType: "markdown" }),
},
});
}
```
> _Note_: Reader classes have to be added explicitly to the `fileExtToReader` map in the Edge version of the `SimpleDirectoryReader`.
You'll find a complete example with LlamaIndexTS here: https://github.com/run-llama/create_llama_projects/tree/main/nextjs-edge-llamaparse
</Tabs>
## Load file natively using Node.js Customization Hooks ## Load file natively using Node.js Customization Hooks
We have a helper utility to allow you to import a file in Node.js script. We have a helper utility to allow you to import a file in Node.js script.
```shell <Tabs groupId="llamaindex-or-readers" items={["llamaindex", "@llamaindex/readers"]} persist>
node --import @llamaindex/readers/node ./script.js ```shell tab="llamaindex"
``` node --import llamaindex/register ./script.js
```
```shell tab="@llamaindex/readers"
node --import @llamaindex/readers/node ./script.js
```
</Tabs>
```ts ```ts
import csv from './path/to/data.csv'; import csv from './path/to/data.csv';
@@ -15,7 +15,7 @@ By default, we will use `Settings.nodeParser` to split the document into nodes.
```ts twoslash ```ts twoslash
import { TextFileReader } from '@llamaindex/readers/text' import { TextFileReader } from '@llamaindex/readers/text'
import { SentenceSplitter } from 'llamaindex'; import { SentenceSplitter } from '@llamaindex/core/node-parser';
import { Settings } from 'llamaindex'; import { Settings } from 'llamaindex';
const nodeParser = new SentenceSplitter(); const nodeParser = new SentenceSplitter();
@@ -28,7 +28,7 @@ Settings.nodeParser = nodeParser;
The underlying text splitter will split text by sentences. It can also be used as a standalone module for splitting raw text. The underlying text splitter will split text by sentences. It can also be used as a standalone module for splitting raw text.
```ts twoslash ```ts twoslash
import { SentenceSplitter } from "llamaindex"; import { SentenceSplitter } from "@llamaindex/core/node-parser";
const splitter = new SentenceSplitter({ chunkSize: 1 }); const splitter = new SentenceSplitter({ chunkSize: 1 });
@@ -42,7 +42,7 @@ The `MarkdownNodeParser` is a more advanced `NodeParser` that can handle markdow
<Tabs items={["with reader", "with node:fs"]}> <Tabs items={["with reader", "with node:fs"]}>
```ts twoslash tab="with reader" ```ts twoslash tab="with reader"
import { MarkdownNodeParser } from "llamaindex"; import { MarkdownNodeParser } from "@llamaindex/core/node-parser";
import { MarkdownReader } from '@llamaindex/readers/markdown' import { MarkdownReader } from '@llamaindex/readers/markdown'
const reader = new MarkdownReader(); const reader = new MarkdownReader();
@@ -56,7 +56,8 @@ The `MarkdownNodeParser` is a more advanced `NodeParser` that can handle markdow
```ts twoslash tab="with node:fs" ```ts twoslash tab="with node:fs"
import fs from 'node:fs/promises'; import fs from 'node:fs/promises';
import { MarkdownNodeParser, Document } from "llamaindex"; import { MarkdownNodeParser } from "@llamaindex/core/node-parser";
import { Document } from '@llamaindex/core/schema';
const markdownNodeParser = new MarkdownNodeParser(); const markdownNodeParser = new MarkdownNodeParser();
const text = await fs.readFile('path/to/file.md', 'utf-8'); const text = await fs.readFile('path/to/file.md', 'utf-8');
@@ -81,7 +82,7 @@ It will split the code by AST nodes and then parse the nodes into a `Document` o
import TS from "tree-sitter-typescript"; import TS from "tree-sitter-typescript";
const parser = new Parser(); const parser = new Parser();
parser.setLanguage(TS.typescript as Parser.Language); parser.setLanguage(TS.typescript);
const codeSplitter = new CodeSplitter({ const codeSplitter = new CodeSplitter({
getParser: () => parser, getParser: () => parser,
}); });
@@ -99,7 +100,7 @@ It will split the code by AST nodes and then parse the nodes into a `Document` o
import TS from "tree-sitter-typescript"; import TS from "tree-sitter-typescript";
const parser = new Parser(); const parser = new Parser();
parser.setLanguage(TS.typescript as Parser.Language); parser.setLanguage(TS.typescript);
const codeSplitter = new CodeSplitter({ const codeSplitter = new CodeSplitter({
getParser: () => parser, getParser: () => parser,
}); });
@@ -20,5 +20,5 @@ LlamaIndex.TS provides tools for beginners, advanced users, and everyone in betw
className="w-full h-[440px]" className="w-full h-[440px]"
aria-label="LlamaIndex.TS Starter" aria-label="LlamaIndex.TS Starter"
aria-description="This is a starter example for LlamaIndex.TS, it shows the basic usage of the library." aria-description="This is a starter example for LlamaIndex.TS, it shows the basic usage of the library."
src="https://stackblitz.com/github/run-llama/LlamaIndexTS/tree/main/examples?embed=1&file=starter.ts" src="https://stackblitz.com/github/run-llama/LlamaIndexTS/tree/main/examples?file=starter.ts"
/> />
@@ -69,7 +69,7 @@ streamText({
For production deployments, you can use LlamaCloud to store and manage your documents: For production deployments, you can use LlamaCloud to store and manage your documents:
```typescript ```typescript
import { LlamaCloudIndex } from "@llamaindex/cloud"; import { LlamaCloudIndex } from "llamaindex";
// Create a LlamaCloud index // Create a LlamaCloud index
const index = await LlamaCloudIndex.fromDocuments({ const index = await LlamaCloudIndex.fromDocuments({
@@ -7,7 +7,6 @@
"what-is-llamaindex", "what-is-llamaindex",
"index", "index",
"getting_started", "getting_started",
"migration",
"guide", "guide",
"examples", "examples",
"modules", "modules",
@@ -1,97 +0,0 @@
---
title: Migrating from v0.8 to v0.9
---
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
Version 0.9 of LlamaIndex.TS introduces significant architectural changes to improve package size and runtime compatibility. The main goals of this release are:
1. Reduce the package size of the main `llamaindex` package by moving dependencies into provider packages, making it more suitable for serverless environments
2. Enable consistent code across different environments by using unified imports (no separate imports for Node.js and Edge runtimes)
## Major Changes
### Installing Provider Packages
In v0.9, you need to explicitly install the provider packages you want to use. The main `llamaindex` package no longer includes these dependencies by default.
### Updating Imports
You'll need to update your imports to get classes directly from their respective provider packages. Here's how to migrate different components:
### 1. AI Model Providers
Previously:
```typescript
import { OpenAI } from "llamaindex";
```
Now:
```typescript
import { OpenAI } from "@llamaindex/openai";
```
> Note: This examples requires installing the `@llamaindex/openai` package:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install @llamaindex/openai
```
```shell tab="yarn"
yarn add @llamaindex/openai
```
```shell tab="pnpm"
pnpm add @llamaindex/openai
```
</Tabs>
For more details on available AI model providers and their configuration, see the [LLMs documentation](/docs/llamaindex/modules/llms) and the [Embedding Models documentation](/docs/llamaindex/modules/embeddings).
### 2. Storage Providers
Previously:
```typescript
import { PineconeVectorStore } from "llamaindex";
```
Now:
```typescript
import { PineconeVectorStore } from "@llamaindex/pinecone";
```
For more information about available storage options, refer to the [Data Stores documentation](/docs/llamaindex/modules/data_stores).
### 3. Data Loaders
Previously:
```typescript
import { SimpleDirectoryReader } from "llamaindex";
```
Now:
```typescript
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
```
For more details about available data loaders and their usage, check the [Loading Data](/docs/llamaindex/guide/loading).
### 4. Prefer using `llamaindex` instead of `@llamaindex/core`
`llamaindex` is now re-exporting most of `@llamaindex/core`. To simplify imports, just use `import { ... } from "llamaindex"` instead of `import { ... } from "@llamaindex/core"`. This is possible because `llamaindex` is now a smaller package.
We might change imports internally in `@llamaindex/core` in the future. Let us know if you're missing something.
## Benefits of the Changes
- **Smaller Bundle Size**: By moving dependencies to separate packages, your application only includes the features you actually use
- **Runtime Consistency**: The same code works across different environments without environment-specific imports
- **Improved Serverless Support**: Reduced package size makes it easier to deploy to serverless environments with size limitations
## Need Help?
If you encounter any issues during migration, please:
1. Check our [GitHub repository](https://github.com/run-llama/LlamaIndexTS) for the latest updates
2. Join our [Discord community](https://discord.gg/dGcwcsnxhU) for support
3. Open an issue on GitHub if you find a bug or have a feature request
@@ -1,5 +0,0 @@
{
"title": "Migration",
"description": "Migration between different versions",
"pages": ["0.8-to-0.9"]
}
@@ -12,26 +12,9 @@ const chatEngine = new ContextChatEngine({ retriever });
const response = await chatEngine.chat({ message: query }); const response = await chatEngine.chat({ message: query });
``` ```
In short, you can use the chat engine by calling `index.asChatEngine()`. It will return a `ContextChatEngine` to start chatting.
```typescript
const chatEngine = index.asChatEngine();
```
You can also pass in options to the chat engine.
```typescript
const chatEngine = index.asChatEngine({
similarityTopK: 5,
systemPrompt: "You are a helpful assistant.",
});
```
The `chat` function also supports streaming, just add `stream: true` as an option: The `chat` function also supports streaming, just add `stream: true` as an option:
```typescript ```typescript
const chatEngine = index.asChatEngine();
const stream = await chatEngine.chat({ message: query, stream: true }); const stream = await chatEngine.chat({ message: query, stream: true });
for await (const chunk of stream) { for await (const chunk of stream) {
process.stdout.write(chunk.response); process.stdout.write(chunk.response);
@@ -6,28 +6,10 @@ A simple JSON data loader with various options.
Either parses the entire string, cleaning it and treat each line as an embedding or performs a recursive depth-first traversal yielding JSON paths. Either parses the entire string, cleaning it and treat each line as an embedding or performs a recursive depth-first traversal yielding JSON paths.
Supports streaming of large JSON data using [@discoveryjs/json-ext](https://github.com/discoveryjs/json-ext) Supports streaming of large JSON data using [@discoveryjs/json-ext](https://github.com/discoveryjs/json-ext)
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/readers
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/readers
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/readers
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { JSONReader } from "@llamaindex/readers/json"; import { JSONReader } from "llamaindex";
const file = "../../PATH/TO/FILE"; const file = "../../PATH/TO/FILE";
const content = new TextEncoder().encode("JSON_CONTENT"); const content = new TextEncoder().encode("JSON_CONTENT");
@@ -4,24 +4,6 @@ title: Image Retrieval
LlamaParse `json` mode supports extracting any images found in a page object by using the `getImages` function. They are downloaded to a local folder and can then be sent to a multimodal LLM for further processing. LlamaParse `json` mode supports extracting any images found in a page object by using the `getImages` function. They are downloaded to a local folder and can then be sent to a multimodal LLM for further processing.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/cloud @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/cloud @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/cloud @llamaindex/openai
```
</Tabs>
## Usage ## Usage
We use the `getImages` method to input our array of JSON objects, download the images to a specified folder and get a list of ImageNodes. We use the `getImages` method to input our array of JSON objects, download the images to a specified folder and get a list of ImageNodes.
@@ -37,10 +19,14 @@ const imageDicts = await reader.getImages(jsonObjs, "images");
You can create an index across both text and image nodes by requesting alternative text for the image from a multimodal LLM. You can create an index across both text and image nodes by requesting alternative text for the image from a multimodal LLM.
```ts ```ts
import { Document, ImageNode, VectorStoreIndex } from "llamaindex"; import {
import { LlamaParseReader } from "@llamaindex/cloud"; Document,
import { OpenAI } from "@llamaindex/openai"; ImageNode,
import { createMessageContent } from "llamaindex"; LlamaParseReader,
OpenAI,
VectorStoreIndex,
} from "llamaindex";
import { createMessageContent } from "llamaindex/synthesizers/utils";
const reader = new LlamaParseReader(); const reader = new LlamaParseReader();
async function main() { async function main() {
@@ -4,32 +4,12 @@ title: JSON Mode
In JSON mode, LlamaParse will return a data structure representing the parsed object. In JSON mode, LlamaParse will return a data structure representing the parsed object.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/cloud
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/cloud
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/cloud
```
</Tabs>
## Usage ## Usage
For Json mode, you need to use `loadJson`. The `resultType` is automatically set with this method. For Json mode, you need to use `loadJson`. The `resultType` is automatically set with this method.
More information about indexing the results on the next page. More information about indexing the results on the next page.
```ts ```ts
import { LlamaParseReader } from "@llamaindex/cloud";
const reader = new LlamaParseReader(); const reader = new LlamaParseReader();
async function main() { async function main() {
// Load the file and return an array of json objects // Load the file and return an array of json objects
@@ -79,8 +59,7 @@ All Readers share a `loadData` method with `SimpleDirectoryReader` that promises
However, a simple work around is to create a new reader class that extends `LlamaParseReader` and adds a new method or overrides `loadData`, wrapping around JSON mode, extracting the required values, and returning a Document object. However, a simple work around is to create a new reader class that extends `LlamaParseReader` and adds a new method or overrides `loadData`, wrapping around JSON mode, extracting the required values, and returning a Document object.
```ts ```ts
import { Document } from "llamaindex"; import { LlamaParseReader, Document } from "llamaindex";
import { LlamaParseReader } from "@llamaindex/cloud";
class LlamaParseReaderWithJson extends LlamaParseReader { class LlamaParseReaderWithJson extends LlamaParseReader {
// Override the loadData method // Override the loadData method
@@ -11,38 +11,6 @@ Document stores contain ingested document chunks, i.e. [Node](/docs/llamaindex/m
Check the [LlamaIndexTS Github](https://github.com/run-llama/LlamaIndexTS) for the most up to date overview of integrations. Check the [LlamaIndexTS Github](https://github.com/run-llama/LlamaIndexTS) for the most up to date overview of integrations.
## Using PostgreSQL as Document Store
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/postgres
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/postgres
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/postgres
```
</Tabs>
You can configure the `schemaName`, `tableName`, `namespace`, and
`connectionString`. If a `connectionString` is not
provided, it will use the environment variables `PGHOST`, `PGUSER`,
`PGPASSWORD`, `PGDATABASE` and `PGPORT`.
```typescript
import { Document, VectorStoreIndex, storageContextFromDefaults } from "llamaindex";
import { PostgresDocumentStore } from "@llamaindex/postgres";
const storageContext = await storageContextFromDefaults({
docStore: new PostgresDocumentStore(),
});
```
## API Reference ## API Reference
- [BaseDocumentStore](/docs/api/classes/BaseDocumentStore) - [BaseDocumentStore](/docs/api/classes/BaseDocumentStore)
@@ -5,13 +5,9 @@ title: Storage
Storage in LlamaIndex.TS works automatically once you've configured a Storage in LlamaIndex.TS works automatically once you've configured a
`StorageContext` object. `StorageContext` object.
Per default a local directory is used for storage. Depening on the storage type (i.e. doc stores, index stores or vector stores), you can configure a different persistence layer.
Most commonly a vector database is used as vector store.
## Local Storage ## Local Storage
You can configure the `persistDir` to define where to store the data locally. You can configure the `persistDir` and attach it to an index.
```typescript ```typescript
import { import {
@@ -30,6 +26,33 @@ const index = await VectorStoreIndex.fromDocuments([document], {
}); });
``` ```
## PostgreSQL Storage
You can configure the `schemaName`, `tableName`, `namespace`, and
`connectionString`. If a `connectionString` is not
provided, it will use the environment variables `PGHOST`, `PGUSER`,
`PGPASSWORD`, `PGDATABASE` and `PGPORT`.
```typescript
import {
Document,
VectorStoreIndex,
PostgresDocumentStore,
PostgresIndexStore,
storageContextFromDefaults,
} from "llamaindex";
const storageContext = await storageContextFromDefaults({
docStore: new PostgresDocumentStore(),
indexStore: new PostgresIndexStore(),
});
const document = new Document({ text: "Test Text" });
const index = await VectorStoreIndex.fromDocuments([document], {
storageContext,
});
```
## API Reference ## API Reference
- [StorageContext](/docs/api/interfaces/StorageContext) - [StorageContext](/docs/api/interfaces/StorageContext)
@@ -11,38 +11,6 @@ Index stores are underlying storage components that contain metadata(i.e. inform
Check the [LlamaIndexTS Github](https://github.com/run-llama/LlamaIndexTS) for the most up to date overview of integrations. Check the [LlamaIndexTS Github](https://github.com/run-llama/LlamaIndexTS) for the most up to date overview of integrations.
## Using PostgreSQL as Index Store
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/postgres
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/postgres
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/postgres
```
</Tabs>
You can configure the `schemaName`, `tableName`, `namespace`, and
`connectionString`. If a `connectionString` is not
provided, it will use the environment variables `PGHOST`, `PGUSER`,
`PGPASSWORD`, `PGDATABASE` and `PGPORT`.
```typescript
import { Document, VectorStoreIndex, storageContextFromDefaults } from "llamaindex";
import { PostgresIndexStore } from "@llamaindex/postgres";
const storageContext = await storageContextFromDefaults({
indexStore: new PostgresIndexStore(),
});
```
## API Reference ## API Reference
- [BaseIndexStore](/docs/api/classes/BaseIndexStore) - [BaseIndexStore](/docs/api/classes/BaseIndexStore)
@@ -21,4 +21,4 @@ Check the [LlamaIndexTS Github](https://github.com/run-llama/LlamaIndexTS) for t
## API Reference ## API Reference
- [BaseVectorStore](/docs/api/classes/BaseVectorStore) - [VectorStoreBase](/docs/api/classes/VectorStoreBase)
@@ -11,30 +11,11 @@ docker pull qdrant/qdrant
docker run -p 6333:6333 qdrant/qdrant docker run -p 6333:6333 qdrant/qdrant
``` ```
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/qdrant
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/qdrant
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/qdrant
```
</Tabs>
## Importing the modules ## Importing the modules
```ts ```ts
import fs from "node:fs/promises"; import fs from "node:fs/promises";
import { Document, VectorStoreIndex } from "llamaindex"; import { Document, VectorStoreIndex, QdrantVectorStore } from "llamaindex";
import { QdrantVectorStore } from "@llamaindex/qdrant";
``` ```
## Load the documents ## Load the documents
@@ -79,8 +60,7 @@ console.log(response.toString());
```ts ```ts
import fs from "node:fs/promises"; import fs from "node:fs/promises";
import { Document, VectorStoreIndex } from "llamaindex"; import { Document, VectorStoreIndex, QdrantVectorStore } from "llamaindex";
import { QdrantVectorStore } from "@llamaindex/qdrant";
async function main() { async function main() {
const path = "node_modules/llamaindex/examples/abramov.txt"; const path = "node_modules/llamaindex/examples/abramov.txt";
@@ -14,8 +14,13 @@ Our metadata extractor modules include the following "feature extractors":
Then you can chain the `Metadata Extractors` with the `IngestionPipeline` to extract metadata from a set of documents. Then you can chain the `Metadata Extractors` with the `IngestionPipeline` to extract metadata from a set of documents.
```ts ```ts
import { Document, IngestionPipeline, TitleExtractor, QuestionsAnsweredExtractor } from "llamaindex"; import {
import { OpenAI } from "@llamaindex/openai"; IngestionPipeline,
TitleExtractor,
QuestionsAnsweredExtractor,
Document,
OpenAI,
} from "llamaindex";
async function main() { async function main() {
const pipeline = new IngestionPipeline({ const pipeline = new IngestionPipeline({
@@ -5,27 +5,13 @@ title: DeepInfra
To use DeepInfra embeddings, you need to import `DeepInfraEmbedding` from llamaindex. To use DeepInfra embeddings, you need to import `DeepInfraEmbedding` from llamaindex.
Check out available embedding models [here](https://deepinfra.com/models/embeddings). Check out available embedding models [here](https://deepinfra.com/models/embeddings).
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/deepinfra
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/deepinfra
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/deepinfra
```
</Tabs>
```ts ```ts
import { Document, Settings, VectorStoreIndex } from "llamaindex"; import {
import { DeepInfraEmbedding } from "@llamaindex/deepinfra"; DeepInfraEmbedding,
Settings,
Document,
VectorStoreIndex,
} from "llamaindex";
// Update Embed Model // Update Embed Model
Settings.embedModel = new DeepInfraEmbedding(); Settings.embedModel = new DeepInfraEmbedding();
@@ -47,7 +33,7 @@ By default, DeepInfraEmbedding is using the sentence-transformers/clip-ViT-B-32
For example: For example:
```ts ```ts
import { DeepInfraEmbedding } from "@llamaindex/deepinfra"; import { DeepInfraEmbedding } from "llamaindex";
const model = "intfloat/e5-large-v2"; const model = "intfloat/e5-large-v2";
Settings.embedModel = new DeepInfraEmbedding({ Settings.embedModel = new DeepInfraEmbedding({
@@ -60,8 +46,7 @@ You can also set the `maxRetries` and `timeout` parameters when initializing `De
For example: For example:
```ts ```ts
import { Settings } from "llamaindex"; import { DeepInfraEmbedding, Settings } from "llamaindex";
import { DeepInfraEmbedding } from "@llamaindex/deepinfra";
const model = "intfloat/e5-large-v2"; const model = "intfloat/e5-large-v2";
const maxRetries = 5; const maxRetries = 5;
@@ -77,7 +62,7 @@ Settings.embedModel = new DeepInfraEmbedding({
Standalone usage: Standalone usage:
```ts ```ts
import { DeepInfraEmbedding } from "@llamaindex/deepinfra"; import { DeepInfraEmbedding } from "llamaindex";
import { config } from "dotenv"; import { config } from "dotenv";
// For standalone usage, you need to configure DEEPINFRA_API_TOKEN in .env file // For standalone usage, you need to configure DEEPINFRA_API_TOKEN in .env file
config(); config();
@@ -2,29 +2,10 @@
title: Gemini title: Gemini
--- ---
To use Gemini embeddings, you need to import `GeminiEmbedding` from `@llamaindex/google`. To use Gemini embeddings, you need to import `GeminiEmbedding` from `llamaindex`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/google
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/google
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/google
```
</Tabs>
```ts ```ts
import { Document, Settings, VectorStoreIndex } from "llamaindex"; import { GeminiEmbedding, Settings } from "llamaindex";
import { GeminiEmbedding, GEMINI_MODEL } from "@llamaindex/google";
// Update Embed Model // Update Embed Model
Settings.embedModel = new GeminiEmbedding(); Settings.embedModel = new GeminiEmbedding();
@@ -46,7 +27,7 @@ Per default, `GeminiEmbedding` is using the `gemini-pro` model. You can change t
For example: For example:
```ts ```ts
import { GEMINI_MODEL, GeminiEmbedding } from "@llamaindex/google"; import { GEMINI_MODEL, GeminiEmbedding } from "llamaindex";
Settings.embedModel = new GeminiEmbedding({ Settings.embedModel = new GeminiEmbedding({
model: GEMINI_MODEL.GEMINI_PRO_LATEST, model: GEMINI_MODEL.GEMINI_PRO_LATEST,
@@ -2,29 +2,10 @@
title: HuggingFace title: HuggingFace
--- ---
To use HuggingFace embeddings, you need to import `HuggingFaceEmbedding` from `@llamaindex/huggingface`. To use HuggingFace embeddings, you need to import `HuggingFaceEmbedding` from `llamaindex`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/huggingface
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/huggingface
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/huggingface
```
</Tabs>
```ts ```ts
import { Document, Settings, VectorStoreIndex } from "llamaindex"; import { HuggingFaceEmbedding, Settings } from "llamaindex";
import { HuggingFaceEmbedding } from "@llamaindex/huggingface";
// Update Embed Model // Update Embed Model
Settings.embedModel = new HuggingFaceEmbedding(); Settings.embedModel = new HuggingFaceEmbedding();
@@ -48,8 +29,6 @@ If you're not using a quantized model, set the `quantized` parameter to `false`.
For example, to use the not quantized `BAAI/bge-small-en-v1.5` model, you can use the following code: For example, to use the not quantized `BAAI/bge-small-en-v1.5` model, you can use the following code:
```ts ```ts
import { HuggingFaceEmbedding } from "@llamaindex/huggingface";
Settings.embedModel = new HuggingFaceEmbedding({ Settings.embedModel = new HuggingFaceEmbedding({
modelType: "BAAI/bge-small-en-v1.5", modelType: "BAAI/bge-small-en-v1.5",
quantized: false, quantized: false,
@@ -2,29 +2,10 @@
title: MistralAI title: MistralAI
--- ---
To use MistralAI embeddings, you need to import `MistralAIEmbedding` from `@llamaindex/mistral`. To use MistralAI embeddings, you need to import `MistralAIEmbedding` from `llamaindex`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/mistral
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/mistral
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/mistral
```
</Tabs>
```ts ```ts
import { Document, Settings, VectorStoreIndex } from "llamaindex"; import { MistralAIEmbedding, Settings } from "llamaindex";
import { MistralAIEmbedding } from "@llamaindex/mistral";
// Update Embed Model // Update Embed Model
Settings.embedModel = new MistralAIEmbedding({ Settings.embedModel = new MistralAIEmbedding({
@@ -14,28 +14,16 @@ To find out more about the latest features, updates, and available models, visit
## Setup ## Setup
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; First, you will need to install the `llamaindex` package.
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/mixedbread
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/mixedbread
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/mixedbread
```
</Tabs>
```bash
pnpm install llamaindex
```
Next, sign up for an API key at [mixedbread.ai](https://mixedbread.ai/). Once you have your API key, you can import the necessary modules and create a new instance of the `MixedbreadAIEmbeddings` class. Next, sign up for an API key at [mixedbread.ai](https://mixedbread.ai/). Once you have your API key, you can import the necessary modules and create a new instance of the `MixedbreadAIEmbeddings` class.
```ts ```ts
import { MixedbreadAIEmbeddings } from "@llamaindex/mixedbread"; import { MixedbreadAIEmbeddings, Document, Settings } from "llamaindex";
import { Document, Settings } from "llamaindex";
``` ```
## Usage with LlamaIndex ## Usage with LlamaIndex
@@ -2,7 +2,7 @@
title: Ollama title: Ollama
--- ---
To use Ollama embeddings, you need to import `OllamaEmbedding` from `@llamaindex/ollama`. To use Ollama embeddings, you need to import `OllamaEmbedding` from `llamaindex`.
Note that you need to pull the embedding model first before using it. Note that you need to pull the embedding model first before using it.
@@ -12,27 +12,8 @@ In the example below, we're using the [`nomic-embed-text`](https://ollama.com/li
ollama pull nomic-embed-text ollama pull nomic-embed-text
``` ```
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/ollama
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/ollama
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/ollama
```
</Tabs>
```ts ```ts
import { OllamaEmbedding } from "@llamaindex/ollama"; import { OllamaEmbedding, Settings } from "llamaindex";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
Settings.embedModel = new OllamaEmbedding({ model: "nomic-embed-text" }); Settings.embedModel = new OllamaEmbedding({ model: "nomic-embed-text" });
@@ -2,29 +2,10 @@
title: OpenAI title: OpenAI
--- ---
To use OpenAI embeddings, you need to import `OpenAIEmbedding` from `@llamaindex/openai`. To use OpenAI embeddings, you need to import `OpenAIEmbedding` from `llamaindex`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
```ts ```ts
import { OpenAIEmbedding } from "@llamaindex/openai"; import { OpenAIEmbedding, Settings } from "llamaindex";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
Settings.embedModel = new OpenAIEmbedding(); Settings.embedModel = new OpenAIEmbedding();
@@ -6,27 +6,8 @@ The embedding model in LlamaIndex is responsible for creating numerical represen
This can be explicitly updated through `Settings` This can be explicitly updated through `Settings`
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
```typescript ```typescript
import { OpenAIEmbedding } from "@llamaindex/openai"; import { OpenAIEmbedding, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.embedModel = new OpenAIEmbedding({ Settings.embedModel = new OpenAIEmbedding({
model: "text-embedding-ada-002", model: "text-embedding-ada-002",
@@ -10,21 +10,9 @@ This is useful for measuring if the response was correct. The evaluator returns
Firstly, you need to install the package: Firstly, you need to install the package:
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm i llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
Set the OpenAI API key: Set the OpenAI API key:
@@ -35,8 +23,7 @@ export OPENAI_API_KEY=your-api-key
Import the required modules: Import the required modules:
```ts ```ts
import { OpenAI } from "@llamaindex/openai"; import { CorrectnessEvaluator, OpenAI, Settings, Response } from "llamaindex";
import { CorrectnessEvaluator, Settings, Response } from "llamaindex";
``` ```
Let's setup gpt-4 for better results: Let's setup gpt-4 for better results:
@@ -12,22 +12,9 @@ This is useful for measuring if the response was hallucinated. The evaluator ret
Firstly, you need to install the package: Firstly, you need to install the package:
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm i llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
Set the OpenAI API key: Set the OpenAI API key:
@@ -38,12 +25,12 @@ export OPENAI_API_KEY=your-api-key
Import the required modules: Import the required modules:
```ts ```ts
import { OpenAI } from "@llamaindex/openai";
import { import {
Document, Document,
FaithfulnessEvaluator, FaithfulnessEvaluator,
Settings, OpenAI,
VectorStoreIndex, VectorStoreIndex,
Settings,
} from "llamaindex"; } from "llamaindex";
``` ```
@@ -10,22 +10,9 @@ It is useful for measuring if the response was relevant to the query. The evalua
Firstly, you need to install the package: Firstly, you need to install the package:
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm i llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
Set the OpenAI API key: Set the OpenAI API key:
@@ -36,11 +23,11 @@ export OPENAI_API_KEY=your-api-key
Import the required modules: Import the required modules:
```ts ```ts
import { OpenAI } from "@llamaindex/openai";
import { import {
Document,
RelevancyEvaluator, RelevancyEvaluator,
OpenAI,
Settings, Settings,
Document,
VectorStoreIndex, VectorStoreIndex,
} from "llamaindex"; } from "llamaindex";
``` ```
@@ -5,35 +5,18 @@ title: Ingestion Pipeline
An `IngestionPipeline` uses a concept of `Transformations` that are applied to input data. An `IngestionPipeline` uses a concept of `Transformations` that are applied to input data.
These `Transformations` are applied to your input data, and the resulting nodes are either returned or inserted into a vector database (if given). These `Transformations` are applied to your input data, and the resulting nodes are either returned or inserted into a vector database (if given).
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai @llamaindex/qdrant
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai @llamaindex/qdrant
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai @llamaindex/qdrant
```
</Tabs>
## Usage Pattern ## Usage Pattern
The simplest usage is to instantiate an IngestionPipeline like so: The simplest usage is to instantiate an IngestionPipeline like so:
```ts ```ts
import fs from "node:fs/promises"; import fs from "node:fs/promises";
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
import { import {
Document, Document,
IngestionPipeline, IngestionPipeline,
MetadataMode, MetadataMode,
OpenAIEmbedding,
TitleExtractor, TitleExtractor,
SentenceSplitter, SentenceSplitter,
} from "llamaindex"; } from "llamaindex";
@@ -75,14 +58,14 @@ Then, you can construct an index from that vector store later on.
```ts ```ts
import fs from "node:fs/promises"; import fs from "node:fs/promises";
import { OpenAIEmbedding } from "@llamaindex/openai";
import { QdrantVectorStore } from "@llamaindex/qdrant";
import { import {
Document, Document,
IngestionPipeline, IngestionPipeline,
MetadataMode, MetadataMode,
OpenAIEmbedding,
TitleExtractor, TitleExtractor,
SentenceSplitter, SentenceSplitter,
QdrantVectorStore,
VectorStoreIndex, VectorStoreIndex,
} from "llamaindex"; } from "llamaindex";
@@ -2,29 +2,10 @@
title: Anthropic title: Anthropic
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/anthropic
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/anthropic
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/anthropic
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { Settings } from "llamaindex"; import { Anthropic, Settings } from "llamaindex";
import { Anthropic } from "@llamaindex/anthropic";
Settings.llm = new Anthropic({ Settings.llm = new Anthropic({
apiKey: "<YOUR_API_KEY>", apiKey: "<YOUR_API_KEY>",
@@ -56,8 +37,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { Document, VectorStoreIndex, Settings } from "llamaindex"; import { Anthropic, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Anthropic } from "@llamaindex/anthropic";
Settings.llm = new Anthropic({ Settings.llm = new Anthropic({
apiKey: "<YOUR_API_KEY>", apiKey: "<YOUR_API_KEY>",
@@ -14,29 +14,10 @@ export AZURE_OPENAI_ENDPOINT="<YOUR ENDPOINT, see https://learn.microsoft.com/en
export AZURE_OPENAI_DEPLOYMENT="gpt-4" # or some other deployment name export AZURE_OPENAI_DEPLOYMENT="gpt-4" # or some other deployment name
``` ```
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { Settings } from "llamaindex"; import { OpenAI, Settings } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
Settings.llm = new OpenAI({ model: "gpt-4", temperature: 0 }); Settings.llm = new OpenAI({ model: "gpt-4", temperature: 0 });
``` ```
@@ -66,8 +47,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { Document, VectorStoreIndex, Settings } from "llamaindex"; import { OpenAI, Document, VectorStoreIndex, Settings } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
Settings.llm = new OpenAI({ model: "gpt-4", temperature: 0 }); Settings.llm = new OpenAI({ model: "gpt-4", temperature: 0 });
@@ -2,24 +2,6 @@
title: Bedrock title: Bedrock
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/community
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/community
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/community
```
</Tabs>
## Usage ## Usage
```ts ```ts
@@ -4,27 +4,8 @@ title: DeepInfra
Check out available LLMs [here](https://deepinfra.com/models/text-generation). Check out available LLMs [here](https://deepinfra.com/models/text-generation).
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/deepinfra
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/deepinfra
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/deepinfra
```
</Tabs>
```ts ```ts
import { DeepInfra } from "@llamaindex/deepinfra"; import { DeepInfra, Settings } from "llamaindex";
import { Settings } from "llamaindex";
// Get the API key from `DEEPINFRA_API_TOKEN` environment variable // Get the API key from `DEEPINFRA_API_TOKEN` environment variable
import { config } from "dotenv"; import { config } from "dotenv";
@@ -47,8 +28,6 @@ export DEEPINFRA_API_TOKEN="<YOUR_API_KEY>"
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -69,8 +48,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { DeepInfra } from "@llamaindex/deepinfra"; import { DeepInfra, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Document, VectorStoreIndex, Settings } from "llamaindex";
// Use custom LLM // Use custom LLM
const model = "meta-llama/Meta-Llama-3-8B-Instruct"; const model = "meta-llama/Meta-Llama-3-8B-Instruct";
@@ -2,29 +2,10 @@
title: Gemini title: Gemini
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/google
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/google
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/google
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { Gemini, GEMINI_MODEL } from "@llamaindex/google"; import { Gemini, Settings, GEMINI_MODEL } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new Gemini({ Settings.llm = new Gemini({
model: GEMINI_MODEL.GEMINI_PRO, model: GEMINI_MODEL.GEMINI_PRO,
@@ -38,7 +19,7 @@ To use Gemini via Vertex AI you can use `GeminiVertexSession`.
GeminiVertexSession accepts the env variables: `GOOGLE_VERTEX_LOCATION` and `GOOGLE_VERTEX_PROJECT` GeminiVertexSession accepts the env variables: `GOOGLE_VERTEX_LOCATION` and `GOOGLE_VERTEX_PROJECT`
```ts ```ts
import { Gemini, GEMINI_MODEL, GeminiVertexSession } from "@llamaindex/google"; import { Gemini, GEMINI_MODEL, GeminiVertexSession } from "llamaindex";
const gemini = new Gemini({ const gemini = new Gemini({
model: GEMINI_MODEL.GEMINI_PRO, model: GEMINI_MODEL.GEMINI_PRO,
@@ -66,8 +47,6 @@ To authenticate for production you'll have to use a [service account](https://cl
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -88,8 +67,13 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { Gemini, GEMINI_MODEL } from "@llamaindex/google"; import {
import { Document, VectorStoreIndex, Settings } from "llamaindex"; Gemini,
Document,
VectorStoreIndex,
Settings,
GEMINI_MODEL,
} from "llamaindex";
Settings.llm = new Gemini({ Settings.llm = new Gemini({
model: GEMINI_MODEL.GEMINI_PRO, model: GEMINI_MODEL.GEMINI_PRO,
@@ -5,24 +5,6 @@ title: Groq
import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock'; import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock';
import CodeSource from "!raw-loader!../../../../../../../../../examples/groq.ts"; import CodeSource from "!raw-loader!../../../../../../../../../examples/groq.ts";
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/groq
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/groq
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/groq
```
</Tabs>
## Usage ## Usage
First, create an API key at the [Groq Console](https://console.groq.com/keys). Then save it in your environment: First, create an API key at the [Groq Console](https://console.groq.com/keys). Then save it in your environment:
@@ -34,8 +16,7 @@ export GROQ_API_KEY=<your-api-key>
The initialize the Groq module. The initialize the Groq module.
```ts ```ts
import { Groq } from "@llamaindex/groq"; import { Groq, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new Groq({ Settings.llm = new Groq({
// If you do not wish to set your API key in the environment, you may // If you do not wish to set your API key in the environment, you may
@@ -49,8 +30,6 @@ Settings.llm = new Groq({
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -2,29 +2,10 @@
title: LLama2 title: LLama2
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/replicate
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/replicate
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/replicate
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { LlamaDeuce, DeuceChatStrategy } from "@llamaindex/replicate"; import { Ollama, Settings, DeuceChatStrategy } from "llamaindex";
import { Document, VectorStoreIndex, Settings } from "llamaindex";
Settings.llm = new LlamaDeuce({ chatStrategy: DeuceChatStrategy.META }); Settings.llm = new LlamaDeuce({ chatStrategy: DeuceChatStrategy.META });
``` ```
@@ -32,8 +13,12 @@ Settings.llm = new LlamaDeuce({ chatStrategy: DeuceChatStrategy.META });
## Usage with Replication ## Usage with Replication
```ts ```ts
import { Settings } from "llamaindex"; import {
import { LlamaDeuce, DeuceChatStrategy, ReplicateSession } from "@llamaindex/replicate"; Ollama,
ReplicateSession,
Settings,
DeuceChatStrategy,
} from "llamaindex";
const replicateSession = new ReplicateSession({ const replicateSession = new ReplicateSession({
replicateKey, replicateKey,
@@ -70,8 +55,13 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { LlamaDeuce, DeuceChatStrategy } from "@llamaindex/replicate"; import {
import { Document, VectorStoreIndex, Settings } from "llamaindex"; LlamaDeuce,
Document,
VectorStoreIndex,
Settings,
DeuceChatStrategy,
} from "llamaindex";
// Use the LlamaDeuce LLM // Use the LlamaDeuce LLM
Settings.llm = new LlamaDeuce({ chatStrategy: DeuceChatStrategy.META }); Settings.llm = new LlamaDeuce({ chatStrategy: DeuceChatStrategy.META });
@@ -2,29 +2,10 @@
title: Mistral title: Mistral
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/mistral
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/mistral
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/mistral
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { MistralAI } from "@llamaindex/mistral"; import { MistralAI, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new MistralAI({ Settings.llm = new MistralAI({
model: "mistral-tiny", model: "mistral-tiny",
@@ -37,8 +18,6 @@ Settings.llm = new MistralAI({
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -59,8 +38,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { MistralAI } from "@llamaindex/mistral"; import { MistralAI, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Document, VectorStoreIndex, Settings } from "llamaindex";
// Use the MistralAI LLM // Use the MistralAI LLM
Settings.llm = new MistralAI({ model: "mistral-tiny" }); Settings.llm = new MistralAI({ model: "mistral-tiny" });
@@ -2,30 +2,10 @@
title: Ollama title: Ollama
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/ollama
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/ollama
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/ollama
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { Ollama } from "@llamaindex/ollama"; import { Ollama, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = ollamaLLM; Settings.llm = ollamaLLM;
Settings.embedModel = ollamaLLM; Settings.embedModel = ollamaLLM;
@@ -36,8 +16,6 @@ Settings.embedModel = ollamaLLM;
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -58,8 +36,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { Ollama } from "@llamaindex/ollama"; import { Ollama, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Document, VectorStoreIndex, Settings } from "llamaindex";
import fs from "fs/promises"; import fs from "fs/promises";
@@ -2,28 +2,8 @@
title: OpenAI title: OpenAI
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
```ts ```ts
import { OpenAI } from "@llamaindex/openai"; import { OpenAI, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0, apiKey: <YOUR_API_KEY> }); Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0, apiKey: <YOUR_API_KEY> });
``` ```
@@ -39,8 +19,6 @@ export OPENAI_API_KEY="<YOUR_API_KEY>"
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -61,8 +39,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { OpenAI } from "@llamaindex/openai"; import { OpenAI, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
// Use the OpenAI LLM // Use the OpenAI LLM
Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 }); Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 });
@@ -2,30 +2,10 @@
title: Portkey LLM title: Portkey LLM
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/portkey-ai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/portkey-ai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/portkey-ai
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { Portkey } from "@llamaindex/portkey-ai"; import { Portkey, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new Portkey({ Settings.llm = new Portkey({
apiKey: "<YOUR_API_KEY>", apiKey: "<YOUR_API_KEY>",
@@ -37,8 +17,6 @@ Settings.llm = new Portkey({
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -59,8 +37,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { Portkey } from "@llamaindex/portkey-ai"; import { Portkey, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
// Use the Portkey LLM // Use the Portkey LLM
Settings.llm = new Portkey({ Settings.llm = new Portkey({
@@ -2,28 +2,10 @@
title: Together LLM title: Together LLM
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex
```
```shell tab="yarn"
yarn add llamaindex
```
```shell tab="pnpm"
pnpm add llamaindex
```
</Tabs>
## Usage ## Usage
```ts ```ts
import { Settings, TogetherLLM } from "llamaindex"; import { TogetherLLM, Settings } from "llamaindex";
Settings.llm = new TogetherLLM({ Settings.llm = new TogetherLLM({
apiKey: "<YOUR_API_KEY>", apiKey: "<YOUR_API_KEY>",
@@ -35,8 +17,6 @@ Settings.llm = new TogetherLLM({
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
```ts ```ts
import { Document, VectorStoreIndex } from "llamaindex";
const document = new Document({ text: essay, id_: "essay" }); const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
@@ -57,8 +37,7 @@ const results = await queryEngine.query({
## Full Example ## Full Example
```ts ```ts
import { TogetherLLM } from "@llamaindex/together"; import { TogetherLLM, Document, VectorStoreIndex, Settings } from "llamaindex";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
Settings.llm = new TogetherLLM({ Settings.llm = new TogetherLLM({
apiKey: "<YOUR_API_KEY>", apiKey: "<YOUR_API_KEY>",
@@ -2,31 +2,12 @@
title: Large Language Models (LLMs) title: Large Language Models (LLMs)
--- ---
The LLM is responsible for reading text and generating natural language responses to queries. By default, LlamaIndex.TS uses `gpt-4o`. The LLM is responsible for reading text and generating natural language responses to queries. By default, LlamaIndex.TS uses `gpt-3.5-turbo`.
The LLM can be explicitly updated through `Settings`. The LLM can be explicitly updated through `Settings`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
```typescript ```typescript
import { OpenAI } from "@llamaindex/openai"; import { OpenAI, Settings } from "llamaindex";
import { Settings } from "llamaindex";
Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 }); Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 });
``` ```
@@ -5,8 +5,7 @@ title: NodeParser
The `NodeParser` in LlamaIndex is responsible for splitting `Document` objects into more manageable `Node` objects. When you call `.fromDocuments()`, the `NodeParser` from the `Settings` is used to do this automatically for you. Alternatively, you can use it to split documents ahead of time. The `NodeParser` in LlamaIndex is responsible for splitting `Document` objects into more manageable `Node` objects. When you call `.fromDocuments()`, the `NodeParser` from the `Settings` is used to do this automatically for you. Alternatively, you can use it to split documents ahead of time.
```typescript ```typescript
import { Document } from "llamaindex"; import { Document, SentenceSplitter } from "llamaindex";
import { SentenceSplitter } from "llamaindex";
const nodeParser = new SentenceSplitter(); const nodeParser = new SentenceSplitter();
@@ -31,7 +30,6 @@ The `MarkdownNodeParser` is a more advanced `NodeParser` that can handle markdow
```typescript ```typescript
import { MarkdownNodeParser } from "llamaindex"; import { MarkdownNodeParser } from "llamaindex";
import { Document } from "llamaindex";
const nodeParser = new MarkdownNodeParser(); const nodeParser = new MarkdownNodeParser();
@@ -8,28 +8,20 @@ The Cohere Reranker is a postprocessor that uses the Cohere API to rerank the re
Firstly, you will need to install the `llamaindex` package. Firstly, you will need to install the `llamaindex` package.
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm install llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/cohere @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/cohere @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/cohere @llamaindex/openai
```
</Tabs>
Now, you will need to sign up for an API key at [Cohere](https://cohere.ai/). Once you have your API key you can import the necessary modules and create a new instance of the `CohereRerank` class. Now, you will need to sign up for an API key at [Cohere](https://cohere.ai/). Once you have your API key you can import the necessary modules and create a new instance of the `CohereRerank` class.
```ts ```ts
import { OpenAI } from "@llamaindex/openai"; import {
import { CohereRerank } from "@llamaindex/cohere"; CohereRerank,
import { Document, Settings, VectorStoreIndex } from "llamaindex"; Document,
OpenAI,
VectorStoreIndex,
Settings,
} from "llamaindex";
``` ```
## Load and index documents ## Load and index documents
@@ -2,24 +2,6 @@
title: Node Postprocessors title: Node Postprocessors
--- ---
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/cohere @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/cohere @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/cohere @llamaindex/openai
```
</Tabs>
## Concept ## Concept
Node postprocessors are a set of modules that take a set of nodes, and apply some kind of transformation or filtering before returning them. Node postprocessors are a set of modules that take a set of nodes, and apply some kind of transformation or filtering before returning them.
@@ -33,8 +15,12 @@ LlamaIndex offers several node postprocessors for immediate use, while also prov
An example of using a node postprocessors is below: An example of using a node postprocessors is below:
```ts ```ts
import { CohereRerank } from "@llamaindex/cohere"; import {
import { Node, NodeWithScore, SimilarityPostprocessor, TextNode } from "llamaindex"; Node,
NodeWithScore,
SimilarityPostprocessor,
CohereRerank,
} from "llamaindex";
const nodes: NodeWithScore[] = [ const nodes: NodeWithScore[] = [
{ {
@@ -74,9 +60,7 @@ Most commonly, node-postprocessors will be used in a query engine, where they ar
### Using Node Postprocessors in a Query Engine ### Using Node Postprocessors in a Query Engine
```ts ```ts
import { CohereRerank } from "@llamaindex/cohere"; import { Node, NodeWithScore, SimilarityPostprocessor, CohereRerank, Settings } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { Node, NodeWithScore, SimilarityPostprocessor, Settings, TextNode } from "llamaindex";
// Use OpenAI LLM // Use OpenAI LLM
Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0.1 }); Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0.1 });
@@ -94,9 +78,9 @@ const nodes: NodeWithScore[] = [
// cohere rerank: rerank nodes given query using trained model // cohere rerank: rerank nodes given query using trained model
const reranker = new CohereRerank({ const reranker = new CohereRerank({
apiKey: "<COHERE_API_KEY>", apiKey: "<COHERE_API_KEY>,
topN: 2, topN: 2,
}); })
const document = new Document({ text: "essay", id_: "essay" }); const document = new Document({ text: "essay", id_: "essay" });
@@ -8,28 +8,20 @@ The Jina AI Reranker is a postprocessor that uses the Jina AI Reranker API to re
Firstly, you will need to install the `llamaindex` package. Firstly, you will need to install the `llamaindex` package.
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm install llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai
```
</Tabs>
Now, you will need to sign up for an API key at [Jina AI](https://jina.ai/reranker). Once you have your API key you can import the necessary modules and create a new instance of the `JinaAIReranker` class. Now, you will need to sign up for an API key at [Jina AI](https://jina.ai/reranker). Once you have your API key you can import the necessary modules and create a new instance of the `JinaAIReranker` class.
```ts ```ts
import { OpenAI } from "@llamaindex/openai"; import {
import { Document, Settings, VectorStoreIndex, JinaAIReranker } from "llamaindex"; JinaAIReranker,
Document,
OpenAI,
VectorStoreIndex,
Settings,
} from "llamaindex";
``` ```
## Load and index documents ## Load and index documents
@@ -17,33 +17,20 @@ To find out more about the latest features and updates, visit the [mixedbread.ai
First, you will need to install the `llamaindex` package. First, you will need to install the `llamaindex` package.
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm install llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai @llamaindex/mixedbread
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai @llamaindex/mixedbread
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai @llamaindex/mixedbread
```
</Tabs>
Next, sign up for an API key at [mixedbread.ai](https://mixedbread.ai/). Once you have your API key, you can import the necessary modules and create a new instance of the `MixedbreadAIReranker` class. Next, sign up for an API key at [mixedbread.ai](https://mixedbread.ai/). Once you have your API key, you can import the necessary modules and create a new instance of the `MixedbreadAIReranker` class.
```ts ```ts
import { import {
MixedbreadAIReranker,
Document, Document,
OpenAI,
VectorStoreIndex, VectorStoreIndex,
Settings, Settings,
} from "llamaindex"; } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { MixedbreadAIReranker } from "@llamaindex/mixedbread";
``` ```
## Usage with LlamaIndex ## Usage with LlamaIndex
@@ -10,27 +10,19 @@ You can also check our multi-tenancy blog post to see how metadata filtering can
Firstly if you haven't already, you need to install the `llamaindex` package: Firstly if you haven't already, you need to install the `llamaindex` package:
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm i llamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai @llamaindex/chroma
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai @llamaindex/chroma
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai @llamaindex/chroma
```
</Tabs>
Then you can import the necessary modules from `llamaindex`: Then you can import the necessary modules from `llamaindex`:
```ts ```ts
import { Document, VectorStoreIndex, storageContextFromDefaults } from "llamaindex"; import {
import { ChromaVectorStore } from "@llamaindex/chroma"; ChromaVectorStore,
Document,
VectorStoreIndex,
storageContextFromDefaults,
} from "llamaindex";
const collectionName = "dog_colors"; const collectionName = "dog_colors";
``` ```
@@ -103,8 +95,12 @@ Besides using the equal operator (`==`), you can also use a whole set of differe
## Full Code ## Full Code
```ts ```ts
import { Document, VectorStoreIndex, storageContextFromDefaults } from "llamaindex"; import {
import { ChromaVectorStore } from "@llamaindex/chroma"; ChromaVectorStore,
Document,
VectorStoreIndex,
storageContextFromDefaults,
} from "llamaindex";
const collectionName = "dog_colors"; const collectionName = "dog_colors";
@@ -8,24 +8,13 @@ In this tutorial, we define a custom router query engine that selects one out of
First, we need to install import the necessary modules from `llamaindex`: First, we need to install import the necessary modules from `llamaindex`:
import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ```bash
pnpm i lamaindex
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist> ```
```shell tab="npm"
npm install llamaindex @llamaindex/openai @llamaindex/readers
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/openai @llamaindex/readers
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/openai @llamaindex/readers
```
</Tabs>
```ts ```ts
import { import {
OpenAI,
RouterQueryEngine, RouterQueryEngine,
SimpleDirectoryReader, SimpleDirectoryReader,
SentenceSplitter, SentenceSplitter,
@@ -33,8 +22,6 @@ import {
VectorStoreIndex, VectorStoreIndex,
Settings, Settings,
} from "llamaindex"; } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
``` ```
## Loading Data ## Loading Data
@@ -116,6 +103,7 @@ console.log({
```ts ```ts
import { import {
OpenAI,
RouterQueryEngine, RouterQueryEngine,
SimpleDirectoryReader, SimpleDirectoryReader,
SentenceSplitter, SentenceSplitter,
@@ -123,8 +111,6 @@ import {
VectorStoreIndex, VectorStoreIndex,
Settings, Settings,
} from "llamaindex"; } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
Settings.llm = new OpenAI(); Settings.llm = new OpenAI();
Settings.nodeParser = new SentenceSplitter({ Settings.nodeParser = new SentenceSplitter({
@@ -18,7 +18,7 @@ The ResponseSynthesizer is responsible for sending the query, nodes, and prompt
chunk. chunk.
```typescript ```typescript
import { NodeWithScore, TextNode, ResponseSynthesizer } from "llamaindex"; import { NodeWithScore, ResponseSynthesizer, TextNode } from "llamaindex";
const responseSynthesizer = new ResponseSynthesizer(); const responseSynthesizer = new ResponseSynthesizer();
@@ -13,22 +13,6 @@ When a step function is added to a workflow, you need to specify the input and o
You can create a `Workflow` to do anything! Build an agent, a RAG flow, an extraction flow, or anything else you want. You can create a `Workflow` to do anything! Build an agent, a RAG flow, an extraction flow, or anything else you want.
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install @llamaindex/workflow
```
```shell tab="yarn"
yarn add @llamaindex/workflow
```
```shell tab="pnpm"
pnpm add @llamaindex/workflow
```
</Tabs>
## Getting Started ## Getting Started
As an illustrative example, let's consider a naive workflow where a joke is generated and then critiqued. As an illustrative example, let's consider a naive workflow where a joke is generated and then critiqued.
@@ -50,59 +34,51 @@ Events are user-defined classes that extend `WorkflowEvent` and contain arbitrar
```typescript ```typescript
const llm = new OpenAI(); const llm = new OpenAI();
... ...
const jokeFlow = new Workflow<unknown, string, string>(); const jokeFlow = new Workflow({ verbose: true });
``` ```
Our workflow is implemented by initiating the `Workflow` class with three generic types: the context type (unknown), input type (string), and output type (string). The context type is `unknown`, as we're not using a shared context in this example. Our workflow is implemented by initiating the `Workflow` class. For simplicity, we created a `OpenAI` llm instance.
For simplicity, we created an `OpenAI` llm instance that we're using for inference in our workflow.
### Workflow Entry Points ### Workflow Entry Points
```typescript ```typescript
const generateJoke = async (_: unknown, ev: StartEvent<string>) => { const generateJoke = async (_context: Context, ev: StartEvent) => {
const prompt = `Write your best joke about ${ev.data}.`; const prompt = `Write your best joke about ${ev.data.input}.`;
const response = await llm.complete({ prompt }); const response = await llm.complete({ prompt });
return new JokeEvent({ joke: response.text }); return new JokeEvent({ joke: response.text });
}; };
``` ```
Here, we come to the entry-point of our workflow. While events are user-defined, there are two special-case events, the `StartEvent` and the `StopEvent`. These events are predefined, but we can specify the payload type using generic types. We're using `StartEvent<string>` to indicate that we're going to send an input of type string. Here, we come to the entry-point of our workflow. While events are user-defined, there are two special-case events, the `StartEvent` and the `StopEvent`. Here, the `StartEvent` signifies where to send the initial workflow input.
To add this step to the workflow, we use the `addStep` method with an object specifying the input and output event types: The `StartEvent` is a bit of a special object since it can hold arbitrary attributes. Here, we accessed the topic with `ev.data.input`.
At this point, you may have noticed that we haven't explicitly told the workflow what events are handled by which steps.
To do so, we use the `addStep` method which adds a step to the workflow. The first argument is the event type that the step will handle, and the second argument is the previously defined step function:
```typescript ```typescript
jokeFlow.addStep( jokeFlow.addStep(StartEvent, generateJoke);
{
inputs: [StartEvent<string>],
outputs: [JokeEvent],
},
generateJoke
);
``` ```
### Workflow Exit Points ### Workflow Exit Points
```typescript ```typescript
const critiqueJoke = async (_: unknown, ev: JokeEvent) => { const critiqueJoke = async (_context: Context, ev: JokeEvent) => {
const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`; const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt }); const response = await llm.complete({ prompt });
return new StopEvent(response.text); return new StopEvent({ result: response.text });
}; };
``` ```
Here, we have our second and last step in the workflow. We know it's the last step because the special `StopEvent` is returned. When the workflow encounters a returned `StopEvent`, it immediately stops the workflow and returns the result. Note that we're using the generic type `StopEvent<string>` to indicate that we're returning a string. Here, we have our second, and last step, in the workflow. We know its the last step because the special `StopEvent` is returned. When the workflow encounters a returned `StopEvent`, it immediately stops the workflow and returns whatever the result was.
Add this step to the workflow: In this case, the result is a string, but it could be a map, array, or any other object.
Don't forget to add the step to the workflow:
```typescript ```typescript
jokeFlow.addStep( jokeFlow.addStep(JokeEvent, critiqueJoke);
{
inputs: [JokeEvent],
outputs: [StopEvent<string>],
},
critiqueJoke
);
``` ```
### Running the Workflow ### Running the Workflow
@@ -114,25 +90,42 @@ console.log(result.data.result);
Lastly, we run the workflow. The `.run()` method is async, so we use await here to wait for the result. Lastly, we run the workflow. The `.run()` method is async, so we use await here to wait for the result.
## Working with Shared Context/State ### Validating Workflows
Optionally, you can choose to use a shared context between steps by specifying a context type when creating the workflow. Here's an example where multiple steps access a shared state: To tell the workflow what events are produced by each step, you can optionally provide a third argument to `addStep` to specify the output event type:
```typescript ```typescript
import { HandlerContext } from "@llamaindex/workflow"; jokeFlow.addStep(StartEvent, generateJoke, { outputs: JokeEvent });
jokeFlow.addStep(JokeEvent, critiqueJoke, { outputs: StopEvent });
```
type MyContextData = { To validate a workflow, you need to call the `validate` method:
query: string;
intermediateResults: any[];
}
const query = async (context: HandlerContext<MyContextData>, ev: MyEvent) => { ```typescript
jokeFlow.validate();
```
To automatically validate a workflow when you run it, you can set the `validate` flag to `true` at initialization:
```typescript
const jokeFlow = new Workflow({ verbose: true, validate: true });
```
## Working with Global Context/State
Optionally, you can choose to use global context between steps. For example, maybe multiple steps access the original `query` input from the user. You can store this in global context so that every step has access.
```typescript
import { Context } from "@llamaindex/core/workflow";
const query = async (context: Context, ev: MyEvent) => {
// get the query from the context // get the query from the context
const query = context.data.query; const query = context.get("query");
// do something with context and event // do something with context and event
const val = ... const val = ...
const result = ...
// store in context // store in context
context.data.intermediateResults.push(val); context.set("key", val);
return new StopEvent({ result }); return new StopEvent({ result });
}; };
@@ -145,15 +138,28 @@ The context does more than just hold data, it also provides utilities to buffer
For example, you might have a step that waits for a query and retrieved nodes before synthesizing a response: For example, you might have a step that waits for a query and retrieved nodes before synthesizing a response:
```typescript ```typescript
const synthesize = async (context: Context, ev1: QueryEvent, ev2: RetrieveEvent) => { const synthesize = async (context: Context, ev: QueryEvent | RetrieveEvent) => {
const subPrompts = [`Answer this query using the context provided: ${ev1.data.query}`, `Context: ${ev2.data.context}`]; const events = context.collectEvents(ev, [QueryEvent | RetrieveEvent]);
const prompt = subPrompts.join("\n"); if (!events) {
return;
}
const prompt = events
.map((event) => {
if (event instanceof QueryEvent) {
return `Answer this query using the context provided: ${event.data.query}`;
} else if (event instanceof RetrieveEvent) {
return `Context: ${event.data.context}`;
}
return "";
})
.join("\n");
const response = await llm.complete({ prompt }); const response = await llm.complete({ prompt });
return new StopEvent({ result: response.text }); return new StopEvent({ result: response.text });
}; };
``` ```
Passing multiple events, we can buffer and wait for ALL expected events to arrive. The receiving step function will only be called once all events have arrived. Using `ctx.collectEvents()` we can buffer and wait for ALL expected events to arrive. This function will only return events (in the requested order) once all events have arrived.
## Manually Triggering Events ## Manually Triggering Events
-1
View File
@@ -1,2 +1 @@
logs logs
.temp
-13
View File
@@ -1,18 +1,5 @@
# @llamaindex/core-e2e # @llamaindex/core-e2e
## 0.1.0
### Minor Changes
- 6a4a737: Remove re-exports from llamaindex main package
## 0.0.8
### Patch Changes
- 34faf48: chore: move vector stores to their own packages
- 9456616: refactor: @llamaindex/postgres
## 0.0.7 ## 0.0.7
### Patch Changes ### Patch Changes
-11
View File
@@ -1,11 +0,0 @@
# @llamaindex/cloudflare-hono
## 0.1.0
### Minor Changes
- 6a4a737: Remove re-exports from llamaindex main package
### Patch Changes
- b490376: Remove deprecated ServiceContext
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloudflare-hono", "name": "@llamaindex/cloudflare-hono",
"version": "0.1.0", "version": "0.0.0",
"private": true, "private": true,
"scripts": { "scripts": {
"deploy": "wrangler deploy", "deploy": "wrangler deploy",
+12 -9
View File
@@ -17,21 +17,23 @@ app.post("/llm", async (c) => {
const { message } = await c.req.json(); const { message } = await c.req.json();
const { extractText } = await import("@llamaindex/core/utils");
const { const {
extractText,
QueryEngineTool, QueryEngineTool,
serviceContextFromDefaults,
VectorStoreIndex, VectorStoreIndex,
OpenAIAgent,
Settings, Settings,
SentenceSplitter, OpenAI,
OpenAIEmbedding,
} = await import("llamaindex"); } = await import("llamaindex");
const { OpenAIAgent, OpenAI, OpenAIEmbedding } = await import( const { PineconeVectorStore } = await import(
"@llamaindex/openai" "llamaindex/vector-store/PineconeVectorStore"
); );
const { PineconeVectorStore } = await import("@llamaindex/pinecone"); const llm = new OpenAI({
Settings.llm = new OpenAI({
model: "gpt-4o-mini", model: "gpt-4o-mini",
apiKey: c.env.OPENAI_API_KEY, apiKey: c.env.OPENAI_API_KEY,
}); });
@@ -41,7 +43,8 @@ app.post("/llm", async (c) => {
apiKey: c.env.OPENAI_API_KEY, apiKey: c.env.OPENAI_API_KEY,
}); });
Settings.nodeParser = new SentenceSplitter({ const serviceContext = serviceContextFromDefaults({
llm,
chunkSize: 8191, chunkSize: 8191,
chunkOverlap: 0, chunkOverlap: 0,
}); });
@@ -50,7 +53,7 @@ app.post("/llm", async (c) => {
namespace: "8xolsn4ulEQGdhnhP76yCzfLHdOZ", namespace: "8xolsn4ulEQGdhnhP76yCzfLHdOZ",
}); });
const index = await VectorStoreIndex.fromVectorStore(store); const index = await VectorStoreIndex.fromVectorStore(store, serviceContext);
const retriever = index.asRetriever({ const retriever = index.asRetriever({
similarityTopK: 3, similarityTopK: 3,
@@ -1,65 +1,5 @@
# @llamaindex/cloudflare-worker-agent-test # @llamaindex/cloudflare-worker-agent-test
## 0.0.134
### Patch Changes
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- llamaindex@0.9.0
## 0.0.133
### Patch Changes
- llamaindex@0.8.37
## 0.0.132
### Patch Changes
- Updated dependencies [cb608b5]
- llamaindex@0.8.36
## 0.0.131
### Patch Changes
- llamaindex@0.8.35
## 0.0.130
### Patch Changes
- Updated dependencies [9f8ad37]
- llamaindex@0.8.34
## 0.0.129
### Patch Changes
- llamaindex@0.8.33
## 0.0.128
### Patch Changes
- Updated dependencies [34faf48]
- Updated dependencies [4df1fe6]
- Updated dependencies [9456616]
- Updated dependencies [1931bbc]
- llamaindex@0.8.32
## 0.0.127
### Patch Changes
- Updated dependencies [d211b7a]
- Updated dependencies [0ebbfc1]
- llamaindex@0.8.31
## 0.0.126 ## 0.0.126
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloudflare-worker-agent-test", "name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.134", "version": "0.0.126",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -1,40 +1,5 @@
# @llamaindex/llama-parse-browser-test # @llamaindex/llama-parse-browser-test
## 0.0.45
### Patch Changes
- @llamaindex/cloud@3.0.0
## 0.0.44
### Patch Changes
- Updated dependencies [1c908fd]
- @llamaindex/cloud@2.0.24
## 0.0.43
### Patch Changes
- Updated dependencies [cb608b5]
- @llamaindex/cloud@2.0.23
## 0.0.42
### Patch Changes
- Updated dependencies [d6c270e]
- @llamaindex/cloud@2.0.22
## 0.0.41
### Patch Changes
- Updated dependencies [5dec9f9]
- Updated dependencies [fd9c829]
- @llamaindex/cloud@2.0.21
## 0.0.40 ## 0.0.40
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/llama-parse-browser-test", "name": "@llamaindex/llama-parse-browser-test",
"private": true, "private": true,
"version": "0.0.45", "version": "0.0.40",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
@@ -10,7 +10,7 @@
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5.7.2", "typescript": "^5.7.2",
"vite": "^5.4.12", "vite": "^5.4.11",
"vite-plugin-wasm": "^3.3.0" "vite-plugin-wasm": "^3.3.0"
}, },
"dependencies": { "dependencies": {
+1 -1
View File
@@ -1,4 +1,4 @@
import { LlamaParseReader } from "@llamaindex/cloud"; import { LlamaParseReader } from "@llamaindex/cloud/reader";
import "./style.css"; import "./style.css";
new LlamaParseReader(); new LlamaParseReader();
-60
View File
@@ -1,65 +1,5 @@
# @llamaindex/next-agent-test # @llamaindex/next-agent-test
## 0.1.134
### Patch Changes
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- llamaindex@0.9.0
## 0.1.133
### Patch Changes
- llamaindex@0.8.37
## 0.1.132
### Patch Changes
- Updated dependencies [cb608b5]
- llamaindex@0.8.36
## 0.1.131
### Patch Changes
- llamaindex@0.8.35
## 0.1.130
### Patch Changes
- Updated dependencies [9f8ad37]
- llamaindex@0.8.34
## 0.1.129
### Patch Changes
- llamaindex@0.8.33
## 0.1.128
### Patch Changes
- Updated dependencies [34faf48]
- Updated dependencies [4df1fe6]
- Updated dependencies [9456616]
- Updated dependencies [1931bbc]
- llamaindex@0.8.32
## 0.1.127
### Patch Changes
- Updated dependencies [d211b7a]
- Updated dependencies [0ebbfc1]
- llamaindex@0.8.31
## 0.1.126 ## 0.1.126
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-agent-test", "name": "@llamaindex/next-agent-test",
"version": "0.1.134", "version": "0.1.126",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -1,65 +1,5 @@
# test-edge-runtime # test-edge-runtime
## 0.1.133
### Patch Changes
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- llamaindex@0.9.0
## 0.1.132
### Patch Changes
- llamaindex@0.8.37
## 0.1.131
### Patch Changes
- Updated dependencies [cb608b5]
- llamaindex@0.8.36
## 0.1.130
### Patch Changes
- llamaindex@0.8.35
## 0.1.129
### Patch Changes
- Updated dependencies [9f8ad37]
- llamaindex@0.8.34
## 0.1.128
### Patch Changes
- llamaindex@0.8.33
## 0.1.127
### Patch Changes
- Updated dependencies [34faf48]
- Updated dependencies [4df1fe6]
- Updated dependencies [9456616]
- Updated dependencies [1931bbc]
- llamaindex@0.8.32
## 0.1.126
### Patch Changes
- Updated dependencies [d211b7a]
- Updated dependencies [0ebbfc1]
- llamaindex@0.8.31
## 0.1.125 ## 0.1.125
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/nextjs-edge-runtime-test", "name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.133", "version": "0.1.125",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -1,71 +1,5 @@
# @llamaindex/next-node-runtime # @llamaindex/next-node-runtime
## 0.1.0
### Minor Changes
- 6a4a737: Remove re-exports from llamaindex main package
### Patch Changes
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- llamaindex@0.9.0
- @llamaindex/huggingface@0.0.36
- @llamaindex/readers@2.0.0
## 0.0.114
### Patch Changes
- llamaindex@0.8.37
## 0.0.113
### Patch Changes
- Updated dependencies [cb608b5]
- llamaindex@0.8.36
## 0.0.112
### Patch Changes
- llamaindex@0.8.35
## 0.0.111
### Patch Changes
- Updated dependencies [9f8ad37]
- llamaindex@0.8.34
## 0.0.110
### Patch Changes
- llamaindex@0.8.33
## 0.0.109
### Patch Changes
- Updated dependencies [34faf48]
- Updated dependencies [4df1fe6]
- Updated dependencies [9456616]
- Updated dependencies [1931bbc]
- llamaindex@0.8.32
## 0.0.108
### Patch Changes
- Updated dependencies [d211b7a]
- Updated dependencies [0ebbfc1]
- llamaindex@0.8.31
## 0.0.107 ## 0.0.107
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-node-runtime-test", "name": "@llamaindex/next-node-runtime-test",
"version": "0.1.0", "version": "0.0.107",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -9,8 +9,6 @@
}, },
"dependencies": { "dependencies": {
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*",
"next": "15.0.3", "next": "15.0.3",
"react": "18.3.1", "react": "18.3.1",
"react-dom": "18.3.1" "react-dom": "18.3.1"
@@ -1,13 +1,13 @@
"use server"; "use server";
import { HuggingFaceEmbedding } from "@llamaindex/huggingface";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { import {
OpenAI, OpenAI,
OpenAIAgent, OpenAIAgent,
QueryEngineTool, QueryEngineTool,
Settings, Settings,
SimpleDirectoryReader,
VectorStoreIndex, VectorStoreIndex,
} from "llamaindex"; } from "llamaindex";
import { HuggingFaceEmbedding } from "llamaindex/embeddings/HuggingFaceEmbedding";
Settings.llm = new OpenAI({ Settings.llm = new OpenAI({
apiKey: process.env.NEXT_PUBLIC_OPENAI_KEY ?? "FAKE_KEY_TO_PASS_TESTS", apiKey: process.env.NEXT_PUBLIC_OPENAI_KEY ?? "FAKE_KEY_TO_PASS_TESTS",
@@ -1,65 +1,5 @@
# @llamaindex/waku-query-engine-test # @llamaindex/waku-query-engine-test
## 0.0.134
### Patch Changes
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- llamaindex@0.9.0
## 0.0.133
### Patch Changes
- llamaindex@0.8.37
## 0.0.132
### Patch Changes
- Updated dependencies [cb608b5]
- llamaindex@0.8.36
## 0.0.131
### Patch Changes
- llamaindex@0.8.35
## 0.0.130
### Patch Changes
- Updated dependencies [9f8ad37]
- llamaindex@0.8.34
## 0.0.129
### Patch Changes
- llamaindex@0.8.33
## 0.0.128
### Patch Changes
- Updated dependencies [34faf48]
- Updated dependencies [4df1fe6]
- Updated dependencies [9456616]
- Updated dependencies [1931bbc]
- llamaindex@0.8.32
## 0.0.127
### Patch Changes
- Updated dependencies [d211b7a]
- Updated dependencies [0ebbfc1]
- llamaindex@0.8.31
## 0.0.126 ## 0.0.126
### Patch Changes ### Patch Changes
+1 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/waku-query-engine-test", "name": "@llamaindex/waku-query-engine-test",
"version": "0.0.134", "version": "0.0.126",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -9,7 +9,6 @@
"start": "waku start" "start": "waku start"
}, },
"dependencies": { "dependencies": {
"@llamaindex/env": "workspace:*",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"react": "19.0.0-rc-5c56b873-20241107", "react": "19.0.0-rc-5c56b873-20241107",
"react-dom": "19.0.0-rc-5c56b873-20241107", "react-dom": "19.0.0-rc-5c56b873-20241107",
@@ -1,14 +1,13 @@
"use server"; "use server";
import { fs } from "@llamaindex/env";
import { BaseQueryEngine, Document, VectorStoreIndex } from "llamaindex"; import { BaseQueryEngine, Document, VectorStoreIndex } from "llamaindex";
import { readFile } from "node:fs/promises";
let _queryEngine: BaseQueryEngine; let _queryEngine: BaseQueryEngine;
async function lazyLoadQueryEngine() { async function lazyLoadQueryEngine() {
if (!_queryEngine) { if (!_queryEngine) {
const path = "node_modules/llamaindex/examples/abramov.txt"; const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8"); const essay = await readFile(path, "utf-8");
// Create Document object with essay // Create Document object with essay
const document = new Document({ text: essay, id_: path }); const document = new Document({ text: essay, id_: path });
+2 -2
View File
@@ -1,7 +1,7 @@
import { Anthropic, AnthropicAgent } from "@llamaindex/anthropic";
import { extractText } from "@llamaindex/core/utils"; import { extractText } from "@llamaindex/core/utils";
import { consola } from "consola"; import { consola } from "consola";
import { FunctionTool, Settings, type LLM } from "llamaindex"; import { Anthropic, FunctionTool, Settings, type LLM } from "llamaindex";
import { AnthropicAgent } from "llamaindex/agent/anthropic";
import { ok } from "node:assert"; import { ok } from "node:assert";
import { beforeEach, test } from "node:test"; import { beforeEach, test } from "node:test";
import { getWeatherTool, sumNumbersTool } from "./fixtures/tools.js"; import { getWeatherTool, sumNumbersTool } from "./fixtures/tools.js";
+1 -2
View File
@@ -1,7 +1,6 @@
import { ClipEmbedding } from "@llamaindex/clip";
import type { LoadTransformerEvent } from "@llamaindex/env/multi-model"; import type { LoadTransformerEvent } from "@llamaindex/env/multi-model";
import { setTransformers } from "@llamaindex/env/multi-model"; import { setTransformers } from "@llamaindex/env/multi-model";
import { ImageNode, Settings } from "llamaindex"; import { ClipEmbedding, ImageNode, Settings } from "llamaindex";
import assert from "node:assert"; import assert from "node:assert";
import { type Mock, test } from "node:test"; import { type Mock, test } from "node:test";
-86
View File
@@ -1,86 +0,0 @@
import { execSync } from "node:child_process";
import { mkdir, rm, writeFile } from "node:fs/promises";
import { resolve } from "node:path";
import { test } from "node:test";
import { testRootDir } from "./utils.js";
await test("cjs/esm dual module check", async (t) => {
const esmImports = `import fs from 'node:fs/promises'
import { Document, MetadataMode, VectorStoreIndex } from 'llamaindex'
import { OpenAIEmbedding } from '@llamaindex/openai'
import { Settings } from '@llamaindex/core/global'`;
const cjsRequire = `const fs = require('fs').promises
const { Document, MetadataMode, VectorStoreIndex } = require('llamaindex')
const { OpenAIEmbedding } = require('@llamaindex/openai')
const { Settings } = require('@llamaindex/core/global')`;
const mainCode = `
async function main() {
Settings.embedModel = new OpenAIEmbedding({
model: 'text-embedding-3-small',
apiKey: '${process.env.OPENAI_API_KEY}',
})
const model = Settings.embedModel
if (model == null) {
process.exit(-1)
}
}
main().catch(console.error)`;
t.before(async () => {
await mkdir(resolve(testRootDir, ".temp"), {
recursive: true,
mode: 0o755,
});
});
t.after(async () => {
await rm(resolve(testRootDir, ".temp"), {
recursive: true,
force: true,
});
});
await t.test("cjs", async () => {
const cjsCode = `${cjsRequire}\n${mainCode}`;
const filePath = resolve(
testRootDir,
".temp",
`${crypto.randomUUID()}.cjs`,
);
await writeFile(filePath, cjsCode, "utf-8");
execSync(`${process.argv[0]} ${filePath}`, {
cwd: process.cwd(),
});
});
await t.test("esm", async () => {
const esmCode = `${esmImports}\n${mainCode}`;
const filePath = resolve(
testRootDir,
".temp",
`${crypto.randomUUID()}.mjs`,
);
await writeFile(filePath, esmCode, "utf-8");
execSync(`${process.argv[0]} ${filePath}`, {
cwd: process.cwd(),
});
});
const specialConditions = ["edge-light", "workerd", "react-server"];
for (const condition of specialConditions) {
await t.test(condition, async () => {
const esmCode = `${esmImports}\n${mainCode}`;
const filePath = resolve(
testRootDir,
".temp",
`${crypto.randomUUID()}.mjs`,
);
await writeFile(filePath, esmCode, "utf-8");
execSync(`${process.argv[0]} ${filePath} -C ${condition}`, {
cwd: process.cwd(),
});
});
}
});
+1 -1
View File
@@ -1,6 +1,6 @@
import { PGVectorStore } from "@llamaindex/postgres";
import { config } from "dotenv"; import { config } from "dotenv";
import { Document, VectorStoreQueryMode } from "llamaindex"; import { Document, VectorStoreQueryMode } from "llamaindex";
import { PGVectorStore } from "llamaindex/vector-store/PGVectorStore";
import assert from "node:assert"; import assert from "node:assert";
import { test } from "node:test"; import { test } from "node:test";
import pg from "pg"; import pg from "pg";
+5 -3
View File
@@ -1,8 +1,10 @@
import { Document, MetadataMode } from "@llamaindex/core/schema"; import { Document, MetadataMode } from "@llamaindex/core/schema";
import { OpenAIEmbedding } from "@llamaindex/openai";
import { PineconeVectorStore } from "@llamaindex/pinecone";
import { config } from "dotenv"; import { config } from "dotenv";
import { VectorStoreIndex } from "llamaindex"; import {
OpenAIEmbedding,
PineconeVectorStore,
VectorStoreIndex,
} from "llamaindex";
import assert from "node:assert"; import assert from "node:assert";
import { test } from "node:test"; import { test } from "node:test";
+1 -5
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/e2e", "name": "@llamaindex/e2e",
"private": true, "private": true,
"version": "0.1.0", "version": "0.0.7",
"type": "module", "type": "module",
"scripts": { "scripts": {
"e2e": "node --import tsx --import ./mock-register.js --test ./node/**/*.e2e.ts", "e2e": "node --import tsx --import ./mock-register.js --test ./node/**/*.e2e.ts",
@@ -14,10 +14,6 @@
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"@llamaindex/ollama": "workspace:*", "@llamaindex/ollama": "workspace:*",
"@llamaindex/openai": "workspace:*", "@llamaindex/openai": "workspace:*",
"@llamaindex/pinecone": "workspace:*",
"@llamaindex/postgres": "workspace:*",
"@llamaindex/clip": "workspace:*",
"@llamaindex/anthropic": "workspace:*",
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"@types/pg": "^8.11.8", "@types/pg": "^8.11.8",
"@huggingface/transformers": "^3.0.2", "@huggingface/transformers": "^3.0.2",

Some files were not shown because too many files have changed in this diff Show More