mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-01 22:14:03 -04:00
Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bcd5c9acc1 | |||
| 1cd4bcf554 | |||
| 5d86dd8a1a | |||
| e202659cfd | |||
| f2df55800c | |||
| cf9a9356e0 | |||
| 335020e242 | |||
| 3d1808b5d2 | |||
| a19cbc7fe0 | |||
| b8f0cbc4e0 | |||
| 7e8230b056 | |||
| 8be45899a7 | |||
| c4800bcf82 | |||
| fd38a253b7 | |||
| 510191cb5d | |||
| 7934ade092 | |||
| a6c1eab762 | |||
| 515f2c1e3d | |||
| dc85649ead | |||
| d2b2722a30 | |||
| a2bbd62399 | |||
| 969365ca0a | |||
| 819af453d6 | |||
| 9db36f7384 | |||
| efa221116f | |||
| 83c3897539 | |||
| e1cbce1f80 | |||
| 02b22da384 | |||
| 0aa61db547 | |||
| 90d265cf47 | |||
| fc2d5ea1cd | |||
| ef4f63d9f4 | |||
| d17450fdfb | |||
| 805d2b0d55 | |||
| 6d22fa2a50 | |||
| 16f0068175 | |||
| 1054c3382a | |||
| e60328b086 | |||
| 3371dfb89f | |||
| 2065a16a07 | |||
| 5dae534f8d | |||
| 3d503cb810 | |||
| daf8522bec | |||
| 223f3136b4 | |||
| c6bad7d951 | |||
| 630b425545 | |||
| 4c7b891446 | |||
| a9c5b4899b | |||
| a7b0ac3cb7 | |||
| a7540ff47b | |||
| c69605f406 | |||
| ee20c44d9b | |||
| 1d470363df | |||
| b39f40dbd8 | |||
| fadc8b8ea0 | |||
| ea92b6986d | |||
| 17f9022d22 | |||
| 14792cd8b4 | |||
| 7ae6eaa0a2 | |||
| dbb5bd9f23 | |||
| aacd606204 | |||
| f865c984d3 | |||
| 7b10882d06 | |||
| f066e50482 | |||
| fd8c882792 | |||
| d89ebe0261 | |||
| 968feb32cd | |||
| 43f6f56c5b | |||
| b2364dc5ba | |||
| 67f4db8501 | |||
| e4151a8b02 | |||
| 4d4cd8ac6b | |||
| 4fc001c8de | |||
| cf675bdc7a | |||
| 660b831b9e | |||
| ad85bd0b46 | |||
| 18ec1f2f61 | |||
| b0fbd8b5c8 | |||
| c0dfc8c641 | |||
| a8d3fa68a1 |
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"llamaindex": patch
|
||||
"@llamaindex/env": patch
|
||||
---
|
||||
|
||||
Allow Node 18 again (throw run-time error if not possible) to make Stackblitz work
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.x, 22.x, 23.x]
|
||||
node-version: [18.x, 20.x, 22.x, 23.x]
|
||||
name: E2E on Node.js ${{ matrix.node-version }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.x, 22.x, 23.x]
|
||||
node-version: [18.x, 20.x, 22.x, 23.x]
|
||||
name: Test on Node.js ${{ matrix.node-version }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
+34
-62
@@ -2,86 +2,58 @@
|
||||
|
||||
## Structure
|
||||
|
||||
This is a monorepo built with Turborepo
|
||||
LlamaIndex.TS uses pnpm monorepo.
|
||||
|
||||
Right now, for first-time contributors, these three packages are of the highest importance:
|
||||
We recommend you to understand the basics of Node.js, TypeScript, pnpm, and of course, LLM before contributing.
|
||||
|
||||
- `packages/llamaindex` which is the main NPM library `llamaindex`
|
||||
- `examples` is where the demo code lives
|
||||
- `apps/docs` is where the code for the documentation of https://ts.llamaindex.ai/ is located
|
||||
There are some important folders in the repository:
|
||||
|
||||
### Turborepo docs
|
||||
|
||||
You can checkout how Turborepo works using the default [README-turborepo.md](/README-turborepo.md)
|
||||
- `packages/*`: Contains the source code of the packages. Each package is a separate npm package.
|
||||
- `llamaindex`: The starter package for LlamaIndex.TS, which contains the all sub-packages.
|
||||
- `core`: The core package of LlamaIndex.TS, which contains the abstract classes and interfaces. It is designed for
|
||||
all JS runtime environments.
|
||||
- `env`: The environment package of LlamaIndex.TS, which contains the environment-specific classes and interfaces. It
|
||||
includes compatibility layers for Node.js, Deno, Vercel Edge Runtime, Cloudflare Workers...
|
||||
- `apps/*`: The applications based on LlamaIndex.TS.
|
||||
- `next`: Our documentation website based on Next.js.
|
||||
- `examples`: The code examples of LlamaIndex.TS using Node.js.
|
||||
|
||||
## Getting Started
|
||||
|
||||
Install NodeJS. Preferably v18 using nvm or n.
|
||||
|
||||
Inside the LlamaIndexTS directory:
|
||||
Make sure you have Node.js LIS (Long-term Support) installed. You can check your Node.js version by running:
|
||||
|
||||
```shell
|
||||
node -v
|
||||
# v20.x.x
|
||||
```
|
||||
npm i -g pnpm ts-node
|
||||
|
||||
### Use pnpm
|
||||
|
||||
```shell
|
||||
corepack enable
|
||||
```
|
||||
|
||||
### Install dependencies
|
||||
|
||||
```shell
|
||||
pnpm install
|
||||
```
|
||||
|
||||
Note: we use pnpm in this repo, which has a lot of the same functionality and CLI options as npm but it does do some things better in a monorepo, like centralizing dependencies and caching.
|
||||
### Build the packages
|
||||
|
||||
PNPM's has documentation on its [workspace feature](https://pnpm.io/workspaces) and Turborepo had some [useful documentation also](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks).
|
||||
|
||||
### Running Typescript
|
||||
|
||||
When we publish to NPM we will have a tsc compiled version of the library in JS. For now, the easiest thing to do is use ts-node.
|
||||
|
||||
### Test cases
|
||||
|
||||
To run them, run
|
||||
|
||||
```
|
||||
pnpm run test
|
||||
```
|
||||
|
||||
To write new test cases write them in [packages/llamaindex/tests](/packages/llamaindex/tests)
|
||||
|
||||
We use Vitest https://vitest.dev to write our test cases. Vitest comes with a bunch of built-in assertions using the expect function: https://vitest.dev/api/expect.html#expect
|
||||
|
||||
### Demo applications
|
||||
|
||||
There is an existing ["example"](/examples/README.md) demos folder with mainly NodeJS scripts. Feel free to add additional demos to that folder. If you would like to try out your changes in the `llamaindex` package with a new demo, you need to run the build command in the README.
|
||||
|
||||
You can create new demo applications in the apps folder. Just run pnpm init in the folder after you create it to create its own package.json
|
||||
|
||||
### Installing packages
|
||||
|
||||
To install packages for a specific package or demo application, run
|
||||
|
||||
```
|
||||
pnpm add [NPM Package] --filter [package or application i.e. llamaindex or docs]
|
||||
```
|
||||
|
||||
To install packages for every package or application run
|
||||
|
||||
```
|
||||
pnpm add -w [NPM Package]
|
||||
```shell
|
||||
# Build all packages
|
||||
turbo build --filter "./packages/*"
|
||||
```
|
||||
|
||||
### Docs
|
||||
|
||||
To contribute to the docs, go to the docs website folder and run the Docusaurus instance.
|
||||
|
||||
```bash
|
||||
cd apps/docs
|
||||
pnpm install
|
||||
pnpm start
|
||||
```
|
||||
|
||||
That should start a webserver which will serve the docs on https://localhost:3000
|
||||
|
||||
Any changes you make should be reflected in the browser. If you need to regenerate the API docs and find that your TSDoc isn't getting the updates, feel free to remove apps/docs/api. It will automatically regenerate itself when you run pnpm start again.
|
||||
See the [docs](./apps/next/README.md) for more information.
|
||||
|
||||
## Changeset
|
||||
|
||||
We use [changesets](https://github.com/changesets/changesets) for managing versions and changelogs. To create a new changeset, run in the root folder:
|
||||
We use [changesets](https://github.com/changesets/changesets) for managing versions and changelogs. To create a new
|
||||
changeset, run in the root folder:
|
||||
|
||||
```
|
||||
pnpm changeset
|
||||
@@ -95,6 +67,6 @@ The [Release Github Action](.github/workflows/release.yml) is automatically gene
|
||||
PR called "Release {version}".
|
||||
|
||||
This PR will update the `package.json` and `CHANGELOG.md` files of each package according to
|
||||
the current changesets in the [.changeset](.changeset/) folder.
|
||||
the current changesets in the [.changeset](.changeset) folder.
|
||||
|
||||
If this PR is merged it will automatically add version tags to the repository and publish the updated packages to NPM.
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
# LlamaIndex.TS
|
||||
<p align="center">
|
||||
<img height="100" width="100" alt="LlamaIndex logo" src="https://ts.llamaindex.ai/square.svg" />
|
||||
</p>
|
||||
<h1 align="center">LlamaIndex.TS</h1>
|
||||
<h3 align="center">
|
||||
Data framework for your LLM application.
|
||||
</h3>
|
||||
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://discord.com/invite/eN6D2HQ4aX)
|
||||
|
||||
LlamaIndex is a data framework for your LLM application.
|
||||
|
||||
Use your own data with large language models (LLMs, OpenAI ChatGPT and others) in JS runtime environments with TypeScript support.
|
||||
|
||||
Documentation: https://ts.llamaindex.ai/
|
||||
|
||||
@@ -1,5 +1,158 @@
|
||||
# docs
|
||||
|
||||
## 0.0.132
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
- @llamaindex/examples@0.0.19
|
||||
|
||||
## 0.0.131
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
- @llamaindex/examples@0.0.18
|
||||
|
||||
## 0.0.130
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [fd38a25]
|
||||
- @llamaindex/examples@0.0.17
|
||||
|
||||
## 0.0.129
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.128
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.127
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.126
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.125
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.124
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.123
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/examples@0.0.16
|
||||
|
||||
## 0.0.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/examples@0.0.15
|
||||
|
||||
## 0.0.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
- @llamaindex/examples@0.0.14
|
||||
|
||||
## 0.0.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 0.0.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
- @llamaindex/examples@0.0.13
|
||||
|
||||
## 0.0.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -62,6 +62,12 @@ const config = {
|
||||
({
|
||||
// Replace with your project's social card
|
||||
image: "img/favicon.png", // TODO change this
|
||||
announcementBar: {
|
||||
id: "migrate_to_next",
|
||||
content:
|
||||
'We are migrating to Next.js based documentation. Check it out <a href="https://ts.llamaindex.ai/docs/llamaindex">here</a>!',
|
||||
isCloseable: false,
|
||||
},
|
||||
navbar: {
|
||||
title: "LlamaIndex.TS",
|
||||
logo: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "0.0.110",
|
||||
"version": "0.0.132",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
@@ -15,23 +15,23 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "3.6.0",
|
||||
"@docusaurus/remark-plugin-npm2yarn": "3.6.0",
|
||||
"@docusaurus/core": "3.6.1",
|
||||
"@docusaurus/remark-plugin-npm2yarn": "3.6.1",
|
||||
"@llamaindex/examples": "workspace:*",
|
||||
"@mdx-js/react": "^3.1.0",
|
||||
"clsx": "^2.1.1",
|
||||
"llamaindex": "workspace:*",
|
||||
"postcss": "^8.4.47",
|
||||
"postcss": "^8.4.49",
|
||||
"prism-react-renderer": "^2.4.0",
|
||||
"raw-loader": "^4.0.2",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "18.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "3.6.0",
|
||||
"@docusaurus/preset-classic": "3.6.0",
|
||||
"@docusaurus/theme-classic": "3.6.0",
|
||||
"@docusaurus/types": "3.6.0",
|
||||
"@docusaurus/module-type-aliases": "3.6.1",
|
||||
"@docusaurus/preset-classic": "3.6.1",
|
||||
"@docusaurus/theme-classic": "3.6.1",
|
||||
"@docusaurus/types": "3.6.1",
|
||||
"@tsconfig/docusaurus": "2.0.3",
|
||||
"@types/node": "^22.9.0",
|
||||
"docusaurus-plugin-typedoc": "1.0.5",
|
||||
|
||||
@@ -1,5 +1,242 @@
|
||||
# @llamaindex/doc
|
||||
|
||||
## 0.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
- llamaindex@0.8.26
|
||||
- @llamaindex/openai@0.1.42
|
||||
- @llamaindex/cloud@2.0.17
|
||||
- @llamaindex/node-parser@0.0.18
|
||||
- @llamaindex/readers@1.0.19
|
||||
|
||||
## 0.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7e8230b]
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/readers@1.0.18
|
||||
- @llamaindex/cloud@2.0.16
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/node-parser@0.0.17
|
||||
- @llamaindex/openai@0.1.41
|
||||
- @llamaindex/workflow@0.0.7
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- fd38a25: Add vercel tool adapter to use query engine tool
|
||||
|
||||
## 0.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.15
|
||||
- @llamaindex/core@0.4.15
|
||||
- llamaindex@0.8.23
|
||||
- @llamaindex/node-parser@0.0.16
|
||||
- @llamaindex/openai@0.1.40
|
||||
- @llamaindex/readers@1.0.17
|
||||
|
||||
## 0.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
- @llamaindex/cloud@2.0.14
|
||||
- @llamaindex/core@0.4.14
|
||||
- @llamaindex/node-parser@0.0.15
|
||||
- @llamaindex/openai@0.1.39
|
||||
- @llamaindex/readers@1.0.16
|
||||
|
||||
## 0.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/cloud@2.0.13
|
||||
- @llamaindex/core@0.4.13
|
||||
- llamaindex@0.8.19
|
||||
- @llamaindex/node-parser@0.0.14
|
||||
- @llamaindex/readers@1.0.15
|
||||
- @llamaindex/openai@0.1.38
|
||||
|
||||
## 0.0.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- Updated dependencies [ef4f63d]
|
||||
- llamaindex@0.8.18
|
||||
- @llamaindex/core@0.4.12
|
||||
- @llamaindex/cloud@2.0.12
|
||||
- @llamaindex/node-parser@0.0.13
|
||||
- @llamaindex/openai@0.1.37
|
||||
- @llamaindex/readers@1.0.14
|
||||
|
||||
## 0.0.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6d22fa2]
|
||||
- @llamaindex/core@0.4.11
|
||||
- @llamaindex/cloud@2.0.11
|
||||
- llamaindex@0.8.17
|
||||
- @llamaindex/node-parser@0.0.12
|
||||
- @llamaindex/openai@0.1.36
|
||||
- @llamaindex/readers@1.0.13
|
||||
|
||||
## 0.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e60328b]
|
||||
- @llamaindex/readers@1.0.12
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [ee20c44]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
- @llamaindex/workflow@0.0.6
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/cloud@2.0.10
|
||||
- @llamaindex/node-parser@0.0.11
|
||||
- @llamaindex/openai@0.1.35
|
||||
- @llamaindex/readers@1.0.11
|
||||
|
||||
## 0.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ea92b69]
|
||||
- Updated dependencies [fadc8b8]
|
||||
- @llamaindex/workflow@0.0.5
|
||||
|
||||
## 0.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
- @llamaindex/openai@0.1.34
|
||||
- @llamaindex/cloud@2.0.9
|
||||
- llamaindex@0.8.12
|
||||
- @llamaindex/node-parser@0.0.10
|
||||
- @llamaindex/readers@1.0.10
|
||||
|
||||
## 0.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
- @llamaindex/cloud@2.0.8
|
||||
- llamaindex@0.8.11
|
||||
- @llamaindex/node-parser@0.0.9
|
||||
- @llamaindex/openai@0.1.33
|
||||
- @llamaindex/readers@1.0.9
|
||||
|
||||
## 0.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- Updated dependencies [d89ebe0]
|
||||
- Updated dependencies [fd8c882]
|
||||
- Updated dependencies [fd8c882]
|
||||
- llamaindex@0.8.10
|
||||
- @llamaindex/core@0.4.7
|
||||
- @llamaindex/workflow@0.0.4
|
||||
- @llamaindex/cloud@2.0.7
|
||||
- @llamaindex/node-parser@0.0.8
|
||||
- @llamaindex/openai@0.1.32
|
||||
- @llamaindex/readers@1.0.8
|
||||
|
||||
## 0.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
- @llamaindex/cloud@2.0.6
|
||||
- @llamaindex/core@0.4.6
|
||||
- @llamaindex/node-parser@0.0.7
|
||||
- @llamaindex/openai@0.1.31
|
||||
- @llamaindex/readers@1.0.7
|
||||
|
||||
## 0.0.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- @llamaindex/core@0.4.5
|
||||
- llamaindex@0.8.8
|
||||
- @llamaindex/node-parser@0.0.6
|
||||
- @llamaindex/workflow@0.0.3
|
||||
- @llamaindex/cloud@2.0.5
|
||||
- @llamaindex/openai@0.1.30
|
||||
- @llamaindex/readers@1.0.6
|
||||
|
||||
## 0.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.4
|
||||
- @llamaindex/core@0.4.4
|
||||
- llamaindex@0.8.7
|
||||
- @llamaindex/node-parser@0.0.5
|
||||
- @llamaindex/openai@0.1.29
|
||||
- @llamaindex/readers@1.0.5
|
||||
|
||||
## 0.0.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+3
-8
@@ -1,4 +1,4 @@
|
||||
# next
|
||||
# Docs
|
||||
|
||||
This is a Next.js application generated with
|
||||
[Create Fumadocs](https://github.com/fuma-nama/fumadocs).
|
||||
@@ -6,15 +6,10 @@ This is a Next.js application generated with
|
||||
Run development server:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
# or
|
||||
pnpm dev
|
||||
# or
|
||||
yarn dev
|
||||
turbo run dev
|
||||
# turbo will build all required packages before running the dev server
|
||||
```
|
||||
|
||||
Open http://localhost:3000 with your browser to see the result.
|
||||
|
||||
## Learn More
|
||||
|
||||
To learn more about Next.js and Fumadocs, take a look at the following
|
||||
|
||||
@@ -6,6 +6,7 @@ const withMDX = createMDX();
|
||||
const config = {
|
||||
reactStrictMode: true,
|
||||
transpilePackages: ["monaco-editor"],
|
||||
serverExternalPackages: ["@huggingface/transformers"],
|
||||
webpack: (config, { isServer }) => {
|
||||
if (Array.isArray(config.target) && config.target.includes("web")) {
|
||||
config.target = ["web", "es2020"];
|
||||
@@ -26,6 +27,7 @@ const config = {
|
||||
}),
|
||||
);
|
||||
}
|
||||
config.resolve.alias["replicate"] = false;
|
||||
return config;
|
||||
},
|
||||
};
|
||||
|
||||
+24
-24
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/doc",
|
||||
"version": "0.0.8",
|
||||
"version": "0.0.30",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "pnpm run build:docs && next build",
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@icons-pack/react-simple-icons": "^10.1.0",
|
||||
"@llamaindex/chat-ui": "0.0.5",
|
||||
"@llamaindex/chat-ui": "0.0.9",
|
||||
"@llamaindex/cloud": "workspace:*",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/node-parser": "workspace:*",
|
||||
@@ -20,31 +20,31 @@
|
||||
"@llamaindex/readers": "workspace:*",
|
||||
"@llamaindex/workflow": "workspace:*",
|
||||
"@mdx-js/mdx": "^3.1.0",
|
||||
"@number-flow/react": "^0.3.0",
|
||||
"@number-flow/react": "^0.3.4",
|
||||
"@radix-ui/react-dialog": "^1.1.2",
|
||||
"@radix-ui/react-icons": "^1.3.1",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@radix-ui/react-label": "^2.1.0",
|
||||
"@radix-ui/react-slider": "^1.2.1",
|
||||
"@radix-ui/react-slot": "^1.1.0",
|
||||
"@radix-ui/react-tooltip": "^1.1.3",
|
||||
"@radix-ui/react-tooltip": "^1.1.4",
|
||||
"@vercel/functions": "^1.5.0",
|
||||
"ai": "^3.4.31",
|
||||
"ai": "^3.4.33",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "2.1.1",
|
||||
"foxact": "^0.2.40",
|
||||
"framer-motion": "^11.11.11",
|
||||
"fumadocs-core": "14.2.0",
|
||||
"fumadocs-docgen": "^1.3.1",
|
||||
"foxact": "^0.2.41",
|
||||
"framer-motion": "^11.11.17",
|
||||
"fumadocs-core": "14.4.2",
|
||||
"fumadocs-docgen": "^1.3.2",
|
||||
"fumadocs-mdx": "^11.1.1",
|
||||
"fumadocs-openapi": "^5.5.6",
|
||||
"fumadocs-openapi": "^5.7.0",
|
||||
"fumadocs-twoslash": "^2.0.1",
|
||||
"fumadocs-typescript": "^3.0.1",
|
||||
"fumadocs-ui": "14.2.0",
|
||||
"fumadocs-typescript": "^3.0.2",
|
||||
"fumadocs-ui": "14.4.2",
|
||||
"hast-util-to-jsx-runtime": "^2.3.2",
|
||||
"llamaindex": "workspace:*",
|
||||
"lucide-react": "^0.454.0",
|
||||
"next": "15.0.2",
|
||||
"next-themes": "^0.3.0",
|
||||
"lucide-react": "^0.460.0",
|
||||
"next": "15.0.3",
|
||||
"next-themes": "^0.4.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-icons": "^5.3.0",
|
||||
@@ -54,19 +54,19 @@
|
||||
"rehype-katex": "^7.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"rimraf": "^6.0.1",
|
||||
"shiki": "^1.22.2",
|
||||
"shiki": "^1.23.1",
|
||||
"shiki-magic-move": "^0.5.0",
|
||||
"swr": "^2.2.5",
|
||||
"tailwind-merge": "^2.5.2",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"tree-sitter": "^0.22.0",
|
||||
"tree-sitter-typescript": "^0.23.0",
|
||||
"use-stick-to-bottom": "^1.0.41",
|
||||
"web-tree-sitter": "^0.24.3",
|
||||
"tree-sitter": "^0.22.1",
|
||||
"tree-sitter-typescript": "^0.23.2",
|
||||
"use-stick-to-bottom": "^1.0.42",
|
||||
"web-tree-sitter": "^0.24.4",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/env": "^15.0.2",
|
||||
"@next/env": "^15.0.3",
|
||||
"@types/mdx": "^2.0.13",
|
||||
"@types/node": "22.9.0",
|
||||
"@types/react": "^18.3.12",
|
||||
@@ -75,12 +75,12 @@
|
||||
"fast-glob": "^3.3.2",
|
||||
"gray-matter": "^4.0.3",
|
||||
"monaco-editor-webpack-plugin": "^7.1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"postcss": "^8.4.49",
|
||||
"remark": "^15.0.1",
|
||||
"remark-gfm": "^4.0.0",
|
||||
"remark-mdx": "^3.1.0",
|
||||
"remark-stringify": "^11.0.0",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"tsx": "^4.19.2",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 6.3 KiB |
@@ -1,7 +1,10 @@
|
||||
import { MockLLM } from "@llamaindex/core/utils";
|
||||
import { LlamaIndexAdapter, type Message } from "ai";
|
||||
import { SimpleChatEngine, type ChatMessage } from "llamaindex";
|
||||
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
|
||||
import { NextResponse, type NextRequest } from "next/server";
|
||||
|
||||
Settings.llm = new MockLLM(); // config your LLM here
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const { messages } = (await request.json()) as { messages: Message[] };
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
"use client";
|
||||
import { ChatSection } from "@llamaindex/chat-ui";
|
||||
import { useChat } from "ai/react";
|
||||
|
||||
export const ChatDemo = () => {
|
||||
const handler = useChat();
|
||||
return <ChatSection handler={handler} />;
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
"use client";
|
||||
import { ChatInput, ChatMessages, ChatSection } from "@llamaindex/chat-ui";
|
||||
import { useChat } from "ai/react";
|
||||
|
||||
export const ChatDemo = () => {
|
||||
const handler = useChat();
|
||||
return (
|
||||
<ChatSection handler={handler}>
|
||||
<ChatMessages>
|
||||
<ChatMessages.List className="h-auto max-h-[400px]" />
|
||||
<ChatMessages.Actions />
|
||||
</ChatMessages>
|
||||
<ChatInput />
|
||||
</ChatSection>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
import { Markdown } from "@llamaindex/chat-ui/widgets";
|
||||
import { MockLLM } from "@llamaindex/core/utils";
|
||||
import { generateId, Message } from "ai";
|
||||
import { createAI, createStreamableUI, getMutableAIState } from "ai/rsc";
|
||||
import { type ChatMessage, Settings, SimpleChatEngine } from "llamaindex";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type ServerState = Message[];
|
||||
type FrontendState = Array<Message & { display: ReactNode }>;
|
||||
type Actions = {
|
||||
chat: (message: Message) => Promise<Message & { display: ReactNode }>;
|
||||
};
|
||||
|
||||
Settings.llm = new MockLLM(); // config your LLM here
|
||||
|
||||
export const AI = createAI<ServerState, FrontendState, Actions>({
|
||||
initialAIState: [],
|
||||
initialUIState: [],
|
||||
actions: {
|
||||
chat: async (message: Message) => {
|
||||
"use server";
|
||||
|
||||
const aiState = getMutableAIState<typeof AI>();
|
||||
aiState.update((prev) => [...prev, message]);
|
||||
|
||||
const uiStream = createStreamableUI();
|
||||
const chatEngine = new SimpleChatEngine();
|
||||
const assistantMessage: Message = {
|
||||
id: generateId(),
|
||||
role: "assistant",
|
||||
content: "",
|
||||
};
|
||||
|
||||
// run the async function without blocking
|
||||
(async () => {
|
||||
const chatResponse = await chatEngine.chat({
|
||||
stream: true,
|
||||
message: message.content,
|
||||
chatHistory: aiState.get() as ChatMessage[],
|
||||
});
|
||||
|
||||
for await (const chunk of chatResponse) {
|
||||
assistantMessage.content += chunk.delta;
|
||||
uiStream.update(<Markdown content={assistantMessage.content} />);
|
||||
}
|
||||
|
||||
aiState.done([...aiState.get(), assistantMessage]);
|
||||
uiStream.done();
|
||||
})();
|
||||
|
||||
return {
|
||||
...assistantMessage,
|
||||
display: uiStream.value,
|
||||
};
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
ChatInput,
|
||||
ChatMessage,
|
||||
ChatMessages,
|
||||
ChatSection as ChatSectionUI,
|
||||
} from "@llamaindex/chat-ui";
|
||||
import { useChatRSC } from "./use-chat-rsc";
|
||||
|
||||
export const ChatSectionRSC = () => {
|
||||
const handler = useChatRSC();
|
||||
return (
|
||||
<ChatSectionUI handler={handler}>
|
||||
<ChatMessages>
|
||||
<ChatMessages.List className="h-auto max-h-[400px]">
|
||||
{handler.messages.map((message, index) => (
|
||||
<ChatMessage
|
||||
key={index}
|
||||
message={message}
|
||||
isLast={index === handler.messages.length - 1}
|
||||
>
|
||||
<ChatMessage.Avatar />
|
||||
<ChatMessage.Content>{message.display}</ChatMessage.Content>
|
||||
</ChatMessage>
|
||||
))}
|
||||
<ChatMessages.Loading />
|
||||
</ChatMessages.List>
|
||||
</ChatMessages>
|
||||
<ChatInput />
|
||||
</ChatSectionUI>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
import { AI } from "./ai-action";
|
||||
import { ChatSectionRSC } from "./chat-section";
|
||||
|
||||
export const ChatDemoRSC = () => (
|
||||
<AI>
|
||||
<ChatSectionRSC />
|
||||
</AI>
|
||||
);
|
||||
@@ -0,0 +1,41 @@
|
||||
"use client";
|
||||
|
||||
import { useActions } from "ai/rsc";
|
||||
|
||||
import { generateId, Message } from "ai";
|
||||
import { useUIState } from "ai/rsc";
|
||||
import { useState } from "react";
|
||||
import { AI } from "./ai-action";
|
||||
|
||||
export function useChatRSC() {
|
||||
const [input, setInput] = useState<string>("");
|
||||
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||
const [messages, setMessages] = useUIState<typeof AI>();
|
||||
const { chat } = useActions<typeof AI>();
|
||||
|
||||
const append = async (message: Omit<Message, "id">) => {
|
||||
const newMsg: Message = { ...message, id: generateId() };
|
||||
|
||||
setIsLoading(true);
|
||||
try {
|
||||
setMessages((prev) => [...prev, { ...newMsg, display: message.content }]);
|
||||
const assistantMsg = await chat(newMsg);
|
||||
setMessages((prev) => [...prev, assistantMsg]);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
setIsLoading(false);
|
||||
setInput("");
|
||||
|
||||
return message.content;
|
||||
};
|
||||
|
||||
return {
|
||||
input,
|
||||
setInput,
|
||||
isLoading,
|
||||
messages,
|
||||
setMessages,
|
||||
append,
|
||||
};
|
||||
}
|
||||
@@ -85,6 +85,33 @@ const Footer = () => {
|
||||
<Text as="span">SharePoint</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://llamaindex.ai/llamacloud-aws-s3-data-loading-for-generative-ai"
|
||||
data-tracking-variant="link"
|
||||
data-tracking-section="footer"
|
||||
>
|
||||
<Text as="span">AWS S3</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://llamaindex.ai/llamacloud-azure-blob-storage-data-loading-for-generative-ai"
|
||||
data-tracking-variant="link"
|
||||
data-tracking-section="footer"
|
||||
>
|
||||
<Text as="span">Azure Blob Storage</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://llamaindex.ai/llamacloud-google-drive-data-loading-for-generative-ai"
|
||||
data-tracking-variant="link"
|
||||
data-tracking-section="footer"
|
||||
>
|
||||
<Text as="span">Google Drive</Text>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
@@ -171,11 +198,6 @@ const Footer = () => {
|
||||
<Text as="span">SEC Insights</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://chat.llamaindex.ai/">
|
||||
<Text as="span">Chat LlamaIndex</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/run-llama/llamabot">
|
||||
<Text as="span">LlamaBot</Text>
|
||||
|
||||
+5
-4
@@ -1,8 +1,8 @@
|
||||
---
|
||||
title: Chat-UI
|
||||
description: Use chat-ui to add a chat interface to your LlamaIndexTS application.
|
||||
title: Using API Route
|
||||
description: Chat interface for your LlamaIndexTS application using API Route
|
||||
---
|
||||
import { ChatDemo } from '../../../../components/demo/chat';
|
||||
import { ChatDemo } from '../../../../../components/demo/chat/api/demo';
|
||||
import "@llamaindex/chat-ui/styles/code.css";
|
||||
import "@llamaindex/chat-ui/styles/katex.css";
|
||||
|
||||
@@ -26,7 +26,7 @@ This is the simplest way to add a chat interface to your application. Copy the f
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat.tsx",
|
||||
"file": "./src/components/demo/chat/api/demo.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
@@ -37,6 +37,7 @@ Combining both, you're getting a fully functional chat interface:
|
||||
|
||||
<ChatDemo />
|
||||
|
||||
|
||||
## Next Steps
|
||||
|
||||
The steps above are the bare minimum to get a chat interface working. From here, you can go two ways:
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "Chat-UI",
|
||||
"description": "Use chat-ui to add a chat interface to your LlamaIndexTS application.",
|
||||
"defaultOpen": false,
|
||||
"pages": ["chat", "rsc"]
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: Using Next.js RSC
|
||||
description: Chat interface for your LlamaIndexTS application using Next.js RSC
|
||||
---
|
||||
import { ChatDemoRSC } from '../../../../../components/demo/chat/rsc/demo';
|
||||
import "@llamaindex/chat-ui/styles/code.css";
|
||||
import "@llamaindex/chat-ui/styles/katex.css";
|
||||
|
||||
Using [chat-ui](https://github.com/run-llama/chat-ui), it's easy to add a chat interface to your LlamaIndexTS application using [Next.js RSC](https://nextjs.org/docs/app/building-your-application/rendering/server-components) and [Vercel AI RSC](https://sdk.vercel.ai/docs/ai-sdk-rsc/overview).
|
||||
|
||||
With RSC, the chat messages are not returned as JSON from the server (like when using an [API route](./chat)), instead the chat message components are rendered on the server side.
|
||||
This is for example useful for rendering a whole chat history on the server before sending it to the client. [Check here](https://sdk.vercel.ai/docs/getting-started/navigating-the-library#when-to-use-ai-sdk-rsc), for a discussion of when to use use RSC.
|
||||
|
||||
For implementing a chat interface with RSC, you need to create an AI action and then connect the chat interface to use it.
|
||||
|
||||
## Create an AI action
|
||||
|
||||
First, define an [AI context provider](https://sdk.vercel.ai/examples/rsc/state-management/ai-ui-states) with a chat server action:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/ai-action.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
The chat server action is using LlamaIndexTS to generate a response based on the chat history and the user input.
|
||||
|
||||
## Create the chat UI
|
||||
|
||||
The entrypoint of our application initializes the AI provider for the application and adds a `ChatSection` component:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/demo.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
The `ChatSection` component is created by using chat components from @llamaindex/chat-ui:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/chat-section.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
It is using a `useChatRSC` hook to conntect the chat interface to the `chat` AI action that we defined earlier:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/use-chat-rsc.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
## Try RSC Chat ⬇️
|
||||
|
||||
<ChatDemoRSC />
|
||||
|
||||
## Next Steps
|
||||
|
||||
The steps above are the bare minimum to get a chat interface working with RSC. From here, you can go two ways:
|
||||
|
||||
1. Use our [full-stack RSC example](https://github.com/run-llama/nextjs-rsc) based on [create-llama](https://github.com/run-llama/create-llama) to get started quickly with a fully working chat interface or
|
||||
2. Learn more about [AI RSC](https://sdk.vercel.ai/examples/rsc), [chat-ui](https://github.com/run-llama/chat-ui) and [LlamaIndexTS](https://github.com/run-llama/llamaindex-ts) to customize the chat interface and AI actions to your needs.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"title": "Integration",
|
||||
"description": "See our integrations",
|
||||
"pages": ["open-llm-metry", "lang-trace"]
|
||||
"pages": ["open-llm-metry", "lang-trace", "vercel"]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
title: Vercel
|
||||
description: Integrate LlamaIndex with Vercel's AI SDK
|
||||
---
|
||||
|
||||
LlamaIndex provides integration with Vercel's AI SDK, allowing you to create powerful search and retrieval applications. Below are examples of how to use LlamaIndex with `streamText` from the Vercel AI SDK.
|
||||
|
||||
## Setup
|
||||
|
||||
First, install the required dependencies:
|
||||
|
||||
```bash
|
||||
npm install @llamaindex/vercel ai
|
||||
```
|
||||
|
||||
## Using Local Vector Store
|
||||
|
||||
Here's how to create a simple vector store index and query it using Vercel's AI SDK:
|
||||
|
||||
```typescript
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
// Create an index from your documents
|
||||
const document = new Document({ text: yourText, id_: "unique-id" });
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// Create a query tool
|
||||
const queryTool = llamaindex({
|
||||
index,
|
||||
description: "Search through the documents", // optional
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
streamText({
|
||||
tools: { queryTool },
|
||||
prompt: "Your question here",
|
||||
model: openai("gpt-4"),
|
||||
onFinish({ response }) {
|
||||
console.log("Response:", response.messages); // log the response
|
||||
},
|
||||
}).toDataStream();
|
||||
```
|
||||
|
||||
## Using LlamaCloud
|
||||
|
||||
For production deployments, you can use LlamaCloud to store and manage your documents:
|
||||
|
||||
```typescript
|
||||
import { LlamaCloudIndex } from "llamaindex";
|
||||
|
||||
// Create a LlamaCloud index
|
||||
const index = await LlamaCloudIndex.fromDocuments({
|
||||
documents: [document],
|
||||
name: "your-index-name",
|
||||
projectName: "your-project",
|
||||
apiKey: process.env.LLAMA_CLOUD_API_KEY,
|
||||
});
|
||||
|
||||
// Use it the same way as VectorStoreIndex
|
||||
const queryTool = llamaindex({
|
||||
index,
|
||||
description: "Search through the documents",
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
streamText({
|
||||
tools: { queryTool },
|
||||
prompt: "Your question here",
|
||||
model: openai("gpt-4"),
|
||||
}).toDataStream();
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Explore [LlamaCloud](https://cloud.llamaindex.ai/) for managed document storage and retrieval
|
||||
2. Join our [Discord community](https://discord.gg/dGcwcsnxhU) for support and discussions
|
||||
|
||||
@@ -37,6 +37,33 @@ Then, you need create `.dev.vars` and add LLM api keys for the local development
|
||||
|
||||
<Callout type="warn">Do not commit the api key to git repository.</Callout>
|
||||
|
||||
## Integrating with Hono
|
||||
|
||||
```ts
|
||||
import { Hono } from "hono";
|
||||
|
||||
type Bindings = {
|
||||
OPENAI_API_KEY: string;
|
||||
};
|
||||
|
||||
const app = new Hono<{
|
||||
Bindings: Bindings;
|
||||
}>();
|
||||
|
||||
app.post("/llm", async (c) => {
|
||||
const { setEnvs } = await import("@llamaindex/env");
|
||||
setEnvs(c.env);
|
||||
|
||||
// ...
|
||||
|
||||
return new Response('Hello, world!');
|
||||
})
|
||||
|
||||
export default {
|
||||
fetch: app.fetch,
|
||||
};
|
||||
```
|
||||
|
||||
## Difference between Node.js and Cloudflare Worker
|
||||
|
||||
In Cloudflare Worker and similar serverless JS environment, you need to be aware of the following differences:
|
||||
@@ -46,3 +73,7 @@ In Cloudflare Worker and similar serverless JS environment, you need to be aware
|
||||
- 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.
|
||||
- `@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.
|
||||
|
||||
@@ -93,6 +93,35 @@ See more about [moduleResolution](https://www.typescriptlang.org/docs/handbook/m
|
||||
</Accordion>
|
||||
</Accordions>
|
||||
|
||||
## Enable AsyncIterable for `Web Stream` API
|
||||
|
||||
Some modules uses `Web Stream` API like `ReadableStream` and `WritableStream`, you need to enable `DOM.AsyncIterable` in your `tsconfig.json`.
|
||||
|
||||
```json5
|
||||
{
|
||||
compilerOptions: {
|
||||
// ⬇️ add this lib to your tsconfig.json
|
||||
lib: ["DOM.AsyncIterable"],
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
```ts twoslash
|
||||
import { OpenAIAgent } from '@llamaindex/openai'
|
||||
|
||||
const agent = new OpenAIAgent({
|
||||
tools: []
|
||||
})
|
||||
|
||||
const response = await agent.chat({
|
||||
message: 'Hello, how are you?',
|
||||
stream: true
|
||||
})
|
||||
for await (const _ of response) {
|
||||
//^?
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Run TypeScript Script in Node.js
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"extends": ["//"],
|
||||
"tasks": {
|
||||
"build": {
|
||||
"outputs": [
|
||||
".next",
|
||||
".source",
|
||||
"next-env.d.ts",
|
||||
"src/content/docs/cloud/api/**"
|
||||
]
|
||||
},
|
||||
"dev": {
|
||||
"dependsOn": ["^build"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1,4 @@
|
||||
POSTGRES_USER=runner
|
||||
PINECONE_API_KEY=
|
||||
PINECONE_INDEX_NAME=
|
||||
PINECONE_NAMESPACE=
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
# Logs
|
||||
|
||||
logs
|
||||
_.log
|
||||
npm-debug.log_
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
|
||||
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
||||
|
||||
# Runtime data
|
||||
|
||||
pids
|
||||
_.pid
|
||||
_.seed
|
||||
\*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
|
||||
coverage
|
||||
\*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
|
||||
\*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
|
||||
\*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
|
||||
.cache/
|
||||
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.\*
|
||||
|
||||
# wrangler project
|
||||
|
||||
.dev.vars
|
||||
.wrangler/
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-hono",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"deploy": "wrangler deploy",
|
||||
"build": "wrangler deploy --dry-run --outdir dist",
|
||||
"dev": "wrangler dev",
|
||||
"start": "wrangler dev",
|
||||
"cf-typegen": "wrangler types"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20241112.0",
|
||||
"typescript": "^5.5.2",
|
||||
"wrangler": "^3.89.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"hono": "^4.6.11"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
import { Hono } from "hono";
|
||||
|
||||
type Bindings = {
|
||||
OPENAI_API_KEY: string;
|
||||
PINECONE_API_KEY: string;
|
||||
};
|
||||
|
||||
const app = new Hono<{
|
||||
Bindings: Bindings;
|
||||
}>();
|
||||
|
||||
app.post("/llm", async (c) => {
|
||||
//#region init envs
|
||||
const { setEnvs } = await import("@llamaindex/env");
|
||||
setEnvs(c.env);
|
||||
//#endregion
|
||||
|
||||
const { message } = await c.req.json();
|
||||
|
||||
const { extractText } = await import("@llamaindex/core/utils");
|
||||
|
||||
const {
|
||||
QueryEngineTool,
|
||||
serviceContextFromDefaults,
|
||||
VectorStoreIndex,
|
||||
OpenAIAgent,
|
||||
Settings,
|
||||
OpenAI,
|
||||
OpenAIEmbedding,
|
||||
} = await import("llamaindex");
|
||||
|
||||
const { PineconeVectorStore } = await import(
|
||||
"llamaindex/vector-store/PineconeVectorStore"
|
||||
);
|
||||
|
||||
const llm = new OpenAI({
|
||||
model: "gpt-4o-mini",
|
||||
apiKey: c.env.OPENAI_API_KEY,
|
||||
});
|
||||
|
||||
Settings.embedModel = new OpenAIEmbedding({
|
||||
model: "text-embedding-3-small",
|
||||
apiKey: c.env.OPENAI_API_KEY,
|
||||
});
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({
|
||||
llm,
|
||||
chunkSize: 8191,
|
||||
chunkOverlap: 0,
|
||||
});
|
||||
|
||||
const store = new PineconeVectorStore({
|
||||
namespace: "8xolsn4ulEQGdhnhP76yCzfLHdOZ",
|
||||
});
|
||||
|
||||
const index = await VectorStoreIndex.fromVectorStore(store, serviceContext);
|
||||
|
||||
const retriever = index.asRetriever({
|
||||
similarityTopK: 3,
|
||||
});
|
||||
|
||||
// Create a query engine
|
||||
const queryEngine = index.asQueryEngine({
|
||||
retriever,
|
||||
});
|
||||
|
||||
const tools = [
|
||||
new QueryEngineTool({
|
||||
queryEngine: queryEngine,
|
||||
metadata: {
|
||||
name: "business_info_tool",
|
||||
description:
|
||||
"This tool can answer questions based " +
|
||||
"on business information. Return not found if you" +
|
||||
" can't find the answer in the documents.",
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
const agent = new OpenAIAgent({ tools });
|
||||
|
||||
const response = await agent.chat({
|
||||
message: message,
|
||||
});
|
||||
|
||||
return new Response(extractText(response.message.content));
|
||||
});
|
||||
|
||||
export default {
|
||||
fetch: app.fetch,
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
"target": "es2021",
|
||||
/* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
"lib": ["es2021", "DOM.AsyncIterable"],
|
||||
/* Specify what JSX code is generated. */
|
||||
"jsx": "react-jsx",
|
||||
/* Specify what module code is generated. */
|
||||
"module": "es2022",
|
||||
/* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
"moduleResolution": "Bundler",
|
||||
/* Specify type package names to be included without being referenced in a source file. */
|
||||
"types": ["@cloudflare/workers-types/2023-07-01"],
|
||||
/* Enable importing .json files */
|
||||
"resolveJsonModule": true,
|
||||
/* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
|
||||
"allowJs": true,
|
||||
/* Enable error reporting in type-checked JavaScript files. */
|
||||
"checkJs": false,
|
||||
/* Disable emitting files from a compilation. */
|
||||
"noEmit": true,
|
||||
/* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
"isolatedModules": true,
|
||||
/* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"allowSyntheticDefaultImports": true,
|
||||
/* Ensure that casing is correct in imports. */
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
/* Enable all strict type-checking options. */
|
||||
"strict": true,
|
||||
/* Skip type checking all .d.ts files. */
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"exclude": ["test"],
|
||||
"include": ["vitest.config.mts", "worker-configuration.d.ts", "src/**/*.ts"]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// Generated by Wrangler by running `wrangler types`
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
||||
interface Env {}
|
||||
@@ -0,0 +1,7 @@
|
||||
name = "llamaindex-cloudflare-hono-example"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2024-11-12"
|
||||
compatibility_flags = ["nodejs_als"]
|
||||
|
||||
[observability]
|
||||
enabled = true
|
||||
@@ -1,5 +1,140 @@
|
||||
# @llamaindex/cloudflare-worker-agent-test
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
|
||||
## 0.0.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 0.0.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
|
||||
## 0.0.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 0.0.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||
"version": "0.0.102",
|
||||
"version": "0.0.122",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@@ -12,13 +12,13 @@
|
||||
"cf-typegen": "wrangler types"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/vitest-pool-workers": "^0.5.8",
|
||||
"@cloudflare/workers-types": "^4.20240924.0",
|
||||
"@vitest/runner": "2.1.4",
|
||||
"@vitest/snapshot": "2.1.4",
|
||||
"@cloudflare/vitest-pool-workers": "^0.5.28",
|
||||
"@cloudflare/workers-types": "^4.20241112.0",
|
||||
"@vitest/runner": "2.1.5",
|
||||
"@vitest/snapshot": "2.1.5",
|
||||
"typescript": "^5.6.3",
|
||||
"vitest": "2.1.4",
|
||||
"wrangler": "^3.78.8"
|
||||
"vitest": "2.1.5",
|
||||
"wrangler": "^3.87.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*"
|
||||
|
||||
@@ -1,5 +1,91 @@
|
||||
# @llamaindex/llama-parse-browser-test
|
||||
|
||||
## 0.0.37
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.17
|
||||
|
||||
## 0.0.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/cloud@2.0.16
|
||||
|
||||
## 0.0.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.15
|
||||
|
||||
## 0.0.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.14
|
||||
|
||||
## 0.0.33
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/cloud@2.0.13
|
||||
|
||||
## 0.0.32
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.12
|
||||
|
||||
## 0.0.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.11
|
||||
|
||||
## 0.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.10
|
||||
|
||||
## 0.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.9
|
||||
|
||||
## 0.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.8
|
||||
|
||||
## 0.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.7
|
||||
|
||||
## 0.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.6
|
||||
|
||||
## 0.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.5
|
||||
|
||||
## 0.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.4
|
||||
|
||||
## 0.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llama-parse-browser-test",
|
||||
"private": true,
|
||||
"version": "0.0.23",
|
||||
"version": "0.0.37",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.6.3",
|
||||
"vite": "^5.4.1",
|
||||
"vite": "^5.4.11",
|
||||
"vite-plugin-wasm": "^3.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,5 +1,140 @@
|
||||
# @llamaindex/next-agent-test
|
||||
|
||||
## 0.1.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.1.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.1.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.1.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.1.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.1.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.1.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.1.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.1.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.1.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.1.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.1.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.1.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.1.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
|
||||
## 0.1.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 0.1.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
|
||||
## 0.1.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 0.1.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-agent-test",
|
||||
"version": "0.1.102",
|
||||
"version": "0.1.122",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -8,9 +8,9 @@
|
||||
"start": "next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"ai": "^3.3.21",
|
||||
"ai": "^4.0.0",
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"next": "15.0.3",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1"
|
||||
},
|
||||
@@ -18,10 +18,10 @@
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/react": "^18.3.12",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-config-next": "15.0.2",
|
||||
"postcss": "^8.4.41",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"eslint": "9.15.0",
|
||||
"eslint-config-next": "15.0.3",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,140 @@
|
||||
# test-edge-runtime
|
||||
|
||||
## 0.1.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.1.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.1.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.1.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.1.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.1.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.1.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.1.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.1.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.1.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.1.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.1.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.1.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.1.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
|
||||
## 0.1.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 0.1.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
|
||||
## 0.1.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 0.1.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||
"version": "0.1.101",
|
||||
"version": "0.1.121",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"next": "15.0.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,140 @@
|
||||
# @llamaindex/next-node-runtime
|
||||
|
||||
## 0.0.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.100
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.99
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.98
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.97
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.96
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.92
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.91
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.90
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.89
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.88
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.87
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
|
||||
## 0.0.86
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 0.0.85
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
|
||||
## 0.0.84
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 0.0.83
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-node-runtime-test",
|
||||
"version": "0.0.83",
|
||||
"version": "0.0.103",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"next": "15.0.3",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1"
|
||||
},
|
||||
@@ -17,10 +17,10 @@
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/react": "^18.3.12",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-config-next": "15.0.2",
|
||||
"postcss": "^8.4.41",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"eslint": "9.15.0",
|
||||
"eslint-config-next": "15.0.3",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ Settings.llm = new OpenAI({
|
||||
});
|
||||
Settings.embedModel = new HuggingFaceEmbedding({
|
||||
modelType: "BAAI/bge-small-en-v1.5",
|
||||
quantized: false,
|
||||
});
|
||||
Settings.callbackManager.on("llm-tool-call", (event) => {
|
||||
console.log(event.detail);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// test runtime
|
||||
import { Tokenizers, tokenizers } from "@llamaindex/env";
|
||||
import { Tokenizers, tokenizers } from "@llamaindex/env/tokenizers";
|
||||
import "llamaindex";
|
||||
|
||||
// @ts-expect-error EdgeRuntime is not defined in type
|
||||
|
||||
@@ -1,5 +1,140 @@
|
||||
# @llamaindex/waku-query-engine-test
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
|
||||
## 0.0.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 0.0.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
|
||||
## 0.0.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 0.0.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/waku-query-engine-test",
|
||||
"version": "0.0.102",
|
||||
"version": "0.0.122",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@@ -10,16 +10,16 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
"react": "19.0.0-rc-bf7e210c-20241017",
|
||||
"react-dom": "19.0.0-rc-bf7e210c-20241017",
|
||||
"react-server-dom-webpack": "19.0.0-rc-bf7e210c-20241017",
|
||||
"waku": "0.21.4"
|
||||
"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"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "18.3.12",
|
||||
"@types/react-dom": "18.3.1",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
import { OpenAI } from "./openai.js";
|
||||
|
||||
export class Ollama extends OpenAI {}
|
||||
+11
-1
@@ -15,7 +15,17 @@ export async function resolve(specifier, context, nextResolve) {
|
||||
const targetUrl = fileURLToPath(result.url).replace(/\.js$/, ".ts");
|
||||
let relativePath = relative(packageDistDir, targetUrl);
|
||||
// todo: make it more generic if we have more sub modules fixtures in the future
|
||||
if (relativePath.startsWith("../../llm/openai")) {
|
||||
if (relativePath.startsWith("../../llm/anthropic")) {
|
||||
relativePath = relativePath.replace(
|
||||
"../../llm/ollama/dist/index.ts",
|
||||
"llm/anthropic.ts",
|
||||
);
|
||||
} else if (relativePath.startsWith("../../llm/ollama")) {
|
||||
relativePath = relativePath.replace(
|
||||
"../../llm/ollama/dist/index.ts",
|
||||
"llm/ollama.ts",
|
||||
);
|
||||
} else if (relativePath.startsWith("../../llm/openai")) {
|
||||
relativePath = relativePath.replace(
|
||||
"../../llm/openai/dist/index.ts",
|
||||
"llm/openai.ts",
|
||||
|
||||
@@ -21,6 +21,11 @@ test.beforeEach(() => {
|
||||
});
|
||||
|
||||
await test("clip embedding", async (t) => {
|
||||
const major = parseInt(process.versions.node.split(".")[0] ?? "0", 10);
|
||||
if (major < 20) {
|
||||
t.skip("Skip CLIP tests on Node.js < 20");
|
||||
return;
|
||||
}
|
||||
await t.test("should trigger load transformer event", async () => {
|
||||
const nodes = [
|
||||
new ImageNode({
|
||||
@@ -64,7 +69,7 @@ await test("clip embedding", async (t) => {
|
||||
});
|
||||
|
||||
await t.test("custom transformer", async () => {
|
||||
const transformers = await import("@xenova/transformers");
|
||||
const transformers = await import("@huggingface/transformers");
|
||||
const getter = test.mock.fn((t, k, r) => {
|
||||
return Reflect.get(t, k, r);
|
||||
});
|
||||
|
||||
+33
-1
@@ -1,6 +1,13 @@
|
||||
import { LLMSingleSelector, Settings } from "llamaindex";
|
||||
import type { TaskStep } from "@llamaindex/core/agent";
|
||||
import {
|
||||
LLMSingleSelector,
|
||||
OpenAIAgent,
|
||||
Settings,
|
||||
type ChatMessage,
|
||||
} from "llamaindex";
|
||||
import assert from "node:assert";
|
||||
import { test } from "node:test";
|
||||
import { divideNumbersTool, sumNumbersTool } from "./fixtures/tools.js";
|
||||
import { mockLLMEvent } from "./utils.js";
|
||||
|
||||
await test("#1177", async (t) => {
|
||||
@@ -65,3 +72,28 @@ await test("#1177", async (t) => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
await test("#1281", async (t) => {
|
||||
await mockLLMEvent(t, "#1281");
|
||||
await t.test(async () => {
|
||||
const chatHistory: ChatMessage[] = [];
|
||||
const agent = new OpenAIAgent({
|
||||
chatHistory,
|
||||
tools: [sumNumbersTool, divideNumbersTool],
|
||||
});
|
||||
{
|
||||
const stream = agent.createTask(
|
||||
"calculate 2 + 2",
|
||||
true,
|
||||
true,
|
||||
chatHistory,
|
||||
);
|
||||
const steps: TaskStep[] = [];
|
||||
for await (const task of stream) {
|
||||
steps.push(task.taskStep);
|
||||
}
|
||||
const lastStep = steps.at(-1)!;
|
||||
assert.equal(lastStep.context.store.messages.length, 4);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import { Ollama } from "@llamaindex/ollama";
|
||||
import assert from "node:assert";
|
||||
import { test } from "node:test";
|
||||
import { getWeatherTool } from "./fixtures/tools.js";
|
||||
import { mockLLMEvent } from "./utils.js";
|
||||
|
||||
await test("ollama", async (t) => {
|
||||
await mockLLMEvent(t, "ollama");
|
||||
await t.test("ollama function call", async (t) => {
|
||||
const llm = new Ollama({
|
||||
model: "llama3.2",
|
||||
});
|
||||
const chatResponse = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "What is the weather in Paris?",
|
||||
},
|
||||
],
|
||||
tools: [getWeatherTool],
|
||||
});
|
||||
if (
|
||||
chatResponse.message.options &&
|
||||
"toolCall" in chatResponse.message.options
|
||||
) {
|
||||
assert.equal(chatResponse.message.options.toolCall.length, 1);
|
||||
assert.equal(
|
||||
chatResponse.message.options.toolCall[0]!.name,
|
||||
getWeatherTool.metadata.name,
|
||||
);
|
||||
} else {
|
||||
throw new Error("Expected tool calls in response");
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -167,6 +167,7 @@ For questions about more specific sections, please use the vector_tool.`,
|
||||
const mockCall = t.mock.fn(({ query }: { query: string }) => {
|
||||
return originalCall({ query });
|
||||
});
|
||||
// @ts-expect-error what?
|
||||
queryEngineTools[1]!.call = mockCall;
|
||||
|
||||
const toolMapping = SimpleToolNodeMapping.fromObjects(queryEngineTools);
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
{
|
||||
"llmEventStart": [
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "calculate 2 + 2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "calculate 2 + 2"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "",
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": {
|
||||
"a": 2,
|
||||
"b": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "4",
|
||||
"options": {
|
||||
"toolResult": {
|
||||
"result": "4",
|
||||
"isError": false,
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"llmEventEnd": [
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"response": {
|
||||
"raw": null,
|
||||
"message": {
|
||||
"content": "",
|
||||
"role": "assistant",
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": {
|
||||
"a": 2,
|
||||
"b": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"response": {
|
||||
"raw": null,
|
||||
"message": {
|
||||
"content": "The result of \\(2 + 2\\) is \\(4\\).",
|
||||
"role": "assistant",
|
||||
"options": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"llmEventStream": [
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": "{\"a\":2,\"b\":2}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "sumNumbers",
|
||||
"id": "call_S2x0FUa475GVpNQJ796Rc9fd",
|
||||
"input": {
|
||||
"a": 2,
|
||||
"b": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"delta": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": "The"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " of"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " \\("
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": "2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " +"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " "
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": "2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": "\\"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": ")"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " is"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": " \\("
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": "4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": "\\"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": ")."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "PRESERVE_1",
|
||||
"chunk": {
|
||||
"raw": null,
|
||||
"options": {},
|
||||
"delta": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"llmEventStart": [
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "What is the weather in Paris?"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"llmEventEnd": [
|
||||
{
|
||||
"id": "PRESERVE_0",
|
||||
"response": {
|
||||
"message": {
|
||||
"role": "assistant",
|
||||
"content": "",
|
||||
"options": {
|
||||
"toolCall": [
|
||||
{
|
||||
"name": "getWeather",
|
||||
"input": {
|
||||
"city": "Paris"
|
||||
},
|
||||
"id": "5d198775-5268-4552-993b-9ecb4425385b"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"raw": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"llmEventStream": []
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
import { Document, MetadataMode } from "@llamaindex/core/schema";
|
||||
import { config } from "dotenv";
|
||||
import {
|
||||
OpenAIEmbedding,
|
||||
PineconeVectorStore,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
import assert from "node:assert";
|
||||
import { test } from "node:test";
|
||||
|
||||
config({ path: [".env.local", ".env", ".env.ci"] });
|
||||
|
||||
await test("pinecone", async (t) => {
|
||||
if (
|
||||
!process.env.PINECONE_API_KEY ||
|
||||
!process.env.PINECONE_NAMESPACE ||
|
||||
!process.env.PINECONE_INDEX_NAME
|
||||
) {
|
||||
return t.skip(
|
||||
"PINECONE_API_KEY, PINECONE_NAMESPACE, and PINECONE_INDEX_NAME must be set to run this test",
|
||||
);
|
||||
}
|
||||
const openaiEmbedding = new OpenAIEmbedding({
|
||||
model: "text-embedding-3-large",
|
||||
});
|
||||
|
||||
const vectorStore = new PineconeVectorStore({
|
||||
embeddingModel: openaiEmbedding,
|
||||
});
|
||||
|
||||
t.after(async () => {
|
||||
await vectorStore.clearIndex();
|
||||
});
|
||||
|
||||
const index = await VectorStoreIndex.fromVectorStore(vectorStore);
|
||||
|
||||
const retriever = index.asRetriever({
|
||||
similarityTopK: 3,
|
||||
});
|
||||
const text = "We are open from 9am to 5pm";
|
||||
|
||||
await vectorStore.add([
|
||||
new Document({
|
||||
text,
|
||||
embedding: await openaiEmbedding.getTextEmbedding(text),
|
||||
}),
|
||||
]);
|
||||
|
||||
const results = await retriever.retrieve({
|
||||
query: "When are you open?",
|
||||
});
|
||||
results.every((result) => {
|
||||
assert.ok(result.node.embedding instanceof Array);
|
||||
result.node.embedding.every((embedding, idx) =>
|
||||
assert.ok(
|
||||
typeof embedding === "number",
|
||||
`Embedding at index ${idx} should be a number`,
|
||||
),
|
||||
);
|
||||
assert.ok(typeof result.score === "number", "Score should be a number");
|
||||
assert.ok(
|
||||
result.node.getContent(MetadataMode.NONE).length > 0,
|
||||
"Content should not be empty",
|
||||
);
|
||||
});
|
||||
});
|
||||
+2
-1
@@ -12,10 +12,11 @@
|
||||
"@faker-js/faker": "^9.2.0",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"@llamaindex/ollama": "workspace:*",
|
||||
"@llamaindex/openai": "workspace:*",
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/pg": "^8.11.8",
|
||||
"@xenova/transformers": "^2.17.2",
|
||||
"@huggingface/transformers": "^3.0.2",
|
||||
"consola": "^3.2.3",
|
||||
"dotenv": "^16.4.5",
|
||||
"llamaindex": "workspace:*",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"module": "node16",
|
||||
"moduleResolution": "node16",
|
||||
"target": "ESNext",
|
||||
"lib": ["ES2022", "DOM.AsyncIterable"],
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["./node", "./mock-module.js", "./mock-register.js", "./fixtures"],
|
||||
|
||||
@@ -1,5 +1,78 @@
|
||||
# examples
|
||||
|
||||
## 0.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
- llamaindex@0.8.26
|
||||
- @llamaindex/vercel@0.0.4
|
||||
- @llamaindex/readers@1.0.19
|
||||
|
||||
## 0.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7e8230b]
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/readers@1.0.18
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/vercel@0.0.3
|
||||
- @llamaindex/workflow@0.0.7
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- fd38a25: Add vercel tool adapter to use query engine tool
|
||||
- Updated dependencies [fd38a25]
|
||||
- @llamaindex/vercel@0.0.2
|
||||
|
||||
## 0.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [ee20c44]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
- @llamaindex/workflow@0.0.6
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/readers@1.0.11
|
||||
|
||||
## 0.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ea92b69]
|
||||
- Updated dependencies [fadc8b8]
|
||||
- @llamaindex/workflow@0.0.5
|
||||
|
||||
## 0.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- Updated dependencies [d89ebe0]
|
||||
- Updated dependencies [fd8c882]
|
||||
- Updated dependencies [fd8c882]
|
||||
- llamaindex@0.8.10
|
||||
- @llamaindex/core@0.4.7
|
||||
- @llamaindex/workflow@0.0.4
|
||||
- @llamaindex/readers@1.0.8
|
||||
|
||||
## 0.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- @llamaindex/core@0.4.5
|
||||
- llamaindex@0.8.8
|
||||
- @llamaindex/workflow@0.0.3
|
||||
- @llamaindex/readers@1.0.6
|
||||
|
||||
## 0.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import { Anthropic } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
const anthropic = new Anthropic({
|
||||
model: "claude-3-5-sonnet-20241022",
|
||||
});
|
||||
|
||||
const entireBook = await fetch(
|
||||
"https://www.gutenberg.org/files/1342/1342-0.txt",
|
||||
).then((response) => response.text());
|
||||
|
||||
const response = await anthropic.chat({
|
||||
messages: [
|
||||
{
|
||||
content:
|
||||
"You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n",
|
||||
role: "system",
|
||||
},
|
||||
{
|
||||
content: entireBook,
|
||||
role: "system",
|
||||
options: {
|
||||
cache_control: {
|
||||
type: "ephemeral",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
content: "analyze the major themes in Pride and Prejudice.",
|
||||
role: "user",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
console.log(response.message.content);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -83,14 +83,6 @@ async function query() {
|
||||
});
|
||||
}
|
||||
|
||||
// configure the Azure CosmosDB NoSQL Vector Store
|
||||
const dbConfig: AzureCosmosDBNoSQLConfig = {
|
||||
client: cosmosClient,
|
||||
databaseName,
|
||||
containerName,
|
||||
flatMetadata: false,
|
||||
};
|
||||
|
||||
// use Azure CosmosDB as a vectorStore, docStore, and indexStore
|
||||
const { vectorStore, docStore, indexStore } = await initializeStores();
|
||||
|
||||
|
||||
@@ -1,24 +1,27 @@
|
||||
{
|
||||
"name": "@llamaindex/examples",
|
||||
"private": true,
|
||||
"version": "0.0.12",
|
||||
"version": "0.0.19",
|
||||
"dependencies": {
|
||||
"@ai-sdk/openai": "^1.0.5",
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@azure/cosmos": "^4.1.1",
|
||||
"@azure/identity": "^4.4.1",
|
||||
"@datastax/astra-db-ts": "^1.4.1",
|
||||
"@llamaindex/core": "^0.4.0",
|
||||
"@llamaindex/readers": "^1.0.0",
|
||||
"@llamaindex/workflow": "^0.0.2",
|
||||
"@llamaindex/core": "^0.4.17",
|
||||
"@llamaindex/readers": "^1.0.19",
|
||||
"@llamaindex/workflow": "^0.0.7",
|
||||
"@llamaindex/vercel": "^0.0.4",
|
||||
"@notionhq/client": "^2.2.15",
|
||||
"@pinecone-database/pinecone": "^3.0.2",
|
||||
"@pinecone-database/pinecone": "^4.0.0",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
"@zilliz/milvus2-sdk-node": "^2.4.6",
|
||||
"ai": "^4.0.0",
|
||||
"chromadb": "^1.8.1",
|
||||
"commander": "^12.1.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"js-tiktoken": "^1.0.14",
|
||||
"llamaindex": "^0.8.0",
|
||||
"llamaindex": "^0.8.26",
|
||||
"mongodb": "^6.7.0",
|
||||
"pathe": "^1.1.2",
|
||||
"postgres": "^3.4.4"
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
"start:llamaparse-dir": "node --import tsx ./src/simple-directory-reader-with-llamaparse.ts",
|
||||
"start:llamaparse-json": "node --import tsx ./src/llamaparse-json.ts",
|
||||
"start:discord": "node --import tsx ./src/discord.ts",
|
||||
"start:json": "node --import tsx ./src/json.ts"
|
||||
"start:json": "node --import tsx ./src/json.ts",
|
||||
"start:obsidian": "node --import tsx ./src/obsidian.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@llamaindex/readers": "*",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { ObsidianReader } from "@llamaindex/readers/obsidian";
|
||||
|
||||
const obsidianReader = new ObsidianReader(
|
||||
"/Users/jingyi/Documents/jingyi-vault",
|
||||
);
|
||||
|
||||
obsidianReader.loadData().then((documents) => {
|
||||
console.log("documents:", documents.length);
|
||||
documents.forEach((doc) => {
|
||||
console.log(`document (${doc.id_}):`, doc.getText());
|
||||
});
|
||||
});
|
||||
@@ -14,7 +14,6 @@ Settings.llm = new Ollama({
|
||||
|
||||
Settings.embedModel = new HuggingFaceEmbedding({
|
||||
modelType: "BAAI/bge-small-en-v1.5",
|
||||
quantized: false,
|
||||
});
|
||||
|
||||
async function main() {
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
# Vercel Examples
|
||||
|
||||
These examples demonstrate how to integrate LlamaIndexTS with Vercel's AI SDK. The examples show how to use LlamaIndex for search and retrieval in both local vector store and LlamaCloud environments.
|
||||
|
||||
## Setup
|
||||
|
||||
To run these examples, first install the required dependencies from the parent folder `examples`:
|
||||
|
||||
```bash
|
||||
npm i
|
||||
```
|
||||
|
||||
## Running the Examples
|
||||
|
||||
Make sure to run the examples from the parent folder called `examples`. The following examples are available:
|
||||
|
||||
### Vector Store Example
|
||||
|
||||
Run the local vector store example with:
|
||||
|
||||
```bash
|
||||
npx tsx vercel/vector-store.ts
|
||||
```
|
||||
|
||||
This example demonstrates:
|
||||
|
||||
- Creating a vector store index from one document
|
||||
- Using Vercel's AI SDK with LlamaIndex for streaming responses
|
||||
|
||||
### LlamaCloud Example
|
||||
|
||||
To run the LlamaCloud example:
|
||||
|
||||
```bash
|
||||
npx tsx vercel/llamacloud.ts
|
||||
```
|
||||
|
||||
This example requires a LlamaCloud API key set in your environment and an embedding model set in the `EMBEDDING_MODEL` environment variable:
|
||||
|
||||
```bash
|
||||
export LLAMA_CLOUD_API_KEY=your_api_key_here
|
||||
export EMBEDDING_MODEL="text-embedding-3-small"
|
||||
```
|
||||
|
||||
The example demonstrates:
|
||||
|
||||
- Creating a LlamaCloud index from one document
|
||||
- Streaming responses using Vercel's AI SDK
|
||||
|
||||
For more detailed information about the Vercel integration, check out [the documentation](https://ts.llamaindex.ai/docs/llamaindex/integration/vercel).
|
||||
@@ -0,0 +1,38 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { Document, LlamaCloudIndex } from "llamaindex";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
async function main() {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
|
||||
const index = await LlamaCloudIndex.fromDocuments({
|
||||
documents: [document],
|
||||
name: "test-pipeline",
|
||||
projectName: "Default",
|
||||
apiKey: process.env.LLAMA_CLOUD_API_KEY,
|
||||
});
|
||||
console.log("Successfully created index");
|
||||
|
||||
const result = streamText({
|
||||
model: openai("gpt-4o"),
|
||||
prompt: "Cost of moving cat from Russia to UK?",
|
||||
tools: {
|
||||
queryTool: llamaindex({
|
||||
index,
|
||||
description:
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
}),
|
||||
},
|
||||
maxSteps: 5,
|
||||
});
|
||||
|
||||
for await (const textPart of result.textStream) {
|
||||
process.stdout.write(textPart);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -0,0 +1,34 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
async function main() {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
console.log("Successfully created index");
|
||||
|
||||
const result = streamText({
|
||||
model: openai("gpt-4o"),
|
||||
prompt: "Cost of moving cat from Russia to UK?",
|
||||
tools: {
|
||||
queryTool: llamaindex({
|
||||
index,
|
||||
description:
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
}),
|
||||
},
|
||||
maxSteps: 5,
|
||||
});
|
||||
|
||||
for await (const textPart of result.textStream) {
|
||||
process.stdout.write(textPart);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -0,0 +1,16 @@
|
||||
import { VLLM } from "llamaindex";
|
||||
|
||||
const llm = new VLLM({
|
||||
model: "NousResearch/Meta-Llama-3-8B-Instruct",
|
||||
});
|
||||
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "Hello?",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
console.log(response.message.content);
|
||||
@@ -1,14 +1,19 @@
|
||||
import {
|
||||
Context,
|
||||
HandlerContext,
|
||||
StartEvent,
|
||||
StopEvent,
|
||||
Workflow,
|
||||
WorkflowEvent,
|
||||
} from "@llamaindex/core/workflow";
|
||||
} from "@llamaindex/workflow";
|
||||
import { OpenAI } from "llamaindex";
|
||||
|
||||
const MAX_REVIEWS = 3;
|
||||
|
||||
type Context = {
|
||||
specification: string;
|
||||
numberReviews: number;
|
||||
};
|
||||
|
||||
// Using the o1-preview model (see https://platform.openai.com/docs/guides/reasoning?reasoning-prompt-examples=coding-planning)
|
||||
const llm = new OpenAI({ model: "o1-preview", temperature: 1 });
|
||||
|
||||
@@ -20,7 +25,9 @@ stores the question/answer pair in the database.`;
|
||||
|
||||
// Create custom event types
|
||||
export class MessageEvent extends WorkflowEvent<{ msg: string }> {}
|
||||
|
||||
export class CodeEvent extends WorkflowEvent<{ code: string }> {}
|
||||
|
||||
export class ReviewEvent extends WorkflowEvent<{
|
||||
review: string;
|
||||
code: string;
|
||||
@@ -34,12 +41,13 @@ const truncate = (str: string) => {
|
||||
};
|
||||
|
||||
// the architect is responsible for writing the structure and the initial code based on the specification
|
||||
const architect = async (context: Context, ev: StartEvent) => {
|
||||
// get the specification from the start event and save it to context
|
||||
context.set("specification", ev.data.input);
|
||||
const spec = context.get("specification");
|
||||
const architect = async (
|
||||
context: HandlerContext<Context>,
|
||||
_: StartEvent<string>,
|
||||
) => {
|
||||
const spec = context.data.specification;
|
||||
// write a message to send an update to the user
|
||||
context.writeEventToStream(
|
||||
context.sendEvent(
|
||||
new MessageEvent({
|
||||
msg: `Writing app using this specification: ${truncate(spec)}`,
|
||||
}),
|
||||
@@ -50,13 +58,13 @@ const architect = async (context: Context, ev: StartEvent) => {
|
||||
};
|
||||
|
||||
// the coder is responsible for updating the code based on the review
|
||||
const coder = async (context: Context, ev: ReviewEvent) => {
|
||||
const coder = async (context: HandlerContext<Context>, ev: ReviewEvent) => {
|
||||
// get the specification from the context
|
||||
const spec = context.get("specification");
|
||||
const spec = context.data.specification;
|
||||
// get the latest review and code
|
||||
const { review, code } = ev.data;
|
||||
// write a message to send an update to the user
|
||||
context.writeEventToStream(
|
||||
context.sendEvent(
|
||||
new MessageEvent({
|
||||
msg: `Update code based on review: ${truncate(review)}`,
|
||||
}),
|
||||
@@ -67,32 +75,35 @@ const coder = async (context: Context, ev: ReviewEvent) => {
|
||||
};
|
||||
|
||||
// the reviewer is responsible for reviewing the code and providing feedback
|
||||
const reviewer = async (context: Context, ev: CodeEvent) => {
|
||||
const reviewer = async (context: HandlerContext<Context>, ev: CodeEvent) => {
|
||||
// get the specification from the context
|
||||
const spec = context.get("specification");
|
||||
const spec = context.data.specification;
|
||||
// get latest code from the event
|
||||
const { code } = ev.data;
|
||||
// update and check the number of reviews
|
||||
const numberReviews = context.get("numberReviews", 0) + 1;
|
||||
context.set("numberReviews", numberReviews);
|
||||
if (numberReviews > MAX_REVIEWS) {
|
||||
context.data.numberReviews++;
|
||||
if (context.data.numberReviews > MAX_REVIEWS) {
|
||||
// the we've done this too many times - return the code
|
||||
context.writeEventToStream(
|
||||
context.sendEvent(
|
||||
new MessageEvent({
|
||||
msg: `Already reviewed ${numberReviews - 1} times, stopping!`,
|
||||
msg: `Already reviewed ${
|
||||
context.data.numberReviews - 1
|
||||
} times, stopping!`,
|
||||
}),
|
||||
);
|
||||
return new StopEvent({ result: code });
|
||||
}
|
||||
// write a message to send an update to the user
|
||||
context.writeEventToStream(
|
||||
new MessageEvent({ msg: `Review #${numberReviews}: ${truncate(code)}` }),
|
||||
context.sendEvent(
|
||||
new MessageEvent({
|
||||
msg: `Review #${context.data.numberReviews}: ${truncate(code)}`,
|
||||
}),
|
||||
);
|
||||
const prompt = `Review this code: <code>${code}</code>. Check if the code quality and whether it correctly implements this specification: <spec>${spec}</spec>. If you're satisfied, just return 'Looks great', nothing else. If not, return a review with a list of changes you'd like to see.`;
|
||||
const review = (await llm.complete({ prompt })).text;
|
||||
if (review.includes("Looks great")) {
|
||||
// the reviewer is satisfied with the code, let's return the review
|
||||
context.writeEventToStream(
|
||||
context.sendEvent(
|
||||
new MessageEvent({
|
||||
msg: `Reviewer says: ${review}`,
|
||||
}),
|
||||
@@ -103,20 +114,44 @@ const reviewer = async (context: Context, ev: CodeEvent) => {
|
||||
return new ReviewEvent({ review, code });
|
||||
};
|
||||
|
||||
const codeAgent = new Workflow({ validate: true });
|
||||
codeAgent.addStep(StartEvent, architect, { outputs: CodeEvent });
|
||||
codeAgent.addStep(ReviewEvent, coder, { outputs: CodeEvent });
|
||||
codeAgent.addStep(CodeEvent, reviewer, { outputs: ReviewEvent });
|
||||
const codeAgent = new Workflow<Context, string, string>();
|
||||
codeAgent.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [CodeEvent],
|
||||
},
|
||||
architect,
|
||||
);
|
||||
codeAgent.addStep(
|
||||
{
|
||||
inputs: [ReviewEvent],
|
||||
outputs: [CodeEvent],
|
||||
},
|
||||
coder,
|
||||
);
|
||||
codeAgent.addStep(
|
||||
{
|
||||
inputs: [CodeEvent],
|
||||
outputs: [ReviewEvent, StopEvent],
|
||||
},
|
||||
reviewer,
|
||||
);
|
||||
|
||||
// Usage
|
||||
async function main() {
|
||||
const run = codeAgent.run(specification);
|
||||
for await (const event of codeAgent.streamEvents()) {
|
||||
const msg = (event as MessageEvent).data.msg;
|
||||
console.log(`${msg}\n`);
|
||||
const run = codeAgent.run(specification).with({
|
||||
specification,
|
||||
numberReviews: 0,
|
||||
});
|
||||
for await (const event of run) {
|
||||
if (event instanceof MessageEvent) {
|
||||
const msg = (event as MessageEvent).data.msg;
|
||||
console.log(`${msg}\n`);
|
||||
} else if (event instanceof StopEvent) {
|
||||
const result = (event as StopEvent<string>).data;
|
||||
console.log("Final code:\n", result);
|
||||
}
|
||||
}
|
||||
const result = await run;
|
||||
console.log("Final code:\n", result.data.result);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import {
|
||||
Context,
|
||||
HandlerContext,
|
||||
StartEvent,
|
||||
StopEvent,
|
||||
Workflow,
|
||||
WorkflowEvent,
|
||||
} from "@llamaindex/core/workflow";
|
||||
} from "@llamaindex/workflow";
|
||||
import { OpenAI } from "llamaindex";
|
||||
|
||||
// Create LLM instance
|
||||
@@ -12,59 +12,77 @@ const llm = new OpenAI();
|
||||
|
||||
// Create custom event types
|
||||
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
|
||||
|
||||
export class CritiqueEvent extends WorkflowEvent<{ critique: string }> {}
|
||||
|
||||
export class AnalysisEvent extends WorkflowEvent<{ analysis: string }> {}
|
||||
|
||||
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 });
|
||||
};
|
||||
|
||||
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 CritiqueEvent({ critique: response.text });
|
||||
};
|
||||
|
||||
const analyzeJoke = async (_context: Context, ev: JokeEvent) => {
|
||||
const analyzeJoke = async (_: unknown, ev: JokeEvent) => {
|
||||
const prompt = `Give a thorough analysis of the following joke: ${ev.data.joke}`;
|
||||
const response = await llm.complete({ prompt });
|
||||
return new AnalysisEvent({ analysis: response.text });
|
||||
};
|
||||
|
||||
const reportJoke = async (
|
||||
context: Context,
|
||||
ev: AnalysisEvent | CritiqueEvent,
|
||||
context: HandlerContext,
|
||||
ev1: AnalysisEvent,
|
||||
ev2: CritiqueEvent,
|
||||
) => {
|
||||
const events = context.collectEvents(ev, [AnalysisEvent, CritiqueEvent]);
|
||||
if (!events) {
|
||||
return;
|
||||
}
|
||||
const subPrompts = events.map((event) => {
|
||||
if (event instanceof AnalysisEvent) {
|
||||
return `Analysis: ${event.data.analysis}`;
|
||||
} else if (event instanceof CritiqueEvent) {
|
||||
return `Critique: ${event.data.critique}`;
|
||||
}
|
||||
return "";
|
||||
});
|
||||
const subPrompts = [ev1.data.analysis, ev2.data.critique];
|
||||
|
||||
const prompt = `Based on the following information about a joke:\n${subPrompts.join("\n")}\nProvide a comprehensive report on the joke's quality and impact.`;
|
||||
const prompt = `Based on the following information about a joke:\n${subPrompts.join(
|
||||
"\n",
|
||||
)}\nProvide a comprehensive report on the joke's quality and impact.`;
|
||||
const response = await llm.complete({ prompt });
|
||||
return new StopEvent({ result: response.text });
|
||||
return new StopEvent(response.text);
|
||||
};
|
||||
|
||||
const jokeFlow = new Workflow();
|
||||
jokeFlow.addStep(StartEvent, generateJoke);
|
||||
jokeFlow.addStep(JokeEvent, critiqueJoke);
|
||||
jokeFlow.addStep(JokeEvent, analyzeJoke);
|
||||
jokeFlow.addStep([AnalysisEvent, CritiqueEvent], reportJoke);
|
||||
const jokeFlow = new Workflow<unknown, string, string>();
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [JokeEvent],
|
||||
},
|
||||
generateJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [JokeEvent],
|
||||
outputs: [CritiqueEvent],
|
||||
},
|
||||
critiqueJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [JokeEvent],
|
||||
outputs: [AnalysisEvent],
|
||||
},
|
||||
analyzeJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [AnalysisEvent, CritiqueEvent],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
reportJoke,
|
||||
);
|
||||
|
||||
// Usage
|
||||
async function main() {
|
||||
const result = await jokeFlow.run("pirates");
|
||||
console.log(result.data.result);
|
||||
console.log(result.data);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
+21
-10
@@ -1,10 +1,9 @@
|
||||
import {
|
||||
Context,
|
||||
StartEvent,
|
||||
StopEvent,
|
||||
Workflow,
|
||||
WorkflowEvent,
|
||||
} from "@llamaindex/core/workflow";
|
||||
} from "@llamaindex/workflow";
|
||||
import { OpenAI } from "llamaindex";
|
||||
|
||||
// Create LLM instance
|
||||
@@ -13,26 +12,38 @@ const llm = new OpenAI();
|
||||
// Create a custom event type
|
||||
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
|
||||
|
||||
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 });
|
||||
};
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
const jokeFlow = new Workflow({ verbose: true });
|
||||
jokeFlow.addStep(StartEvent, generateJoke);
|
||||
jokeFlow.addStep(JokeEvent, critiqueJoke);
|
||||
const jokeFlow = new Workflow<unknown, string, string>();
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [JokeEvent],
|
||||
},
|
||||
generateJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [JokeEvent],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
critiqueJoke,
|
||||
);
|
||||
|
||||
// Usage
|
||||
async function main() {
|
||||
const result = await jokeFlow.run("pirates");
|
||||
console.log(result.data.result);
|
||||
console.log(result.data);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import {
|
||||
Context,
|
||||
HandlerContext,
|
||||
StartEvent,
|
||||
StopEvent,
|
||||
Workflow,
|
||||
WorkflowEvent,
|
||||
} from "@llamaindex/core/workflow";
|
||||
} from "@llamaindex/workflow";
|
||||
import { OpenAI } from "llamaindex";
|
||||
|
||||
// Create LLM instance
|
||||
@@ -12,38 +12,55 @@ const llm = new OpenAI();
|
||||
|
||||
// Create custom event types
|
||||
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
|
||||
|
||||
export class MessageEvent extends WorkflowEvent<{ msg: string }> {}
|
||||
|
||||
const generateJoke = async (context: Context, ev: StartEvent) => {
|
||||
context.writeEventToStream(
|
||||
new MessageEvent({ msg: `Generating a joke about: ${ev.data.input}` }),
|
||||
const generateJoke = async (context: HandlerContext, ev: StartEvent) => {
|
||||
context.sendEvent(
|
||||
new MessageEvent({ msg: `Generating a joke about: ${ev.data}` }),
|
||||
);
|
||||
const prompt = `Write your best joke about ${ev.data.input}.`;
|
||||
const prompt = `Write your best joke about ${ev.data}.`;
|
||||
const response = await llm.complete({ prompt });
|
||||
return new JokeEvent({ joke: response.text });
|
||||
};
|
||||
|
||||
const critiqueJoke = async (context: Context, ev: JokeEvent) => {
|
||||
context.writeEventToStream(
|
||||
const critiqueJoke = async (context: HandlerContext, ev: JokeEvent) => {
|
||||
context.sendEvent(
|
||||
new MessageEvent({ msg: `Write a critique of this joke: ${ev.data.joke}` }),
|
||||
);
|
||||
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);
|
||||
};
|
||||
|
||||
const jokeFlow = new Workflow();
|
||||
jokeFlow.addStep(StartEvent, generateJoke);
|
||||
jokeFlow.addStep(JokeEvent, critiqueJoke);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [JokeEvent],
|
||||
},
|
||||
generateJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [JokeEvent],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
critiqueJoke,
|
||||
);
|
||||
|
||||
// Usage
|
||||
async function main() {
|
||||
const run = jokeFlow.run("pirates");
|
||||
for await (const event of jokeFlow.streamEvents()) {
|
||||
console.log((event as MessageEvent).data.msg);
|
||||
for await (const event of run) {
|
||||
if (event instanceof MessageEvent) {
|
||||
console.log("Message:");
|
||||
console.log((event as MessageEvent).data.msg);
|
||||
} else if (event instanceof StopEvent) {
|
||||
console.log("Result:");
|
||||
console.log((event as StopEvent<string>).data);
|
||||
}
|
||||
}
|
||||
const result = await run;
|
||||
console.log(result.data.result);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
import {
|
||||
Context,
|
||||
StartEvent,
|
||||
StopEvent,
|
||||
Workflow,
|
||||
} from "@llamaindex/core/workflow";
|
||||
import { StartEvent, StopEvent, Workflow } from "@llamaindex/workflow";
|
||||
|
||||
const longRunning = async (_context: Context, ev: StartEvent) => {
|
||||
const longRunning = async (_: unknown, ev: StartEvent<string>) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait for 2 seconds
|
||||
return new StopEvent({ result: "We waited 2 seconds" });
|
||||
return new StopEvent("We waited 2 seconds");
|
||||
};
|
||||
|
||||
async function timeout() {
|
||||
const workflow = new Workflow({ verbose: true, timeout: 1 });
|
||||
workflow.addStep(StartEvent, longRunning);
|
||||
// This will timeout
|
||||
const workflow = new Workflow<unknown, string, string>({
|
||||
timeout: 1,
|
||||
});
|
||||
workflow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
longRunning,
|
||||
);
|
||||
try {
|
||||
await workflow.run("Let's start");
|
||||
} catch (error) {
|
||||
@@ -23,14 +25,23 @@ async function timeout() {
|
||||
|
||||
async function notimeout() {
|
||||
// Increase timeout to 3 seconds - no timeout
|
||||
const workflow = new Workflow({ verbose: true, timeout: 3 });
|
||||
workflow.addStep(StartEvent, longRunning);
|
||||
const workflow = new Workflow<unknown, string, string>({
|
||||
timeout: 3,
|
||||
});
|
||||
workflow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
longRunning,
|
||||
);
|
||||
const result = await workflow.run("Let's start");
|
||||
console.log(result.data.result);
|
||||
console.log(result.data);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await timeout();
|
||||
console.log("---");
|
||||
await notimeout();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import {
|
||||
Context,
|
||||
StartEvent,
|
||||
StopEvent,
|
||||
Workflow,
|
||||
WorkflowEvent,
|
||||
} from "@llamaindex/core/workflow";
|
||||
} from "@llamaindex/workflow";
|
||||
import { OpenAI } from "llamaindex";
|
||||
|
||||
// Create LLM instance
|
||||
@@ -13,40 +12,66 @@ const llm = new OpenAI();
|
||||
// Create a custom event type
|
||||
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
|
||||
|
||||
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 });
|
||||
};
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
async function validateFails() {
|
||||
try {
|
||||
const jokeFlow = new Workflow({ verbose: true, validate: true });
|
||||
jokeFlow.addStep(StartEvent, generateJoke, { outputs: StopEvent });
|
||||
jokeFlow.addStep(JokeEvent, critiqueJoke, { outputs: StopEvent });
|
||||
await jokeFlow.run("pirates");
|
||||
const jokeFlow = new Workflow();
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
// @ts-expect-error outputs should be JokeEvent
|
||||
generateJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [JokeEvent],
|
||||
outputs: [StopEvent],
|
||||
},
|
||||
critiqueJoke,
|
||||
);
|
||||
await jokeFlow.run("pirates").strict();
|
||||
} catch (e) {
|
||||
console.error("Validation failed:", e);
|
||||
}
|
||||
}
|
||||
|
||||
async function validate() {
|
||||
const jokeFlow = new Workflow({ verbose: true, validate: true });
|
||||
jokeFlow.addStep(StartEvent, generateJoke, { outputs: JokeEvent });
|
||||
jokeFlow.addStep(JokeEvent, critiqueJoke, { outputs: StopEvent });
|
||||
const result = await jokeFlow.run("pirates");
|
||||
console.log(result.data.result);
|
||||
const jokeFlow = new Workflow();
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [JokeEvent],
|
||||
},
|
||||
generateJoke,
|
||||
);
|
||||
jokeFlow.addStep(
|
||||
{
|
||||
inputs: [JokeEvent],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
critiqueJoke,
|
||||
);
|
||||
const result = await jokeFlow.run("pirates").strict();
|
||||
console.log(result.data);
|
||||
}
|
||||
|
||||
// Usage
|
||||
async function main() {
|
||||
await validateFails();
|
||||
console.log("---");
|
||||
await validate();
|
||||
}
|
||||
|
||||
|
||||
+8
-14
@@ -2,8 +2,8 @@
|
||||
"name": "@llamaindex/monorepo",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "turbo run build --filter=\"./packages/*\"",
|
||||
"dev": "turbo run dev --filter=\"./packages/*\"",
|
||||
"build": "turbo run build --filter=\"./packages/*\" --filter=\"./packages/providers/*\"",
|
||||
"dev": "turbo run dev --filter=\"./packages/*\" --filter=\"./packages/providers/*\"",
|
||||
"format": "prettier --ignore-unknown --cache --check .",
|
||||
"format:write": "prettier --ignore-unknown --write .",
|
||||
"lint": "turbo run lint",
|
||||
@@ -19,28 +19,22 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@changesets/cli": "^2.27.5",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-config-next": "^15.0.2",
|
||||
"eslint": "9.15.0",
|
||||
"eslint-config-next": "^15.0.3",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-config-turbo": "^2.2.3",
|
||||
"eslint-config-turbo": "^2.3.0",
|
||||
"eslint-plugin-react": "7.37.2",
|
||||
"globals": "^15.12.0",
|
||||
"husky": "^9.1.6",
|
||||
"husky": "^9.1.7",
|
||||
"lint-staged": "^15.2.10",
|
||||
"madge": "^8.0.0",
|
||||
"prettier": "^3.3.3",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"turbo": "^2.2.3",
|
||||
"turbo": "^2.3.0",
|
||||
"typescript": "^5.6.3",
|
||||
"typescript-eslint": "^8.13.0"
|
||||
"typescript-eslint": "^8.15.0"
|
||||
},
|
||||
"packageManager": "pnpm@9.12.3",
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"trim": "1.0.1",
|
||||
"protobufjs": "7.2.6"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"(!apps/docs/i18n/**/docusaurus-plugin-content-docs/current/api/*).{js,jsx,ts,tsx,md}": "prettier --write"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,143 @@
|
||||
# @llamaindex/autotool
|
||||
|
||||
## 5.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3d1808b: chore: bump version
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 5.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 5.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 5.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 5.0.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 5.0.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 5.0.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 5.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 5.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 5.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 5.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 5.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 5.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 5.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 5.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 5.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 5.0.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
|
||||
## 5.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
|
||||
## 5.0.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
|
||||
## 5.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
|
||||
## 5.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,5 +1,161 @@
|
||||
# @llamaindex/autotool-01-node-example
|
||||
|
||||
## 0.0.69
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/autotool@5.0.26
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.68
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/autotool@5.0.25
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.67
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
- @llamaindex/autotool@5.0.24
|
||||
|
||||
## 0.0.66
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
- @llamaindex/autotool@5.0.23
|
||||
|
||||
## 0.0.65
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
- @llamaindex/autotool@5.0.22
|
||||
|
||||
## 0.0.64
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
- @llamaindex/autotool@5.0.21
|
||||
|
||||
## 0.0.63
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
- @llamaindex/autotool@5.0.20
|
||||
|
||||
## 0.0.62
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/autotool@5.0.19
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.61
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
- @llamaindex/autotool@5.0.18
|
||||
|
||||
## 0.0.60
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
- @llamaindex/autotool@5.0.17
|
||||
|
||||
## 0.0.59
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
- @llamaindex/autotool@5.0.16
|
||||
|
||||
## 0.0.58
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
- @llamaindex/autotool@5.0.15
|
||||
|
||||
## 0.0.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
- @llamaindex/autotool@5.0.14
|
||||
|
||||
## 0.0.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/autotool@5.0.13
|
||||
|
||||
## 0.0.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
- @llamaindex/autotool@5.0.12
|
||||
|
||||
## 0.0.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
- @llamaindex/autotool@5.0.11
|
||||
|
||||
## 0.0.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
- @llamaindex/autotool@5.0.10
|
||||
|
||||
## 0.0.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
- @llamaindex/autotool@5.0.9
|
||||
|
||||
## 0.0.51
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
- @llamaindex/autotool@5.0.8
|
||||
|
||||
## 0.0.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
- @llamaindex/autotool@5.0.7
|
||||
|
||||
## 0.0.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"dependencies": {
|
||||
"@llamaindex/autotool": "workspace:*",
|
||||
"llamaindex": "workspace:*",
|
||||
"openai": "^4.57.0"
|
||||
"openai": "^4.73.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tsx": "^4.19.0"
|
||||
@@ -13,5 +13,5 @@
|
||||
"scripts": {
|
||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||
},
|
||||
"version": "0.0.49"
|
||||
"version": "0.0.69"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,161 @@
|
||||
# @llamaindex/autotool-02-next-example
|
||||
|
||||
## 0.1.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/autotool@5.0.26
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.1.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/autotool@5.0.25
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.1.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
- @llamaindex/autotool@5.0.24
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
- @llamaindex/autotool@5.0.23
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
- @llamaindex/autotool@5.0.22
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
- @llamaindex/autotool@5.0.21
|
||||
|
||||
## 0.1.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
- @llamaindex/autotool@5.0.20
|
||||
|
||||
## 0.1.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/autotool@5.0.19
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.1.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
- @llamaindex/autotool@5.0.18
|
||||
|
||||
## 0.1.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
- @llamaindex/autotool@5.0.17
|
||||
|
||||
## 0.1.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
- @llamaindex/autotool@5.0.16
|
||||
|
||||
## 0.1.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
- @llamaindex/autotool@5.0.15
|
||||
|
||||
## 0.1.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
- @llamaindex/autotool@5.0.14
|
||||
|
||||
## 0.1.100
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/autotool@5.0.13
|
||||
|
||||
## 0.1.99
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
- @llamaindex/autotool@5.0.12
|
||||
|
||||
## 0.1.98
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
- @llamaindex/autotool@5.0.11
|
||||
|
||||
## 0.1.97
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f066e50]
|
||||
- llamaindex@0.8.10
|
||||
- @llamaindex/autotool@5.0.10
|
||||
|
||||
## 0.1.96
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- Updated dependencies [4d4cd8a]
|
||||
- llamaindex@0.8.9
|
||||
- @llamaindex/autotool@5.0.9
|
||||
|
||||
## 0.1.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- llamaindex@0.8.8
|
||||
- @llamaindex/autotool@5.0.8
|
||||
|
||||
## 0.1.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.7
|
||||
- @llamaindex/autotool@5.0.7
|
||||
|
||||
## 0.1.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool-02-next-example",
|
||||
"private": true,
|
||||
"version": "0.1.93",
|
||||
"version": "0.1.113",
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
@@ -10,17 +10,17 @@
|
||||
"dependencies": {
|
||||
"@llamaindex/autotool": "workspace:*",
|
||||
"@radix-ui/react-slot": "^1.1.0",
|
||||
"ai": "^3.3.21",
|
||||
"ai": "^4.0.0",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"llamaindex": "workspace:*",
|
||||
"lucide-react": "^0.436.0",
|
||||
"next": "15.0.2",
|
||||
"lucide-react": "^0.460.0",
|
||||
"next": "15.0.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-markdown": "^9.0.1",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"sonner": "^1.5.0",
|
||||
"sonner": "^1.7.0",
|
||||
"tailwind-merge": "^2.5.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -30,8 +30,8 @@
|
||||
"@types/react-syntax-highlighter": "^15.5.11",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"cross-env": "^7.0.3",
|
||||
"postcss": "^8.4.41",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool",
|
||||
"type": "module",
|
||||
"version": "5.0.6",
|
||||
"version": "5.0.26",
|
||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -45,10 +45,10 @@
|
||||
"dev": "bunchee --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@swc/core": "^1.7.22",
|
||||
"jotai": "2.8.4",
|
||||
"@swc/core": "^1.9.2",
|
||||
"jotai": "2.10.2",
|
||||
"typedoc": "^0.26.11",
|
||||
"unplugin": "^1.12.2"
|
||||
"unplugin": "^1.16.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
@@ -72,11 +72,11 @@
|
||||
"@types/node": "^22.9.0",
|
||||
"bunchee": "5.6.1",
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"rollup": "^4.24.4",
|
||||
"next": "15.0.3",
|
||||
"rollup": "^4.27.3",
|
||||
"tsx": "^4.19.0",
|
||||
"typescript": "^5.6.3",
|
||||
"vitest": "^2.1.4",
|
||||
"vitest": "^2.1.5",
|
||||
"webpack": "^5.94.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ export type InfoString = {
|
||||
parameterMapping: Record<string, number>;
|
||||
};
|
||||
|
||||
export const store = createStore();
|
||||
export const store: ReturnType<typeof createStore> = createStore();
|
||||
export const toolMetadataAtom = atom<[ToolMetadata, Info][]>([]);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export const toolsAtom = atom<Record<string, (...args: any[]) => any>>({});
|
||||
|
||||
@@ -1,5 +1,114 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
## 2.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
|
||||
## 2.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/env@0.1.24
|
||||
|
||||
## 2.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d2b2722]
|
||||
- @llamaindex/env@0.1.23
|
||||
- @llamaindex/core@0.4.15
|
||||
|
||||
## 2.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [969365c]
|
||||
- @llamaindex/env@0.1.22
|
||||
- @llamaindex/core@0.4.14
|
||||
|
||||
## 2.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/core@0.4.13
|
||||
- @llamaindex/env@0.1.21
|
||||
|
||||
## 2.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ef4f63d]
|
||||
- @llamaindex/core@0.4.12
|
||||
|
||||
## 2.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6d22fa2]
|
||||
- @llamaindex/core@0.4.11
|
||||
|
||||
## 2.0.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
|
||||
## 2.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
|
||||
## 2.0.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
|
||||
## 2.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d89ebe0]
|
||||
- Updated dependencies [fd8c882]
|
||||
- @llamaindex/core@0.4.7
|
||||
|
||||
## 2.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- @llamaindex/env@0.1.20
|
||||
- @llamaindex/core@0.4.6
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- @llamaindex/core@0.4.5
|
||||
- @llamaindex/env@0.1.19
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a8d3fa6]
|
||||
- @llamaindex/env@0.1.18
|
||||
- @llamaindex/core@0.4.4
|
||||
|
||||
## 2.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "2.0.3",
|
||||
"version": "2.0.17",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@@ -50,8 +50,8 @@
|
||||
"directory": "packages/cloud"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hey-api/client-fetch": "^0.4.2",
|
||||
"@hey-api/openapi-ts": "^0.54.3",
|
||||
"@hey-api/client-fetch": "^0.4.4",
|
||||
"@hey-api/openapi-ts": "^0.56.0",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"bunchee": "5.6.1"
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"moduleResolution": "Bundler",
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"lib": ["DOM", "ESNext"],
|
||||
"types": []
|
||||
},
|
||||
"include": ["./src"],
|
||||
|
||||
@@ -1,5 +1,114 @@
|
||||
# @llamaindex/community
|
||||
|
||||
## 0.0.75
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
|
||||
## 0.0.74
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/env@0.1.24
|
||||
|
||||
## 0.0.73
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d2b2722]
|
||||
- @llamaindex/env@0.1.23
|
||||
- @llamaindex/core@0.4.15
|
||||
|
||||
## 0.0.72
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [969365c]
|
||||
- @llamaindex/env@0.1.22
|
||||
- @llamaindex/core@0.4.14
|
||||
|
||||
## 0.0.71
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/core@0.4.13
|
||||
- @llamaindex/env@0.1.21
|
||||
|
||||
## 0.0.70
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ef4f63d]
|
||||
- @llamaindex/core@0.4.12
|
||||
|
||||
## 0.0.69
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6d22fa2]
|
||||
- @llamaindex/core@0.4.11
|
||||
|
||||
## 0.0.68
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
|
||||
## 0.0.67
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
|
||||
## 0.0.66
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
|
||||
## 0.0.65
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d89ebe0]
|
||||
- Updated dependencies [fd8c882]
|
||||
- @llamaindex/core@0.4.7
|
||||
|
||||
## 0.0.64
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- @llamaindex/env@0.1.20
|
||||
- @llamaindex/core@0.4.6
|
||||
|
||||
## 0.0.63
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ad85bd0]
|
||||
- @llamaindex/core@0.4.5
|
||||
- @llamaindex/env@0.1.19
|
||||
|
||||
## 0.0.62
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a8d3fa6]
|
||||
- @llamaindex/env@0.1.18
|
||||
- @llamaindex/core@0.4.4
|
||||
|
||||
## 0.0.61
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/community",
|
||||
"description": "Community package for LlamaIndexTS",
|
||||
"version": "0.0.61",
|
||||
"version": "0.0.75",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
@@ -46,8 +46,8 @@
|
||||
"bunchee": "5.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-bedrock-agent-runtime": "^3.642.0",
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.642.0",
|
||||
"@aws-sdk/client-bedrock-agent-runtime": "^3.693.0",
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.693.0",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,102 @@
|
||||
# @llamaindex/core
|
||||
|
||||
## 0.4.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3d1808b: chore: bump version
|
||||
|
||||
## 0.4.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/env@0.1.24
|
||||
|
||||
## 0.4.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d2b2722]
|
||||
- @llamaindex/env@0.1.23
|
||||
|
||||
## 0.4.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [969365c]
|
||||
- @llamaindex/env@0.1.22
|
||||
|
||||
## 0.4.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/env@0.1.21
|
||||
|
||||
## 0.4.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ef4f63d: refactor: move mockLLM to core
|
||||
|
||||
## 0.4.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6d22fa2: Get PromptTemplate template variables at run-time
|
||||
|
||||
## 0.4.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a7b0ac3: fix: update tool call llm type
|
||||
- c69605f: feat: add async support to BaseChatStore and BaseChatStoreMemory
|
||||
|
||||
## 0.4.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 7ae6eaa: feat: allow pass `additionalChatOptions` to agent
|
||||
|
||||
## 0.4.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f865c98: feat: async get message on chat store
|
||||
|
||||
## 0.4.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d89ebe0: feat: better support for zod schema
|
||||
- fd8c882: chore: add warning on legacy workflow API
|
||||
|
||||
## 0.4.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4fc001c]
|
||||
- @llamaindex/env@0.1.20
|
||||
|
||||
## 0.4.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ad85bd0: - fix agent chat message not saved into the task context when streaming
|
||||
- fix async local storage might use `node:async_hook` in edge-light/workerd condition
|
||||
- Updated dependencies [ad85bd0]
|
||||
- @llamaindex/env@0.1.19
|
||||
|
||||
## 0.4.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a8d3fa6]
|
||||
- @llamaindex/env@0.1.18
|
||||
|
||||
## 0.4.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/core",
|
||||
"type": "module",
|
||||
"version": "0.4.3",
|
||||
"version": "0.4.17",
|
||||
"description": "LlamaIndex Core Module",
|
||||
"exports": {
|
||||
"./agent": {
|
||||
@@ -389,10 +389,10 @@
|
||||
"url": "https://github.com/run-llama/LlamaIndexTS.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@edge-runtime/vm": "^4.0.3",
|
||||
"@edge-runtime/vm": "^4.0.4",
|
||||
"ajv": "^8.17.1",
|
||||
"bunchee": "5.6.1",
|
||||
"happy-dom": "^15.10.0",
|
||||
"happy-dom": "^15.11.6",
|
||||
"natural": "^8.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -3,7 +3,7 @@ import {
|
||||
BaseChatEngine,
|
||||
type NonStreamingChatEngineParams,
|
||||
type StreamingChatEngineParams,
|
||||
} from "../chat-engine/base";
|
||||
} from "../chat-engine";
|
||||
import { wrapEventCaller } from "../decorator";
|
||||
import { Settings } from "../global";
|
||||
import type {
|
||||
@@ -106,11 +106,17 @@ export type AgentRunnerParams<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
llm: AI;
|
||||
chatHistory: ChatMessage<AdditionalMessageOptions>[];
|
||||
systemPrompt: MessageContent | null;
|
||||
runner: AgentWorker<AI, Store, AdditionalMessageOptions>;
|
||||
runner: AgentWorker<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
tools:
|
||||
| BaseToolWithCall[]
|
||||
| ((query: MessageContent) => Promise<BaseToolWithCall[]>);
|
||||
@@ -125,6 +131,7 @@ export type AgentParamsBase<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> =
|
||||
| {
|
||||
llm?: AI;
|
||||
@@ -132,6 +139,7 @@ export type AgentParamsBase<
|
||||
systemPrompt?: MessageContent;
|
||||
verbose?: boolean;
|
||||
tools: BaseToolWithCall[];
|
||||
additionalChatOptions?: AdditionalChatOptions;
|
||||
}
|
||||
| {
|
||||
llm?: AI;
|
||||
@@ -139,6 +147,7 @@ export type AgentParamsBase<
|
||||
systemPrompt?: MessageContent;
|
||||
verbose?: boolean;
|
||||
toolRetriever: ObjectRetriever<BaseToolWithCall>;
|
||||
additionalChatOptions?: AdditionalChatOptions;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -153,37 +162,75 @@ export abstract class AgentWorker<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> {
|
||||
#taskSet = new Set<TaskStep<AI, Store, AdditionalMessageOptions>>();
|
||||
abstract taskHandler: TaskHandler<AI, Store, AdditionalMessageOptions>;
|
||||
#taskSet = new Set<
|
||||
TaskStep<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
>();
|
||||
abstract taskHandler: TaskHandler<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
|
||||
public createTask(
|
||||
query: MessageContent,
|
||||
context: AgentTaskContext<AI, Store, AdditionalMessageOptions>,
|
||||
): ReadableStream<TaskStepOutput<AI, Store, AdditionalMessageOptions>> {
|
||||
context: AgentTaskContext<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): ReadableStream<
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
> {
|
||||
context.store.messages.push({
|
||||
role: "user",
|
||||
content: query,
|
||||
});
|
||||
const taskOutputStream = createTaskOutputStream(this.taskHandler, context);
|
||||
return new ReadableStream<
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions>
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
>({
|
||||
start: async (controller) => {
|
||||
for await (const stepOutput of taskOutputStream) {
|
||||
this.#taskSet.add(stepOutput.taskStep);
|
||||
controller.enqueue(stepOutput);
|
||||
if (stepOutput.isLast) {
|
||||
let currentStep: TaskStep<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
> | null = stepOutput.taskStep;
|
||||
while (currentStep) {
|
||||
this.#taskSet.delete(currentStep);
|
||||
currentStep = currentStep.prevStep;
|
||||
}
|
||||
const { output, taskStep } = stepOutput;
|
||||
if (output instanceof ReadableStream) {
|
||||
const [pipStream, finalStream] = output.tee();
|
||||
stepOutput.output = finalStream;
|
||||
const reader = pipStream.getReader();
|
||||
const { value } = await reader.read();
|
||||
reader.releaseLock();
|
||||
let content: string = value!.delta;
|
||||
for await (const chunk of pipStream) {
|
||||
content += chunk.delta;
|
||||
}
|
||||
taskStep.context.store.messages = [
|
||||
...taskStep.context.store.messages,
|
||||
{
|
||||
role: "assistant",
|
||||
content,
|
||||
options: value!.options,
|
||||
},
|
||||
];
|
||||
}
|
||||
controller.enqueue(stepOutput);
|
||||
controller.close();
|
||||
} else {
|
||||
controller.enqueue(stepOutput);
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -205,6 +252,7 @@ export abstract class AgentRunner<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseChatEngine {
|
||||
readonly #llm: AI;
|
||||
readonly #tools:
|
||||
@@ -212,7 +260,12 @@ export abstract class AgentRunner<
|
||||
| ((query: MessageContent) => Promise<BaseToolWithCall[]>);
|
||||
readonly #systemPrompt: MessageContent | null = null;
|
||||
#chatHistory: ChatMessage<AdditionalMessageOptions>[];
|
||||
readonly #runner: AgentWorker<AI, Store, AdditionalMessageOptions>;
|
||||
readonly #runner: AgentWorker<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
readonly #verbose: boolean;
|
||||
|
||||
// create extra store
|
||||
@@ -223,7 +276,7 @@ export abstract class AgentRunner<
|
||||
}
|
||||
|
||||
static defaultTaskHandler: TaskHandler<LLM> = async (step, enqueueOutput) => {
|
||||
const { llm, getTools, stream } = step.context;
|
||||
const { llm, getTools, stream, additionalChatOptions } = step.context;
|
||||
const lastMessage = step.context.store.messages.at(-1)!.content;
|
||||
const tools = await getTools(lastMessage);
|
||||
if (!stream) {
|
||||
@@ -231,8 +284,9 @@ export abstract class AgentRunner<
|
||||
stream,
|
||||
tools,
|
||||
messages: [...step.context.store.messages],
|
||||
additionalChatOptions,
|
||||
});
|
||||
await stepTools<LLM>({
|
||||
await stepTools({
|
||||
response,
|
||||
tools,
|
||||
step,
|
||||
@@ -243,6 +297,7 @@ export abstract class AgentRunner<
|
||||
stream,
|
||||
tools,
|
||||
messages: [...step.context.store.messages],
|
||||
additionalChatOptions,
|
||||
});
|
||||
await stepToolsStreaming<LLM>({
|
||||
response,
|
||||
@@ -254,7 +309,12 @@ export abstract class AgentRunner<
|
||||
};
|
||||
|
||||
protected constructor(
|
||||
params: AgentRunnerParams<AI, Store, AdditionalMessageOptions>,
|
||||
params: AgentRunnerParams<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
) {
|
||||
super();
|
||||
const { llm, chatHistory, systemPrompt, runner, tools, verbose } = params;
|
||||
@@ -308,7 +368,10 @@ export abstract class AgentRunner<
|
||||
stream: boolean = false,
|
||||
verbose: boolean | undefined = undefined,
|
||||
chatHistory?: ChatMessage<AdditionalMessageOptions>[],
|
||||
) {
|
||||
additionalChatOptions?: AdditionalChatOptions,
|
||||
): ReadableStream<
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
> {
|
||||
const initialMessages = [...(chatHistory ?? this.#chatHistory)];
|
||||
if (this.#systemPrompt !== null) {
|
||||
const systemPrompt = this.#systemPrompt;
|
||||
@@ -326,6 +389,7 @@ export abstract class AgentRunner<
|
||||
stream,
|
||||
toolCallCount: 0,
|
||||
llm: this.#llm,
|
||||
additionalChatOptions: additionalChatOptions ?? {},
|
||||
getTools: (message) => this.getTools(message),
|
||||
store: {
|
||||
...this.createStore(),
|
||||
@@ -343,13 +407,29 @@ export abstract class AgentRunner<
|
||||
});
|
||||
}
|
||||
|
||||
async chat(params: NonStreamingChatEngineParams): Promise<EngineResponse>;
|
||||
async chat(
|
||||
params: StreamingChatEngineParams,
|
||||
params: NonStreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): Promise<EngineResponse>;
|
||||
async chat(
|
||||
params: StreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): Promise<ReadableStream<EngineResponse>>;
|
||||
@wrapEventCaller
|
||||
async chat(
|
||||
params: NonStreamingChatEngineParams | StreamingChatEngineParams,
|
||||
params:
|
||||
| NonStreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>
|
||||
| StreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): Promise<EngineResponse | ReadableStream<EngineResponse>> {
|
||||
let chatHistory: ChatMessage<AdditionalMessageOptions>[] = [];
|
||||
|
||||
@@ -366,6 +446,7 @@ export abstract class AgentRunner<
|
||||
!!params.stream,
|
||||
false,
|
||||
chatHistory,
|
||||
params.chatOptions,
|
||||
);
|
||||
for await (const stepOutput of task) {
|
||||
// update chat history for each round
|
||||
@@ -373,7 +454,7 @@ export abstract class AgentRunner<
|
||||
if (stepOutput.isLast) {
|
||||
const { output } = stepOutput;
|
||||
if (output instanceof ReadableStream) {
|
||||
return output.pipeThrough<EngineResponse>(
|
||||
return output.pipeThrough(
|
||||
new TransformStream({
|
||||
transform(chunk, controller) {
|
||||
controller.enqueue(EngineResponse.fromChatResponseChunk(chunk));
|
||||
|
||||
@@ -4,24 +4,66 @@ import { ObjectRetriever } from "../objects";
|
||||
import { AgentRunner, AgentWorker, type AgentParamsBase } from "./base.js";
|
||||
import { validateAgentParams } from "./utils.js";
|
||||
|
||||
type LLMParamsBase = AgentParamsBase<LLM>;
|
||||
type LLMParamsBase<
|
||||
AI extends LLM,
|
||||
AdditionalMessageOptions extends object = AI extends LLM<
|
||||
object,
|
||||
infer AdditionalMessageOptions
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = AgentParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions>;
|
||||
|
||||
type LLMParamsWithTools = LLMParamsBase & {
|
||||
type LLMParamsWithTools<
|
||||
AI extends LLM,
|
||||
AdditionalMessageOptions extends object = AI extends LLM<
|
||||
object,
|
||||
infer AdditionalMessageOptions
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = LLMParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions> & {
|
||||
tools: BaseToolWithCall[];
|
||||
};
|
||||
|
||||
type LLMParamsWithToolRetriever = LLMParamsBase & {
|
||||
type LLMParamsWithToolRetriever<
|
||||
AI extends LLM,
|
||||
AdditionalMessageOptions extends object = AI extends LLM<
|
||||
object,
|
||||
infer AdditionalMessageOptions
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = LLMParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions> & {
|
||||
toolRetriever: ObjectRetriever<BaseToolWithCall>;
|
||||
};
|
||||
|
||||
export type LLMAgentParams = LLMParamsWithTools | LLMParamsWithToolRetriever;
|
||||
export type LLMAgentParams<
|
||||
AI extends LLM,
|
||||
AdditionalMessageOptions extends object = AI extends LLM<
|
||||
object,
|
||||
infer AdditionalMessageOptions
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> =
|
||||
| LLMParamsWithTools<AI, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
| LLMParamsWithToolRetriever<
|
||||
AI,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
|
||||
export class LLMAgentWorker extends AgentWorker<LLM> {
|
||||
taskHandler = AgentRunner.defaultTaskHandler;
|
||||
}
|
||||
|
||||
export class LLMAgent extends AgentRunner<LLM> {
|
||||
constructor(params: LLMAgentParams) {
|
||||
constructor(params: LLMAgentParams<LLM>) {
|
||||
validateAgentParams(params);
|
||||
const llm = params.llm ?? (Settings.llm ? (Settings.llm as LLM) : null);
|
||||
if (!llm)
|
||||
|
||||
@@ -19,6 +19,7 @@ export type AgentTaskContext<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
readonly stream: boolean;
|
||||
readonly toolCallCount: number;
|
||||
@@ -26,6 +27,7 @@ export type AgentTaskContext<
|
||||
readonly getTools: (
|
||||
input: MessageContent,
|
||||
) => BaseToolWithCall[] | Promise<BaseToolWithCall[]>;
|
||||
readonly additionalChatOptions: Partial<AdditionalChatOptions>;
|
||||
shouldContinue: (
|
||||
taskStep: Readonly<TaskStep<Model, Store, AdditionalMessageOptions>>,
|
||||
) => boolean;
|
||||
@@ -45,13 +47,26 @@ export type TaskStep<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
id: UUID;
|
||||
context: AgentTaskContext<Model, Store, AdditionalMessageOptions>;
|
||||
context: AgentTaskContext<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
|
||||
// linked list
|
||||
prevStep: TaskStep<Model, Store, AdditionalMessageOptions> | null;
|
||||
nextSteps: Set<TaskStep<Model, Store, AdditionalMessageOptions>>;
|
||||
prevStep: TaskStep<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
> | null;
|
||||
nextSteps: Set<
|
||||
TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
>;
|
||||
};
|
||||
|
||||
export type TaskStepOutput<
|
||||
@@ -63,8 +78,14 @@ export type TaskStepOutput<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
taskStep: TaskStep<Model, Store, AdditionalMessageOptions>;
|
||||
taskStep: TaskStep<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
// output shows the response to the user
|
||||
output:
|
||||
| ChatResponse<AdditionalMessageOptions>
|
||||
@@ -81,10 +102,16 @@ export type TaskHandler<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = (
|
||||
step: TaskStep<Model, Store, AdditionalMessageOptions>,
|
||||
step: TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>,
|
||||
enqueueOutput: (
|
||||
taskOutput: TaskStepOutput<Model, Store, AdditionalMessageOptions>,
|
||||
taskOutput: TaskStepOutput<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
) => void,
|
||||
) => Promise<void>;
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ export async function stepToolsStreaming<Model extends LLM>({
|
||||
for await (const chunk of pipStream) {
|
||||
if (chunk.options && "toolCall" in chunk.options) {
|
||||
const toolCall = chunk.options.toolCall;
|
||||
toolCall.forEach((toolCall) => {
|
||||
toolCall.forEach((toolCall: ToolCall | PartialToolCall) => {
|
||||
toolCalls.set(toolCall.id, toolCall);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -16,14 +16,18 @@ export interface BaseChatEngineParams<
|
||||
|
||||
export interface StreamingChatEngineParams<
|
||||
AdditionalMessageOptions extends object = object,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseChatEngineParams<AdditionalMessageOptions> {
|
||||
stream: true;
|
||||
chatOptions?: AdditionalChatOptions;
|
||||
}
|
||||
|
||||
export interface NonStreamingChatEngineParams<
|
||||
AdditionalMessageOptions extends object = object,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseChatEngineParams<AdditionalMessageOptions> {
|
||||
stream?: false;
|
||||
chatOptions?: AdditionalChatOptions;
|
||||
}
|
||||
|
||||
export abstract class BaseChatEngine {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { type Tokenizers } from "@llamaindex/env";
|
||||
import type { Tokenizers } from "@llamaindex/env/tokenizers";
|
||||
import type { MessageContentDetail } from "../llms";
|
||||
import { BaseNode, MetadataMode, TransformComponent } from "../schema";
|
||||
import { extractSingleText } from "../utils";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Tokenizers, tokenizers } from "@llamaindex/env";
|
||||
import { Tokenizers, tokenizers } from "@llamaindex/env/tokenizers";
|
||||
|
||||
export function truncateMaxTokens(
|
||||
tokenizer: Tokenizers,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { getEnv, type Tokenizer } from "@llamaindex/env";
|
||||
import { getEnv } from "@llamaindex/env";
|
||||
import type { Tokenizer } from "@llamaindex/env/tokenizers";
|
||||
import type { LLM } from "../llms";
|
||||
import {
|
||||
type CallbackManager,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user