Compare commits

...

46 Commits

Author SHA1 Message Date
Alex Yang 335f2df626 chore: fix lock file 2025-02-27 12:31:11 -08:00
github-actions[bot] ee963644bf Release 0.9.4 (#1689)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 12:28:48 -08:00
Alex Yang cb256f24ae feat: support gpt-4.5 (#1688) 2025-02-27 12:24:33 -08:00
Alex Yang 1ccc04ecb5 chore: fix changeset 2025-02-27 12:17:12 -08:00
Brian Lange 034639153b feat: Voyage embeddings (#1574)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-02-27 10:22:33 +07:00
patryktop 1914b52708 feat: add Claude 3.7 Sonnet model to community package (#1683) 2025-02-26 14:38:14 -08:00
Alex Yang cb021e7196 feat(node-parser): support async function (#1682) 2025-02-26 08:59:51 -08:00
ratacat c2aa836b35 docs: upgrade remote ollama embeddings (#1680) 2025-02-25 11:39:16 -08:00
github-actions[bot] 3b0f55f1ea Release 0.9.3 (#1676)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-02-25 16:53:30 +07:00
Marcus Schiesser a9c6144eec feat: stream thinking tokens for claude 3.7 (#1679) 2025-02-25 16:48:12 +07:00
Marcus Schiesser 3564244ced chore: add claude 3.7 support (#1678) 2025-02-25 15:18:45 +07:00
Gunnar Holwerda d952e68ec4 Fix refine synthesizer empty source nodes behavior (#1677) 2025-02-24 10:56:21 +07:00
Tushar Sonawane 5c026e839f feat(vectorstore): adds firestore vector store support (#1600) 2025-02-21 16:23:50 +07:00
github-actions[bot] 9c1c5b4d50 Release 0.9.2 (#1673)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-21 10:57:11 +07:00
Thuc Pham c902fcbc33 chore: bump llamacloud openapi (#1674) 2025-02-20 17:47:41 +07:00
Thuc Pham 88d776f392 fix: enhance error message in llamacloud (#1672) 2025-02-20 16:33:34 +07:00
github-actions[bot] 6fcc6bcb84 Release @llamaindex/anthropic@0.1.2 (#1671)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-20 12:56:33 +07:00
Thuc Pham be74207945 fix: dont add empty text block to tool call (#1670) 2025-02-20 12:47:43 +07:00
Alex Yang 6be223dfad chore: bump version (#1668) 2025-02-19 19:28:12 +08:00
Alex Yang 4cbfdb5f5c ci: only run in pull request (#1669) 2025-02-19 19:11:53 +08:00
github-actions[bot] 9767d1c004 Release 0.9.1 (#1664)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <14026360+himself65@users.noreply.github.com>
2025-02-19 18:15:41 +08:00
Alex Yang e831b28627 ci: add size limit check (#1667) 2025-02-19 18:05:28 +08:00
Alex Yang cc50c9c2d4 chore: trigger env package release 2025-02-19 17:59:38 +08:00
Thuc Pham 954140776e fix: missing document entrypoints (#1663)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-02-14 17:06:23 +07:00
Savas Ziplies 6d37d440a6 refactor(agent): changed regex for tool use extraction to look for optional "Input:" prefix to comply with Cohere command-r models (#1654) 2025-02-14 15:17:03 +07:00
Alex Yang e724f7e9f2 fix: cjs module resolve esm module unexpectedly (#1662) 2025-02-14 15:52:37 +08:00
Alex Yang 1b029ae525 test: add cjs smoke test (#1660) 2025-02-14 14:28:09 +08:00
Marcus Schiesser d1db2189c9 docs: update starter to ask for api key (#1661) 2025-02-14 12:14:51 +07:00
Alex Yang 2c5b4030c9 chore: bump bunchee (#1645) 2025-02-14 09:41:32 +08:00
Alex Yang 96eb597059 fix: bundler issue default in default (#1653) 2025-02-14 09:20:39 +08:00
Marcus Schiesser 04098d55ff chore: fix pnpm lock (#1658) 2025-02-13 17:49:21 +07:00
Marcus Schiesser 335a6b9e88 chore: add pathe to examples (#1657) 2025-02-13 17:44:30 +07:00
github-actions[bot] c2a345ebb1 Release 0.9.0 (#1643)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-02-13 17:34:06 +07:00
Marcus Schiesser d3fa729a30 Cleanups before 0.9 release (#1656) 2025-02-13 17:26:22 +07:00
Thuc Pham c7c08005ec fix: fumadoc build fail (#1655) 2025-02-13 16:24:28 +07:00
Alex Yang bb0ae5e321 chore: fix pkg.pr.new issue (#1651) 2025-02-12 21:19:29 +08:00
Marcus Schiesser f4588bc770 chore: Remove readers package from llamaindex (#1649) 2025-02-12 17:16:41 +07:00
Marcus Schiesser b49037612d remove service context (#1618)
Co-authored-by: thucpn <thucsh2@gmail.com>
2025-02-12 15:10:11 +07:00
Thuc Pham a87efb91a4 docs: update chat engine docs (#1648) 2025-02-12 12:45:26 +07:00
Thuc Pham 6a4a73760b chore: remove re-exporting packages in llamaindex (#1624)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-02-12 12:44:52 +07:00
Alex Yang 1564831158 ci: fix pkg-pr-new release (#1646) 2025-02-11 22:42:42 +08:00
Alex Yang 4d94f6e50d test: smoke test with cjs/esm dual package (#1644) 2025-02-11 15:02:06 +08:00
Thuc Pham 7bd5d9340c docs: update workflow doc (#1637)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-02-11 13:41:11 +07:00
Thuc Pham d924c63162 feat: asChatEngine function for index (#1640) 2025-02-11 12:57:15 +07:00
github-actions[bot] 83cff1277c Release 0.8.37 (#1642)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-02-11 12:48:58 +07:00
Marcus Schiesser 1c908fd852 Revert "fix: bundle output incorrect (#1638)" (#1641) 2025-02-11 12:27:11 +07:00
292 changed files with 15915 additions and 10042 deletions
+1 -1
View File
@@ -25,4 +25,4 @@ jobs:
run: pnpm run build
- name: Pre Release
run: pnpx pkg-pr-new publish ./packages/* ./packages/providers/*
run: pnpx pkg-pr-new publish --pnpm ./packages/* ./packages/providers/* ./packages/providers/storage/*
+25 -5
View File
@@ -83,11 +83,6 @@ jobs:
run: pnpm install
- name: 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
run: pnpm run type-check
- name: Run Circular Dependency Check
@@ -103,6 +98,7 @@ jobs:
- nextjs-node-runtime
- waku-query-engine
- llama-parse-browser
- vite-import-llamaindex
runs-on: ubuntu-latest
name: Build LlamaIndex Example (${{ matrix.packages }})
steps:
@@ -121,6 +117,30 @@ jobs:
run: pnpm run build
working-directory: e2e/examples/${{ matrix.packages }}
size-limit:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
name: Size Limit
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build llamaindex
run: pnpm run build
- uses: andresz1/size-limit-action@94bc357df29c36c8f8d50ea497c3e225c3c95d1d
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
directory: e2e/examples/vite-import-llamaindex
skip_step: "install"
build_script: build
package_manager: pnpm
typecheck-examples:
runs-on: ubuntu-latest
+1 -3
View File
@@ -1,3 +1 @@
pnpm format
pnpm lint
npx lint-staged
pnpm run lint-staged
+1
View File
@@ -0,0 +1 @@
LlamaIndexTS
+2 -1
View File
@@ -14,5 +14,6 @@
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"prettier.prettierPath": "./node_modules/prettier"
"prettier.prettierPath": "./node_modules/prettier",
"prettier.configPath": "prettier.config.mjs"
}
+7
View File
@@ -41,8 +41,15 @@ pnpm install
### Build the packages
You'll need Turbo to build the packages. If you don't have it, you can run it with `pnpx`.
To build all packages, run:
```shell
# Build all packages
pnpx turbo build --filter "./packages/*"
# Or if you have turbo installed, you can run:
turbo build --filter "./packages/*"
```
+7 -33
View File
@@ -65,44 +65,18 @@ yarn add llamaindex
See our official document: <https://ts.llamaindex.ai/docs/llamaindex/getting_started/>
### Tips when using in non-Node.js environments
### Adding provider packages
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.
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.
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`).
For example, to use the OpenAI LLM, you would install the following package:
If you need any of those classes, you have to import them instead directly though their file path in the package.
Here's an example for importing the `PineconeVectorStore` class:
```typescript
import { PineconeVectorStore } from "llamaindex/vector-store/PineconeVectorStore";
```shell
npm install @llamaindex/openai
pnpm install @llamaindex/openai
yarn add @llamaindex/openai
```
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
Check out our NextJS playground at https://llama-playground.vercel.app/. The source is available at https://github.com/run-llama/ts-playground
+83
View File
@@ -1,5 +1,88 @@
# @llamaindex/doc
## 0.1.4
### Patch Changes
- Updated dependencies [cb256f2]
- Updated dependencies [cb021e7]
- @llamaindex/openai@0.1.55
- @llamaindex/core@0.5.3
- llamaindex@0.9.4
- @llamaindex/cloud@3.0.4
- @llamaindex/node-parser@1.0.3
- @llamaindex/readers@2.0.3
## 0.1.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/cloud@3.0.3
- llamaindex@0.9.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/openai@0.1.54
- @llamaindex/readers@2.0.2
## 0.1.2
### Patch Changes
- Updated dependencies [c902fcb]
- Updated dependencies [88d776f]
- @llamaindex/cloud@3.0.2
- llamaindex@0.9.2
## 0.1.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
- @llamaindex/cloud@3.0.1
- @llamaindex/core@0.5.1
- @llamaindex/node-parser@1.0.1
- @llamaindex/openai@0.1.53
- @llamaindex/readers@2.0.1
- @llamaindex/workflow@0.0.11
## 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
+14 -13
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.0.40",
"version": "0.1.4",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
@@ -28,25 +28,26 @@
"@radix-ui/react-slot": "^1.1.0",
"@radix-ui/react-tooltip": "^1.1.4",
"@vercel/functions": "^1.5.0",
"@scalar/api-client-react": "^1.1.25",
"ai": "^3.4.33",
"class-variance-authority": "^0.7.0",
"clsx": "2.1.1",
"foxact": "^0.2.41",
"framer-motion": "^11.11.17",
"fumadocs-core": "14.6.0",
"fumadocs-docgen": "1.3.2",
"fumadocs-mdx": "^11.1.2",
"fumadocs-openapi": "^5.8.2",
"fumadocs-twoslash": "^2.0.2",
"fumadocs-typescript": "^3.0.2",
"fumadocs-ui": "14.6.0",
"fumadocs-core": "^14.7.7",
"fumadocs-docgen": "^1.3.7",
"fumadocs-mdx": "^11.5.3",
"fumadocs-openapi": "^5.12.0",
"fumadocs-twoslash": "^2.0.3",
"fumadocs-typescript": "^3.0.3",
"fumadocs-ui": "^14.7.7",
"hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"next": "15.1.7",
"next-themes": "^0.4.3",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-icons": "^5.3.0",
"react-monaco-editor": "^0.56.2",
"react-text-transition": "^3.1.0",
@@ -54,8 +55,8 @@
"rehype-katex": "^7.0.1",
"remark-math": "^6.0.0",
"rimraf": "^6.0.1",
"shiki": "1.23.1",
"shiki-magic-move": "^0.5.0",
"shiki": "^2.3.2",
"shiki-magic-move": "^1.0.0",
"swr": "^2.2.5",
"tailwind-merge": "^2.5.2",
"tailwindcss-animate": "^1.0.7",
@@ -57,4 +57,3 @@ In this example, the Context-Aware Agent uses the retriever to fetch relevant co
## Available Context-Aware Agents
- `OpenAIContextAwareAgent`: A context-aware agent using OpenAI's models.
- `AnthropicContextAwareAgent`: A context-aware agent using Anthropic's models.
@@ -2,6 +2,8 @@
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!
## Using a local model via Ollama
@@ -24,7 +26,23 @@ The first time you run it will also automatically download and install the model
### Switch the LLM in your code
To tell LlamaIndex to use a local LLM, use the `Settings` object:
To switch the LLM in your code, you first need to make sure to install the package for the Ollama model provider:
<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
Settings.llm = new Ollama({
@@ -34,7 +52,25 @@ Settings.llm = new Ollama({
### 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 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 from Huggingface 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
Settings.embedModel = new HuggingFaceEmbedding({
@@ -1,6 +1,6 @@
---
title: Installation
description: Install llamaindex by running a single command.
description: How to install llamaindex packages.
---
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
@@ -70,10 +70,8 @@ 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`...
- 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 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).
- `@llamaindex/core` is designed to work in all JavaScript environment, including Cloudflare Worker. If you find any issue, please report to us.
- Some of LlamaIndex.TS packages are not available in Cloudflare Worker, for example `@llamaindex/readers` and `@llamaindex/huggingface`.
- The main `llamaindex` 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.
## 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.
@@ -15,7 +15,7 @@ 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
```bash
npm install llamaindex
npm install llamaindex @llamaindex/openai @llamaindex/readers @llamaindex/huggingface
```
## Choose your model
@@ -40,7 +40,7 @@ We'll be bringing in `SimpleDirectoryReader`, `HuggingFaceEmbedding`, `VectorSto
import { FunctionTool, QueryEngineTool, Settings, VectorStoreIndex } from "llamaindex";
import { OpenAI, OpenAIAgent } from "@llamaindex/openai";
import { HuggingFaceEmbedding } from "@llamaindex/huggingface";
import { SimpleDirectoryReader } from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
```
### Add an embedding model
@@ -10,7 +10,7 @@ import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
<Accordions>
<Accordion title="Install @llamaindex/readers">
If you want to only use reader modules, you can install `@llamaindex/readers`
If you want to use the reader module, you need to install `@llamaindex/readers`
<Tabs groupId="install-llamaindex" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
@@ -31,72 +31,73 @@ import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
We offer readers for different file formats.
<Tabs groupId="llamaindex-or-readers" items={["llamaindex", "@llamaindex/readers"]} persist>
```ts twoslash tab="llamaindex"
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
```
```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>
```ts twoslash
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
```
## SimpleDirectoryReader
`SimpleDirectoryReader` is the simplest way to load data from local files into LlamaIndex.
<Tabs groupId="llamaindex-or-readers" items={["llamaindex", "@llamaindex/readers"]} persist>
```ts twoslash
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
```ts twoslash tab="llamaindex"
import { SimpleDirectoryReader } from "llamaindex";
const reader = new SimpleDirectoryReader()
const documents = await reader.loadData("./data")
// ^?
const reader = new SimpleDirectoryReader()
const documents = await reader.loadData("./data")
// ^?
const texts = documents.map(doc => doc.getText())
// ^?
```
```ts twoslash tab="@llamaindex/readers"
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())
// ^?
```
## Tips when using in non-Node.js environments
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
We have a helper utility to allow you to import a file in Node.js script.
<Tabs groupId="llamaindex-or-readers" items={["llamaindex", "@llamaindex/readers"]} persist>
```shell tab="llamaindex"
node --import llamaindex/register ./script.js
```
```shell tab="@llamaindex/readers"
node --import @llamaindex/readers/node ./script.js
```
</Tabs>
```shell
node --import @llamaindex/readers/node ./script.js
```
```ts
import csv from './path/to/data.csv';
@@ -81,7 +81,7 @@ It will split the code by AST nodes and then parse the nodes into a `Document` o
import TS from "tree-sitter-typescript";
const parser = new Parser();
parser.setLanguage(TS.typescript);
parser.setLanguage(TS.typescript as Parser.Language);
const codeSplitter = new CodeSplitter({
getParser: () => parser,
});
@@ -99,7 +99,7 @@ It will split the code by AST nodes and then parse the nodes into a `Document` o
import TS from "tree-sitter-typescript";
const parser = new Parser();
parser.setLanguage(TS.typescript);
parser.setLanguage(TS.typescript as Parser.Language);
const codeSplitter = new CodeSplitter({
getParser: () => parser,
});
@@ -20,5 +20,5 @@ LlamaIndex.TS provides tools for beginners, advanced users, and everyone in betw
className="w-full h-[440px]"
aria-label="LlamaIndex.TS Starter"
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?file=starter.ts"
src="https://stackblitz.com/github/run-llama/LlamaIndexTS/tree/main/examples?embed=1&file=starter.ts"
/>
@@ -7,6 +7,7 @@
"what-is-llamaindex",
"index",
"getting_started",
"migration",
"guide",
"examples",
"modules",
@@ -0,0 +1,97 @@
---
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
@@ -0,0 +1,5 @@
{
"title": "Migration",
"description": "Migration between different versions",
"pages": ["0.8-to-0.9"]
}
@@ -12,9 +12,26 @@ const chatEngine = new ContextChatEngine({ retriever });
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:
```typescript
const chatEngine = index.asChatEngine();
const stream = await chatEngine.chat({ message: query, stream: true });
for await (const chunk of stream) {
process.stdout.write(chunk.response);
@@ -0,0 +1,46 @@
---
title: VoyageAI
---
To use VoyageAI embeddings, you need to import `VoyageAIEmbedding` from `@llamaindex/voyage-ai`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/voyage-ai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/voyage-ai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/voyage-ai
```
</Tabs>
```ts
import { VoyageAIEmbedding } from "@llamaindex/voyage-ai";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
Settings.embedModel = new VoyageAIEmbedding();
const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]);
const queryEngine = index.asQueryEngine();
const query = "What is the meaning of life?";
const results = await queryEngine.query({
query,
});
```
## API Reference
- [VoyageAIEmbedding](/docs/api/classes/VoyageAIEmbedding)
@@ -37,6 +37,31 @@ Settings.embedModel = new OpenAIEmbedding({
For local embeddings, you can use the [HuggingFace](/docs/llamaindex/modules/embeddings/available_embeddings/huggingface) embedding model.
## Local Ollama Embeddings With Remote Host
Ollama provides a way to run embedding models locally or connect to a remote Ollama instance. This is particularly useful when you need to:
- Run embeddings without relying on external API services
- Use custom embedding models
- Connect to a shared Ollama instance in your network
The ENV variable method you will find elsewhere sometimes may not work with the OllamaEmbedding class. Also note, you'll need to change the host
in the Ollama server to `0.0.0.0` to allow connections from other machines.
To use Ollama embeddings with a remote host, you need to specify the host URL in the configuration like this:
```typescript
import { OllamaEmbedding } from "@llamaindex/ollama";
import { Settings } from "llamaindex";
// Configure Ollama with a remote host
Settings.embedModel = new OllamaEmbedding({
model: "nomic-embed-text",
config: {
host: "http://your-ollama-host:11434"
}
});
```
## Available Embeddings
Most available embeddings are listed in the sidebar on the left.
@@ -34,7 +34,7 @@ import {
Settings,
} from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
```
## Loading Data
@@ -124,7 +124,7 @@ import {
Settings,
} from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
Settings.llm = new OpenAI();
Settings.nodeParser = new SentenceSplitter({
@@ -13,6 +13,22 @@ 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.
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
As an illustrative example, let's consider a naive workflow where a joke is generated and then critiqued.
@@ -34,51 +50,59 @@ Events are user-defined classes that extend `WorkflowEvent` and contain arbitrar
```typescript
const llm = new OpenAI();
...
const jokeFlow = new Workflow({ verbose: true });
const jokeFlow = new Workflow<unknown, string, string>();
```
Our workflow is implemented by initiating the `Workflow` class. For simplicity, we created a `OpenAI` llm instance.
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.
For simplicity, we created an `OpenAI` llm instance that we're using for inference in our workflow.
### Workflow Entry Points
```typescript
const generateJoke = async (_context: Context, ev: StartEvent) => {
const prompt = `Write your best joke about ${ev.data.input}.`;
const generateJoke = async (_: unknown, ev: StartEvent<string>) => {
const prompt = `Write your best joke about ${ev.data}.`;
const response = await llm.complete({ prompt });
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`. Here, the `StartEvent` signifies where to send the initial workflow input.
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.
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:
To add this step to the workflow, we use the `addStep` method with an object specifying the input and output event types:
```typescript
jokeFlow.addStep(StartEvent, generateJoke);
jokeFlow.addStep(
{
inputs: [StartEvent<string>],
outputs: [JokeEvent],
},
generateJoke
);
```
### Workflow Exit Points
```typescript
const critiqueJoke = async (_context: Context, ev: JokeEvent) => {
const critiqueJoke = async (_: unknown, ev: JokeEvent) => {
const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt });
return new StopEvent({ result: response.text });
return new StopEvent(response.text);
};
```
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.
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.
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:
Add this step to the workflow:
```typescript
jokeFlow.addStep(JokeEvent, critiqueJoke);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [StopEvent<string>],
},
critiqueJoke
);
```
### Running the Workflow
@@ -90,42 +114,25 @@ 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.
### Validating Workflows
## Working with Shared Context/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:
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:
```typescript
jokeFlow.addStep(StartEvent, generateJoke, { outputs: JokeEvent });
jokeFlow.addStep(JokeEvent, critiqueJoke, { outputs: StopEvent });
```
import { HandlerContext } from "@llamaindex/workflow";
To validate a workflow, you need to call the `validate` method:
type MyContextData = {
query: string;
intermediateResults: any[];
}
```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";
const query = async (context: Context, ev: MyEvent) => {
const query = async (context: HandlerContext<MyContextData>, ev: MyEvent) => {
// get the query from the context
const query = context.get("query");
const query = context.data.query;
// do something with context and event
const val = ...
const result = ...
// store in context
context.set("key", val);
context.data.intermediateResults.push(val);
return new StopEvent({ result });
};
@@ -138,28 +145,15 @@ 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:
```typescript
const synthesize = async (context: Context, ev: QueryEvent | RetrieveEvent) => {
const events = context.collectEvents(ev, [QueryEvent | RetrieveEvent]);
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 synthesize = async (context: Context, ev1: QueryEvent, ev2: RetrieveEvent) => {
const subPrompts = [`Answer this query using the context provided: ${ev1.data.query}`, `Context: ${ev2.data.context}`];
const prompt = subPrompts.join("\n");
const response = await llm.complete({ prompt });
return new StopEvent({ result: response.text });
};
```
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.
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.
## Manually Triggering Events
+8 -1
View File
@@ -1,6 +1,13 @@
{
"plugin": ["typedoc-plugin-markdown", "typedoc-plugin-merge-modules"],
"entryPoints": ["../../packages/llamaindex/src/index.ts"],
"entryPoints": ["../../packages/**/src/index.ts"],
"exclude": [
"../../packages/autotool/**/src/index.ts",
"**/node_modules/**",
"**/dist/**",
"**/test/**",
"**/tests/**"
],
"tsconfig": "../../tsconfig.json",
"readme": "none",
"sourceLinkTemplate": "https://github.com/run-llama/LlamaIndexTS/blob/{gitRevision}/{path}#L{line}",
+1
View File
@@ -1 +1,2 @@
logs
.temp
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/core-e2e
## 0.1.0
### Minor Changes
- 6a4a737: Remove re-exports from llamaindex main package
## 0.0.8
### Patch Changes
+11
View File
@@ -0,0 +1,11 @@
# @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",
"version": "0.0.0",
"version": "0.1.0",
"private": true,
"scripts": {
"deploy": "wrangler deploy",
+9 -12
View File
@@ -17,23 +17,21 @@ app.post("/llm", async (c) => {
const { message } = await c.req.json();
const { extractText } = await import("@llamaindex/core/utils");
const {
extractText,
QueryEngineTool,
serviceContextFromDefaults,
VectorStoreIndex,
OpenAIAgent,
Settings,
OpenAI,
OpenAIEmbedding,
SentenceSplitter,
} = await import("llamaindex");
const { PineconeVectorStore } = await import(
"llamaindex/vector-store/PineconeVectorStore"
const { OpenAIAgent, OpenAI, OpenAIEmbedding } = await import(
"@llamaindex/openai"
);
const llm = new OpenAI({
const { PineconeVectorStore } = await import("@llamaindex/pinecone");
Settings.llm = new OpenAI({
model: "gpt-4o-mini",
apiKey: c.env.OPENAI_API_KEY,
});
@@ -43,8 +41,7 @@ app.post("/llm", async (c) => {
apiKey: c.env.OPENAI_API_KEY,
});
const serviceContext = serviceContextFromDefaults({
llm,
Settings.nodeParser = new SentenceSplitter({
chunkSize: 8191,
chunkOverlap: 0,
});
@@ -53,7 +50,7 @@ app.post("/llm", async (c) => {
namespace: "8xolsn4ulEQGdhnhP76yCzfLHdOZ",
});
const index = await VectorStoreIndex.fromVectorStore(store, serviceContext);
const index = await VectorStoreIndex.fromVectorStore(store);
const retriever = index.asRetriever({
similarityTopK: 3,
@@ -1,5 +1,48 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.138
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.137
### Patch Changes
- llamaindex@0.9.3
## 0.0.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.135
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 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
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.132",
"version": "0.0.138",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,43 @@
# @llamaindex/llama-parse-browser-test
## 0.0.49
### Patch Changes
- @llamaindex/cloud@3.0.4
## 0.0.48
### Patch Changes
- @llamaindex/cloud@3.0.3
## 0.0.47
### Patch Changes
- Updated dependencies [c902fcb]
- @llamaindex/cloud@3.0.2
## 0.0.46
### Patch Changes
- @llamaindex/cloud@3.0.1
## 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
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.43",
"version": "0.0.49",
"type": "module",
"scripts": {
"dev": "vite",
+43
View File
@@ -1,5 +1,48 @@
# @llamaindex/next-agent-test
## 0.1.138
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.1.137
### Patch Changes
- llamaindex@0.9.3
## 0.1.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.135
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 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
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.132",
"version": "0.1.138",
"private": true,
"scripts": {
"dev": "next dev",
@@ -10,9 +10,9 @@
"dependencies": {
"ai": "^4.0.0",
"llamaindex": "workspace:*",
"next": "15.0.3",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.1.7",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
@@ -1,5 +1,48 @@
# test-edge-runtime
## 0.1.137
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.1.136
### Patch Changes
- llamaindex@0.9.3
## 0.1.135
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.134
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 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
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.131",
"version": "0.1.137",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,7 +9,7 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "15.0.3",
"next": "15.1.7",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
@@ -1,5 +1,60 @@
# @llamaindex/next-node-runtime
## 0.1.4
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
- @llamaindex/huggingface@0.0.39
- @llamaindex/readers@2.0.3
## 0.1.3
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/huggingface@0.0.38
- @llamaindex/readers@2.0.2
## 0.1.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
- @llamaindex/huggingface@0.0.37
- @llamaindex/readers@2.0.1
## 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
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.113",
"version": "0.1.4",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,9 +9,11 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "15.0.3",
"react": "18.3.1",
"react-dom": "18.3.1"
"@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*",
"next": "15.1.7",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
@@ -1,13 +1,13 @@
"use server";
import { HuggingFaceEmbedding } from "@llamaindex/huggingface";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import {
OpenAI,
OpenAIAgent,
QueryEngineTool,
Settings,
SimpleDirectoryReader,
VectorStoreIndex,
} from "llamaindex";
import { HuggingFaceEmbedding } from "llamaindex/embeddings/HuggingFaceEmbedding";
Settings.llm = new OpenAI({
apiKey: process.env.NEXT_PUBLIC_OPENAI_KEY ?? "FAKE_KEY_TO_PASS_TESTS",
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
@@ -0,0 +1,28 @@
# vite-import-llamaindex
## 0.0.4
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.3
### Patch Changes
- llamaindex@0.9.3
## 0.0.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
@@ -0,0 +1,24 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.4",
"type": "module",
"scripts": {
"build": "vite build",
"size-limit": "size-limit"
},
"size-limit": [
{
"path": "dist/LlamaIndexImportTest.js"
}
],
"devDependencies": {
"@size-limit/preset-big-lib": "^11.1.6",
"size-limit": "^11.1.6",
"typescript": "^5.7.2",
"vite": "^6.1.0"
},
"dependencies": {
"llamaindex": "workspace:*"
}
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,7 @@
import "llamaindex";
document.querySelector<HTMLDivElement>("#app")!.innerHTML = `
<div>
Hello World!
</div>
`;
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src", "vite.config.ts"]
}
@@ -0,0 +1,16 @@
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { defineConfig } from "vite";
const __dirname = dirname(fileURLToPath(import.meta.url));
export default defineConfig({
build: {
lib: {
entry: resolve(__dirname, "src/main.ts"),
name: "LlamaIndexImportTest",
fileName: "LlamaIndexImportTest",
formats: ["es", "cjs"],
},
},
});
@@ -5,3 +5,4 @@ dist
.cache
.DS_Store
*.pem
/src/pages.gen.ts
@@ -1,5 +1,50 @@
# @llamaindex/waku-query-engine-test
## 0.0.138
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.137
### Patch Changes
- llamaindex@0.9.3
## 0.0.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.135
### Patch Changes
- Updated dependencies [cc50c9c]
- Updated dependencies [6d37d44]
- @llamaindex/env@0.1.28
- llamaindex@0.9.1
## 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
+6 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.132",
"version": "0.0.138",
"type": "module",
"private": true,
"scripts": {
@@ -9,11 +9,12 @@
"start": "waku start"
},
"dependencies": {
"@llamaindex/env": "workspace:*",
"llamaindex": "workspace:*",
"react": "19.0.0-rc-5c56b873-20241107",
"react-dom": "19.0.0-rc-5c56b873-20241107",
"react-server-dom-webpack": "19.0.0-rc-5c56b873-20241107",
"waku": "0.21.6"
"react": "19.0.0",
"react-dom": "19.0.0",
"react-server-dom-webpack": "19.0.0",
"waku": "0.21.20"
},
"devDependencies": {
"@types/react": "18.3.12",
@@ -1,13 +1,14 @@
"use server";
import { fs } from "@llamaindex/env";
import { BaseQueryEngine, Document, VectorStoreIndex } from "llamaindex";
import { readFile } from "node:fs/promises";
let _queryEngine: BaseQueryEngine;
async function lazyLoadQueryEngine() {
if (!_queryEngine) {
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await readFile(path, "utf-8");
const essay = await fs.readFile(path, "utf-8");
// Create Document object with essay
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 { consola } from "consola";
import { Anthropic, FunctionTool, Settings, type LLM } from "llamaindex";
import { AnthropicAgent } from "llamaindex/agent/anthropic";
import { FunctionTool, Settings, type LLM } from "llamaindex";
import { ok } from "node:assert";
import { beforeEach, test } from "node:test";
import { getWeatherTool, sumNumbersTool } from "./fixtures/tools.js";
+2 -1
View File
@@ -1,6 +1,7 @@
import { ClipEmbedding } from "@llamaindex/clip";
import type { LoadTransformerEvent } from "@llamaindex/env/multi-model";
import { setTransformers } from "@llamaindex/env/multi-model";
import { ClipEmbedding, ImageNode, Settings } from "llamaindex";
import { ImageNode, Settings } from "llamaindex";
import assert from "node:assert";
import { type Mock, test } from "node:test";
+105
View File
@@ -0,0 +1,105 @@
import assert from "node:assert";
import { execSync } from "node:child_process";
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
import { createRequire } from "node:module";
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 = `
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)
}
const document = new Document({ text: 'Hello, world!' })
const index = await VectorStoreIndex.fromDocuments([document])
`;
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(),
});
});
}
});
test('no extra deps in "@llamaindex/env" cjs module', async () => {
const modules = ["@aws-crypto/sha256-js"];
const require = createRequire(import.meta.url);
const envPackage = require.resolve("@llamaindex/env");
const file = await readFile(envPackage, "utf-8");
for (const module of modules) {
assert.ok(!file.includes(module));
}
});
test('no error when require "llamaindex" in CJS', async () => {
const code = `require('llamaindex')`;
execSync(`${process.argv[0]} -e "${code}"`, {
cwd: process.cwd(),
});
});
+1 -1
View File
@@ -1,6 +1,6 @@
import { PGVectorStore } from "@llamaindex/postgres";
import { config } from "dotenv";
import { Document, VectorStoreQueryMode } from "llamaindex";
import { PGVectorStore } from "llamaindex/vector-store/PGVectorStore";
import assert from "node:assert";
import { test } from "node:test";
import pg from "pg";
+3 -5
View File
@@ -1,10 +1,8 @@
import { Document, MetadataMode } from "@llamaindex/core/schema";
import { OpenAIEmbedding } from "@llamaindex/openai";
import { PineconeVectorStore } from "@llamaindex/pinecone";
import { config } from "dotenv";
import {
OpenAIEmbedding,
PineconeVectorStore,
VectorStoreIndex,
} from "llamaindex";
import { VectorStoreIndex } from "llamaindex";
import assert from "node:assert";
import { test } from "node:test";
+5 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/e2e",
"private": true,
"version": "0.0.8",
"version": "0.1.0",
"type": "module",
"scripts": {
"e2e": "node --import tsx --import ./mock-register.js --test ./node/**/*.e2e.ts",
@@ -14,6 +14,10 @@
"@llamaindex/env": "workspace:*",
"@llamaindex/ollama": "workspace:*",
"@llamaindex/openai": "workspace:*",
"@llamaindex/pinecone": "workspace:*",
"@llamaindex/postgres": "workspace:*",
"@llamaindex/clip": "workspace:*",
"@llamaindex/anthropic": "workspace:*",
"@types/node": "^22.9.0",
"@types/pg": "^8.11.8",
"@huggingface/transformers": "^3.0.2",
+202
View File
@@ -1,5 +1,207 @@
# examples
## 0.2.3
### Patch Changes
- Updated dependencies [cb256f2]
- Updated dependencies [cb021e7]
- Updated dependencies [0346391]
- @llamaindex/openai@0.1.55
- @llamaindex/core@0.5.3
- llamaindex@0.9.4
- @llamaindex/voyage-ai@1.0.0
- @llamaindex/clip@0.0.39
- @llamaindex/deepinfra@0.0.39
- @llamaindex/groq@0.0.54
- @llamaindex/huggingface@0.0.39
- @llamaindex/azure@0.1.3
- @llamaindex/milvus@0.1.3
- @llamaindex/qdrant@0.1.3
- @llamaindex/vllm@0.0.25
- @llamaindex/cloud@3.0.4
- @llamaindex/node-parser@1.0.3
- @llamaindex/anthropic@0.2.1
- @llamaindex/cohere@0.0.8
- @llamaindex/google@0.0.10
- @llamaindex/mistral@0.0.8
- @llamaindex/mixedbread@0.0.8
- @llamaindex/ollama@0.0.43
- @llamaindex/portkey-ai@0.0.36
- @llamaindex/replicate@0.0.36
- @llamaindex/astra@0.0.8
- @llamaindex/chroma@0.0.8
- @llamaindex/firestore@1.0.1
- @llamaindex/mongodb@0.0.8
- @llamaindex/pinecone@0.0.8
- @llamaindex/postgres@0.0.36
- @llamaindex/upstash@0.0.8
- @llamaindex/weaviate@0.0.8
- @llamaindex/vercel@0.0.14
- @llamaindex/readers@2.0.3
## 0.2.2
### Patch Changes
- 3564244: Add support for claude 3.7 thinking (and set default temperature to 1)
- 3564244: add support for claude 3.7
- Updated dependencies [d952e68]
- Updated dependencies [a9c6144]
- Updated dependencies [5c026e8]
- Updated dependencies [3564244]
- Updated dependencies [3564244]
- @llamaindex/core@0.5.2
- @llamaindex/anthropic@0.2.0
- @llamaindex/firestore@1.0.0
- @llamaindex/cloud@3.0.3
- llamaindex@0.9.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/clip@0.0.38
- @llamaindex/cohere@0.0.7
- @llamaindex/deepinfra@0.0.38
- @llamaindex/google@0.0.9
- @llamaindex/huggingface@0.0.38
- @llamaindex/mistral@0.0.7
- @llamaindex/mixedbread@0.0.7
- @llamaindex/ollama@0.0.42
- @llamaindex/openai@0.1.54
- @llamaindex/portkey-ai@0.0.35
- @llamaindex/replicate@0.0.35
- @llamaindex/astra@0.0.7
- @llamaindex/azure@0.1.2
- @llamaindex/chroma@0.0.7
- @llamaindex/milvus@0.1.2
- @llamaindex/mongodb@0.0.7
- @llamaindex/pinecone@0.0.7
- @llamaindex/postgres@0.0.35
- @llamaindex/qdrant@0.1.2
- @llamaindex/upstash@0.0.7
- @llamaindex/weaviate@0.0.7
- @llamaindex/vercel@0.0.13
- @llamaindex/readers@2.0.2
- @llamaindex/groq@0.0.53
- @llamaindex/vllm@0.0.24
## 0.2.1
### Patch Changes
- Updated dependencies [cc50c9c]
- Updated dependencies [6d37d44]
- @llamaindex/env@0.1.28
- llamaindex@0.9.1
- @llamaindex/cloud@3.0.1
- @llamaindex/core@0.5.1
- @llamaindex/node-parser@1.0.1
- @llamaindex/anthropic@0.1.1
- @llamaindex/clip@0.0.37
- @llamaindex/cohere@0.0.6
- @llamaindex/deepinfra@0.0.37
- @llamaindex/google@0.0.8
- @llamaindex/groq@0.0.52
- @llamaindex/huggingface@0.0.37
- @llamaindex/mistral@0.0.6
- @llamaindex/mixedbread@0.0.6
- @llamaindex/ollama@0.0.41
- @llamaindex/openai@0.1.53
- @llamaindex/portkey-ai@0.0.34
- @llamaindex/replicate@0.0.34
- @llamaindex/astra@0.0.6
- @llamaindex/azure@0.1.1
- @llamaindex/chroma@0.0.6
- @llamaindex/milvus@0.1.1
- @llamaindex/mongodb@0.0.6
- @llamaindex/pinecone@0.0.6
- @llamaindex/postgres@0.0.34
- @llamaindex/qdrant@0.1.1
- @llamaindex/upstash@0.0.6
- @llamaindex/weaviate@0.0.6
- @llamaindex/readers@2.0.1
- @llamaindex/workflow@0.0.11
- @llamaindex/vercel@0.0.12
- @llamaindex/vllm@0.0.23
## 0.2.0
### Minor Changes
- 6a4a737: Remove re-exports from llamaindex main package
- f4588bc: Remove readers package from llamaindex
### Patch Changes
- b490376: Remove deprecated ServiceContext
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- Updated dependencies [b490376]
- Updated dependencies [f4588bc]
- @llamaindex/milvus@0.1.0
- @llamaindex/qdrant@0.1.0
- @llamaindex/azure@0.1.0
- @llamaindex/anthropic@0.1.0
- llamaindex@0.9.0
- @llamaindex/cloud@3.0.0
- @llamaindex/node-parser@1.0.0
- @llamaindex/clip@0.0.36
- @llamaindex/cohere@0.0.5
- @llamaindex/deepinfra@0.0.36
- @llamaindex/google@0.0.7
- @llamaindex/huggingface@0.0.36
- @llamaindex/mistral@0.0.5
- @llamaindex/mixedbread@0.0.5
- @llamaindex/ollama@0.0.40
- @llamaindex/openai@0.1.52
- @llamaindex/portkey-ai@0.0.33
- @llamaindex/replicate@0.0.33
- @llamaindex/astra@0.0.5
- @llamaindex/chroma@0.0.5
- @llamaindex/mongodb@0.0.5
- @llamaindex/pinecone@0.0.5
- @llamaindex/postgres@0.0.33
- @llamaindex/upstash@0.0.5
- @llamaindex/weaviate@0.0.5
- @llamaindex/vercel@0.0.11
- @llamaindex/readers@2.0.0
- @llamaindex/groq@0.0.51
- @llamaindex/vllm@0.0.22
## 0.1.3
### Patch Changes
- Updated dependencies [1c908fd]
- @llamaindex/pinecone@0.0.4
- @llamaindex/postgres@0.0.32
- @llamaindex/weaviate@0.0.4
- @llamaindex/mongodb@0.0.4
- @llamaindex/upstash@0.0.4
- @llamaindex/chroma@0.0.4
- @llamaindex/milvus@0.0.4
- @llamaindex/qdrant@0.0.4
- @llamaindex/astra@0.0.4
- @llamaindex/azure@0.0.4
- @llamaindex/huggingface@0.0.35
- @llamaindex/mixedbread@0.0.4
- @llamaindex/portkey-ai@0.0.32
- @llamaindex/anthropic@0.0.33
- @llamaindex/deepinfra@0.0.35
- @llamaindex/replicate@0.0.32
- @llamaindex/mistral@0.0.4
- @llamaindex/cohere@0.0.4
- @llamaindex/google@0.0.6
- @llamaindex/ollama@0.0.39
- @llamaindex/openai@0.1.51
- @llamaindex/vercel@0.0.10
- @llamaindex/clip@0.0.35
- @llamaindex/groq@0.0.50
- @llamaindex/vllm@0.0.21
- @llamaindex/node-parser@0.0.24
- @llamaindex/workflow@0.0.10
- @llamaindex/readers@1.0.25
- @llamaindex/cloud@2.0.24
- llamaindex@0.8.37
## 0.1.2
### Patch Changes
+2 -5
View File
@@ -1,9 +1,6 @@
import { OpenAIAgent } from "@llamaindex/openai";
import {
QueryEngineTool,
SimpleDirectoryReader,
VectorStoreIndex,
} from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { QueryEngineTool, VectorStoreIndex } from "llamaindex";
async function main() {
// Load the documents
+1 -1
View File
@@ -1,9 +1,9 @@
import { OpenAIAgent } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import {
FunctionTool,
MetadataMode,
NodeWithScore,
SimpleDirectoryReader,
VectorStoreIndex,
} from "llamaindex";
+2 -5
View File
@@ -1,9 +1,6 @@
import { OpenAIAgent } from "@llamaindex/openai";
import {
QueryEngineTool,
SimpleDirectoryReader,
VectorStoreIndex,
} from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { QueryEngineTool, VectorStoreIndex } from "llamaindex";
async function main() {
// Load the documents
+1 -1
View File
@@ -8,7 +8,7 @@ Settings.callbackManager.on("llm-tool-call", (event) => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet",
model: "claude-3-7-sonnet",
});
const agent = new AnthropicAgent({
+2 -2
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus",
model: "claude-3-7-sonnet",
});
const result = await anthropic.chat({
messages: [
@@ -15,5 +15,5 @@ import { Anthropic } from "@llamaindex/anthropic";
},
],
});
console.log(result);
console.log(result.message.content);
})();
+1 -1
View File
@@ -6,7 +6,7 @@ import readline from "node:readline/promises";
(async () => {
const llm = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus",
model: "claude-3-7-sonnet",
});
// chatHistory will store all the messages in the conversation
const chatHistory = new ChatMemoryBuffer({
+1 -1
View File
@@ -2,7 +2,7 @@ import { Anthropic } from "@llamaindex/anthropic";
async function main() {
const anthropic = new Anthropic({
model: "claude-3-5-sonnet-20241022",
model: "claude-3-7-sonnet",
});
const entireBook = await fetch(
+1 -1
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet",
model: "claude-3-7-sonnet",
});
const stream = await anthropic.chat({
messages: [
+32
View File
@@ -0,0 +1,32 @@
import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
model: "claude-3-7-sonnet",
maxTokens: 20000,
additionalChatOptions: {
thinking: {
type: "enabled",
budget_tokens: 16000,
},
},
});
const result = await anthropic.chat({
messages: [
{
role: "user",
content:
"Are there an infinite number of prime numbers such that n mod 4 == 3?",
},
],
stream: true,
});
console.log("Thinking...");
for await (const chunk of result) {
if (chunk.delta) {
process.stdout.write(chunk.delta);
} else if (chunk.options?.thinking) {
process.stdout.write(chunk.options.thinking);
}
}
})();
+2 -3
View File
@@ -1,5 +1,5 @@
import { AstraDBVectorStore } from "@llamaindex/astra";
import { VectorStoreIndex, serviceContextFromDefaults } from "llamaindex";
import { VectorStoreIndex } from "llamaindex";
const collectionName = "movie_reviews";
@@ -8,8 +8,7 @@ async function main() {
const astraVS = new AstraDBVectorStore({ contentKey: "reviewtext" });
await astraVS.connect(collectionName);
const ctx = serviceContextFromDefaults();
const index = await VectorStoreIndex.fromVectorStore(astraVS, ctx);
const index = await VectorStoreIndex.fromVectorStore(astraVS);
const retriever = await index.asRetriever({ similarityTopK: 20 });
+15
View File
@@ -0,0 +1,15 @@
import { Document, KeywordTableIndex } from "llamaindex";
import essay from "../essay";
async function main() {
const document = new Document({ text: essay });
const index = await KeywordTableIndex.fromDocuments([document]);
const chatEngine = index.asChatEngine();
const response = await chatEngine.chat({
message: "What is Harsh Mistress?",
});
console.log(response.message.content);
}
main().catch(console.error);
+17
View File
@@ -0,0 +1,17 @@
import { Document, SummaryIndex, SummaryRetrieverMode } from "llamaindex";
import essay from "../essay";
async function main() {
const document = new Document({ text: essay });
const index = await SummaryIndex.fromDocuments([document]);
const chatEngine = index.asChatEngine({
mode: SummaryRetrieverMode.LLM,
});
const response = await chatEngine.chat({
message: "Summary about the author",
});
console.log(response.message.content);
}
main().catch(console.error);
@@ -0,0 +1,15 @@
import { Document, VectorStoreIndex } from "llamaindex";
import essay from "../essay";
async function main() {
const document = new Document({ text: essay });
const index = await VectorStoreIndex.fromDocuments([document]);
const chatEngine = index.asChatEngine({ similarityTopK: 5 });
const response = await chatEngine.chat({
message: "What did I work on in February 2021?",
});
console.log(response.message.content);
}
main().catch(console.error);
+1 -1
View File
@@ -1,4 +1,4 @@
import { SimpleDirectoryReader } from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
function callback(
category: string,
+4
View File
@@ -0,0 +1,4 @@
GCP_PROJECT_ID=
GCP_CREDENTIALS=
FIRESTORE_DB=
OPENAI_API_KEY=
+35
View File
@@ -0,0 +1,35 @@
# Firestore Vector Store
Here are some sample scripts which work with loading and querying data from a Firestore Vector Store.
## Prerequisites
- A Firestore Database
- Hosted https://console.firebase.google.com/
- An OpenAI API Key
## Setup
1. Set your env variables:
- `FIRESTORE_DB`: Name of your Firestore database
- `GCP_PROJECT_ID`: Your GCP project ID
- `GCP_CREDENTIALS`: Your GCP credentials JSON
- `OPENAI_API_KEY`: Your OpenAI key
2. `cd` Into the `examples` directory
3. run `npm i`
## Load the data
This sample loads the same dataset of movie reviews as sample dataset
run `npx tsx firestore/load.ts`
## Use RAG to Query the data
run `npx tsx firestore/query.ts`
## Delete the data
run `npx tsx firestore/delete.ts`
+32
View File
@@ -0,0 +1,32 @@
import { CollectionReference } from "@google-cloud/firestore";
import "dotenv/config";
import { FirestoreVectorStore } from "@llamaindex/firestore";
import { OpenAIEmbedding, Settings } from "llamaindex";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
vectorStore.delete("movie_reviews.csv");
} catch (e) {
console.error(e);
}
}
void main();
+44
View File
@@ -0,0 +1,44 @@
import { CollectionReference } from "@google-cloud/firestore";
import { CSVReader } from "@llamaindex/readers/csv";
import "dotenv/config";
import {
OpenAIEmbedding,
Settings,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import { FirestoreVectorStore } from "@llamaindex/firestore";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const reader = new CSVReader(false);
const docs = await reader.loadData("./data/movie_reviews.csv");
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
const storageContext = await storageContextFromDefaults({ vectorStore });
await VectorStoreIndex.fromDocuments(docs, { storageContext });
} catch (e) {
console.error(e);
}
}
void main();
+58
View File
@@ -0,0 +1,58 @@
import "dotenv/config";
import { OpenAIEmbedding, Settings, VectorStoreIndex } from "llamaindex";
import { CollectionReference } from "@google-cloud/firestore";
import { FirestoreVectorStore } from "@llamaindex/firestore";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
const index = await VectorStoreIndex.fromVectorStore(vectorStore);
const retriever = index.asRetriever({ similarityTopK: 20 });
const queryEngine = index.asQueryEngine({ retriever });
const query = "Get all movie titles.";
const results = await queryEngine.query({ query });
console.log(`Query from ${results.sourceNodes?.length} nodes`);
console.log(results.response);
console.log("\n=====\nQuerying the index with filters");
const queryEngineWithFilters = index.asQueryEngine({
retriever,
preFilters: {
filters: [
{
key: "file_name",
value: "movie_reviews.csv",
operator: "==",
},
],
},
});
const resultAfterFilter = await queryEngineWithFilters.query({
query: "Get all movie titles.",
});
console.log(`Query from ${resultAfterFilter.sourceNodes?.length} nodes`);
console.log(resultAfterFilter.response);
} catch (e) {
console.error(e);
}
}
void main();
+1 -2
View File
@@ -30,13 +30,12 @@ async function main() {
// Split text and create embeddings. Store them in a VectorStoreIndex
// var storageContext = await storageContextFromDefaults({});
// var serviceContext = serviceContextFromDefaults({});
// const docStore = storageContext.docStore;
// for (const doc of documents) {
// docStore.setDocumentHash(doc.id_, doc.hash);
// }
// const nodes = serviceContext.nodeParser.getNodesFromDocuments(documents);
// const nodes = Settings.nodeParser.getNodesFromDocuments(documents);
// console.log(nodes);
//
+1 -1
View File
@@ -1,9 +1,9 @@
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import {
ImageDocument,
JinaAIEmbedding,
similarity,
SimilarityType,
SimpleDirectoryReader,
} from "llamaindex";
import path from "path";
+2 -1
View File
@@ -1,4 +1,5 @@
import { Settings, SimpleDirectoryReader, VectorStoreIndex } from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { Settings, VectorStoreIndex } from "llamaindex";
import path from "path";
import { getStorageContext } from "./storage";
+9 -10
View File
@@ -1,17 +1,16 @@
import { storageContextFromDefaults } from "llamaindex";
import { ClipEmbedding } from "@llamaindex/clip";
import { path } from "@llamaindex/env";
import { SimpleVectorStore, storageContextFromDefaults } from "llamaindex";
// set up store context with two vector stores, one for text, the other for images
export async function getStorageContext() {
return await storageContextFromDefaults({
persistDir: "storage",
storeImages: true,
// if storeImages is true, the following vector store will be added
// vectorStores: {
// IMAGE: SimpleVectorStore.fromPersistDir(
// `${persistDir}/images`,
// fs,
// new ClipEmbedding(),
// ),
// },
vectorStores: {
IMAGE: await SimpleVectorStore.fromPersistDir(
path.join("storage", "images"),
new ClipEmbedding(),
),
},
});
}
+1 -2
View File
@@ -1,5 +1,4 @@
import { OllamaEmbedding } from "@llamaindex/ollama";
import { Ollama } from "llamaindex/llm/ollama";
import { Ollama, OllamaEmbedding } from "@llamaindex/ollama";
(async () => {
const llm = new Ollama({
+1 -1
View File
@@ -1,7 +1,7 @@
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
(async () => {
const llm = new OpenAI({ model: "gpt-4-1106-preview", temperature: 0.1 });
const llm = new OpenAI({ model: "gpt-4.5-preview", temperature: 0.1 });
// complete api
const response1 = await llm.complete({ prompt: "How are you?" });
+42 -37
View File
@@ -1,63 +1,68 @@
{
"name": "@llamaindex/examples",
"version": "0.2.3",
"private": true,
"version": "0.1.2",
"scripts": {
"lint": "eslint .",
"start": "tsx ./starter.ts"
},
"dependencies": {
"@ai-sdk/openai": "^1.0.5",
"@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0",
"@llamaindex/vercel": "^0.0.9",
"@llamaindex/workflow": "^0.0.9",
"@llamaindex/anthropic": "^0.2.1",
"@llamaindex/astra": "^0.0.8",
"@llamaindex/azure": "^0.1.3",
"@llamaindex/chroma": "^0.0.8",
"@llamaindex/clip": "^0.0.39",
"@llamaindex/cloud": "^3.0.4",
"@llamaindex/cohere": "^0.0.8",
"@llamaindex/core": "^0.5.3",
"@llamaindex/deepinfra": "^0.0.39",
"@llamaindex/env": "^0.1.28",
"@llamaindex/firestore": "^1.0.1",
"@llamaindex/google": "^0.0.10",
"@llamaindex/groq": "^0.0.54",
"@llamaindex/huggingface": "^0.0.39",
"@llamaindex/milvus": "^0.1.3",
"@llamaindex/mistral": "^0.0.8",
"@llamaindex/mixedbread": "^0.0.8",
"@llamaindex/mongodb": "^0.0.8",
"@llamaindex/node-parser": "^1.0.3",
"@llamaindex/ollama": "^0.0.43",
"@llamaindex/openai": "^0.1.55",
"@llamaindex/pinecone": "^0.0.8",
"@llamaindex/portkey-ai": "^0.0.36",
"@llamaindex/postgres": "^0.0.36",
"@llamaindex/qdrant": "^0.1.3",
"@llamaindex/readers": "^2.0.3",
"@llamaindex/replicate": "^0.0.36",
"@llamaindex/upstash": "^0.0.8",
"@llamaindex/vercel": "^0.0.14",
"@llamaindex/vllm": "^0.0.25",
"@llamaindex/voyage-ai": "^1.0.0",
"@llamaindex/weaviate": "^0.0.8",
"@llamaindex/workflow": "^0.0.11",
"@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^4.0.0",
"@vercel/postgres": "^0.10.0",
"ai": "^4.0.0",
"ajv": "^8.17.1",
"commander": "^12.1.0",
"dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.8.36",
"llamaindex": "^0.9.4",
"mongodb": "6.7.0",
"pathe": "^1.1.2",
"postgres": "^3.4.4",
"ajv": "^8.17.1",
"wikipedia": "^2.1.2",
"@llamaindex/openai": "workspace:*",
"@llamaindex/cloud": "workspace:*",
"@llamaindex/anthropic": "workspace:*",
"@llamaindex/clip": "workspace:*",
"@llamaindex/azure": "workspace:*",
"@llamaindex/deepinfra": "workspace:*",
"@llamaindex/groq": "workspace:*",
"@llamaindex/huggingface": "workspace:*",
"@llamaindex/node-parser": "workspace:*",
"@llamaindex/ollama": "workspace:*",
"@llamaindex/portkey-ai": "workspace:*",
"@llamaindex/readers": "workspace:*",
"@llamaindex/replicate": "workspace:*",
"@llamaindex/vllm": "workspace:*",
"@llamaindex/postgres": "workspace:*",
"@llamaindex/astra": "workspace:*",
"@llamaindex/milvus": "workspace:*",
"@llamaindex/chroma": "workspace:*",
"@llamaindex/mongodb": "workspace:*",
"@llamaindex/pinecone": "workspace:*",
"@llamaindex/qdrant": "workspace:*",
"@llamaindex/upstash": "workspace:*",
"@llamaindex/weaviate": "workspace:*",
"@llamaindex/google": "workspace:*",
"@llamaindex/mistral": "workspace:*",
"@llamaindex/mixedbread": "workspace:*",
"@llamaindex/cohere": "workspace:*"
"wikipedia": "^2.1.2"
},
"devDependencies": {
"@types/node": "^22.9.0",
"tsx": "^4.19.0",
"typescript": "^5.7.2"
},
"scripts": {
"lint": "eslint .",
"start": "tsx ./starter.ts"
},
"stackblitz": {
"startCommand": "npm start"
}
+2 -5
View File
@@ -1,11 +1,8 @@
// load-docs.ts
import { PineconeVectorStore } from "@llamaindex/pinecone";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import fs from "fs/promises";
import {
SimpleDirectoryReader,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import { storageContextFromDefaults, VectorStoreIndex } from "llamaindex";
async function getSourceFilenames(sourceDir: string) {
return await fs
+3 -3
View File
@@ -19,9 +19,9 @@
"start:obsidian": "node --import tsx ./src/obsidian.ts"
},
"dependencies": {
"@llamaindex/readers": "*",
"llamaindex": "*",
"@llamaindex/cloud": "*"
"@llamaindex/cloud": "workspace:* || ^2.0.24",
"@llamaindex/readers": "workspace:* || ^1.0.25",
"llamaindex": "workspace:* || ^0.8.37"
},
"devDependencies": {
"@types/node": "^22.9.0",
@@ -1,10 +1,10 @@
import { TextFileReader } from "@llamaindex/readers/text";
import type { Document, Metadata } from "llamaindex";
import {
FILE_EXT_TO_READER,
FileReader,
SimpleDirectoryReader,
} from "llamaindex";
} from "@llamaindex/readers/directory";
import { TextFileReader } from "@llamaindex/readers/text";
import type { Document, Metadata } from "llamaindex";
import { FileReader } from "llamaindex";
class ZipReader extends FileReader {
loadDataAsContent(fileContent: Uint8Array): Promise<Document<Metadata>[]> {
@@ -1,5 +1,6 @@
import { LlamaParseReader } from "@llamaindex/cloud";
import { SimpleDirectoryReader, VectorStoreIndex } from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { VectorStoreIndex } from "llamaindex";
async function main() {
const reader = new SimpleDirectoryReader();
@@ -1,6 +1,4 @@
import { SimpleDirectoryReader } from "llamaindex";
// or
// import { SimpleDirectoryReader } from 'llamaindex'
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
const reader = new SimpleDirectoryReader();
const documents = await reader.loadData("../data");
+1 -1
View File
@@ -1,9 +1,9 @@
import { OpenAI } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import {
RouterQueryEngine,
SentenceSplitter,
Settings,
SimpleDirectoryReader,
SummaryIndex,
VectorStoreIndex,
} from "llamaindex";
+12 -2
View File
@@ -3,6 +3,18 @@ import fs from "node:fs/promises";
import { createInterface } from "node:readline/promises";
async function main() {
const rl = createInterface({ input: process.stdin, output: process.stdout });
if (!process.env.OPENAI_API_KEY) {
console.log("OpenAI API key not found in environment variables.");
console.log(
"You can get an API key at https://platform.openai.com/account/api-keys",
);
process.env.OPENAI_API_KEY = await rl.question(
"Please enter your OpenAI API key: ",
);
}
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
const document = new Document({ text: essay, id_: path });
@@ -10,8 +22,6 @@ async function main() {
const index = await VectorStoreIndex.fromDocuments([document]);
const queryEngine = index.asQueryEngine();
const rl = createInterface({ input: process.stdin, output: process.stdout });
console.log(
"Try asking a question about the essay: https://github.com/run-llama/LlamaIndexTS/blob/main/packages/llamaindex/examples/abramov.txt",
"\nExample: When did the author graduate from high school?",
+1 -1
View File
@@ -14,6 +14,7 @@ import {
MetadataIndexFieldType,
} from "@llamaindex/azure";
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import dotenv from "dotenv";
import {
Document,
@@ -22,7 +23,6 @@ import {
Metadata,
NodeWithScore,
Settings,
SimpleDirectoryReader,
storageContextFromDefaults,
TextNode,
VectorStoreIndex,
+2 -5
View File
@@ -1,10 +1,7 @@
// load-docs.ts
import { PGVectorStore } from "@llamaindex/postgres";
import {
SimpleDirectoryReader,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { storageContextFromDefaults, VectorStoreIndex } from "llamaindex";
import fs from "node:fs/promises";
async function getSourceFilenames(sourceDir: string) {
+1 -1
View File
@@ -1,6 +1,6 @@
import { PGVectorStore } from "@llamaindex/postgres";
import dotenv from "dotenv";
import { Document, VectorStoreQueryMode } from "llamaindex";
import { PGVectorStore } from "llamaindex/vector-store/PGVectorStore";
import postgres from "postgres";
dotenv.config();
+1 -1
View File
@@ -1,5 +1,5 @@
import { PGVectorStore } from "@llamaindex/postgres";
import { VectorStoreIndex } from "llamaindex";
import { PGVectorStore } from "llamaindex/vector-store/PGVectorStore";
async function main() {
// eslint-disable-next-line @typescript-eslint/no-require-imports
+2 -5
View File
@@ -1,10 +1,7 @@
import { PGVectorStore } from "@llamaindex/postgres";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import dotenv from "dotenv";
import {
SimpleDirectoryReader,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import { storageContextFromDefaults, VectorStoreIndex } from "llamaindex";
dotenv.config();
+1 -1
View File
@@ -1,8 +1,8 @@
// https://vercel.com/docs/storage/vercel-postgres/sdk
import { PGVectorStore } from "@llamaindex/postgres";
import { sql } from "@vercel/postgres";
import dotenv from "dotenv";
import { Document, VectorStoreQueryMode } from "llamaindex";
import { PGVectorStore } from "llamaindex/vector-store/PGVectorStore";
dotenv.config();

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