Compare commits

...

10 Commits

Author SHA1 Message Date
github-actions[bot] b2364dc5ba Release 0.8.9 (#1460)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-10 23:32:41 -08:00
Alex Yang 67f4db8501 fix: steaming chat in ollama (#1463) 2024-11-10 23:27:09 -08:00
Alex Yang e4151a8b02 feat: support ollama agent (#1462) 2024-11-10 22:38:40 -08:00
Alex Yang 4d4cd8ac6b feat: support ollama tool call (#1461) 2024-11-10 20:46:46 -08:00
Alex Yang 4fc001c8de chore: bump @huggingface/transformers (#1459) 2024-11-10 20:14:44 -08:00
Alex Yang cf675bdc7a chore: bump version (#1458) 2024-11-10 16:43:45 -08:00
github-actions[bot] 660b831b9e Release 0.8.8 (#1457)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-11-08 23:56:46 -08:00
Alex Yang ad85bd0b46 fix: agent streaming final message & async local storage (#1456) 2024-11-08 22:54:13 -08:00
Alex Yang 18ec1f2f61 chore: separate tokenizers (#1454) 2024-11-08 18:53:05 -08:00
Alex Yang b0fbd8b5c8 docs: update CONTRIBUTING.md (#1455) 2024-11-08 18:38:26 -08:00
144 changed files with 1990 additions and 622 deletions
+34 -62
View File
@@ -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.
+16
View File
@@ -1,5 +1,21 @@
# docs
## 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
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.111",
"version": "0.0.113",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
+26
View File
@@ -1,5 +1,31 @@
# @llamaindex/doc
## 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
+3 -8
View File
@@ -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
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.0.9",
"version": "0.0.11",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
@@ -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
+8
View File
@@ -0,0 +1,8 @@
{
"extends": ["//"],
"tasks": {
"dev": {
"dependsOn": ["^build"]
}
}
}
@@ -1,5 +1,20 @@
# @llamaindex/cloudflare-worker-agent-test
## 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
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.103",
"version": "0.0.105",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,17 @@
# @llamaindex/llama-parse-browser-test
## 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
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.24",
"version": "0.0.26",
"type": "module",
"scripts": {
"dev": "vite",
+15
View File
@@ -1,5 +1,20 @@
# @llamaindex/next-agent-test
## 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
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.103",
"version": "0.1.105",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,20 @@
# test-edge-runtime
## 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
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.102",
"version": "0.1.104",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,20 @@
# @llamaindex/next-node-runtime
## 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
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.84",
"version": "0.0.86",
"private": true,
"scripts": {
"dev": "next dev",
@@ -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,20 @@
# @llamaindex/waku-query-engine-test
## 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
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.103",
"version": "0.0.105",
"type": "module",
"private": true,
"scripts": {
+3
View File
@@ -0,0 +1,3 @@
import { OpenAI } from "./openai.js";
export class Ollama extends OpenAI {}
+11 -1
View File
@@ -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",
+1 -1
View File
@@ -64,7 +64,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
View File
@@ -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);
}
});
});
+35
View File
@@ -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");
}
});
});
+393
View File
@@ -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": ""
}
}
]
}
+37
View File
@@ -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": []
}
+2 -1
View File
@@ -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:*",
-1
View File
@@ -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"],
+10
View File
@@ -1,5 +1,15 @@
# examples
## 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
+5 -5
View File
@@ -1,15 +1,15 @@
{
"name": "@llamaindex/examples",
"private": true,
"version": "0.0.12",
"version": "0.0.13",
"dependencies": {
"@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.5",
"@llamaindex/readers": "^1.0.6",
"@llamaindex/workflow": "^0.0.3",
"@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^3.0.2",
"@vercel/postgres": "^0.10.0",
@@ -18,7 +18,7 @@
"commander": "^12.1.0",
"dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.8.0",
"llamaindex": "^0.8.8",
"mongodb": "^6.7.0",
"pathe": "^1.1.2",
"postgres": "^3.4.4"
-1
View File
@@ -14,7 +14,6 @@ Settings.llm = new Ollama({
Settings.embedModel = new HuggingFaceEmbedding({
modelType: "BAAI/bge-small-en-v1.5",
quantized: false,
});
async function main() {
-6
View File
@@ -35,12 +35,6 @@
"typescript-eslint": "^8.13.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"
}
+15
View File
@@ -1,5 +1,20 @@
# @llamaindex/autotool
## 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
@@ -1,5 +1,22 @@
# @llamaindex/autotool-01-node-example
## 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
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.50"
"version": "0.0.52"
}
@@ -1,5 +1,22 @@
# @llamaindex/autotool-02-next-example
## 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
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.94",
"version": "0.1.96",
"scripts": {
"dev": "next dev",
"build": "next build",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "5.0.7",
"version": "5.0.9",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+16
View File
@@ -1,5 +1,21 @@
# @llamaindex/cloud
## 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
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "2.0.4",
"version": "2.0.6",
"type": "module",
"license": "MIT",
"scripts": {
-1
View File
@@ -8,7 +8,6 @@
"moduleResolution": "Bundler",
"skipLibCheck": true,
"strict": true,
"lib": ["DOM", "ESNext"],
"types": []
},
"include": ["./src"],
+16
View File
@@ -1,5 +1,21 @@
# @llamaindex/community
## 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
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.62",
"version": "0.0.64",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+16
View File
@@ -1,5 +1,21 @@
# @llamaindex/core
## 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
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.4.4",
"version": "0.4.6",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
@@ -392,7 +392,7 @@
"@edge-runtime/vm": "^4.0.3",
"ajv": "^8.17.1",
"bunchee": "5.6.1",
"happy-dom": "^15.10.0",
"happy-dom": "^15.11.0",
"natural": "^8.0.1"
},
"dependencies": {
+32 -5
View File
@@ -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 {
@@ -172,7 +172,6 @@ export abstract class AgentWorker<
start: async (controller) => {
for await (const stepOutput of taskOutputStream) {
this.#taskSet.add(stepOutput.taskStep);
controller.enqueue(stepOutput);
if (stepOutput.isLast) {
let currentStep: TaskStep<
AI,
@@ -183,7 +182,30 @@ export abstract class AgentWorker<
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);
}
}
},
@@ -373,10 +395,15 @@ export abstract class AgentRunner<
if (stepOutput.isLast) {
const { output } = stepOutput;
if (output instanceof ReadableStream) {
return output.pipeThrough<EngineResponse>(
new TransformStream({
return output.pipeThrough(
new TransformStream<EngineResponse>({
transform(chunk, controller) {
controller.enqueue(EngineResponse.fromChatResponseChunk(chunk));
controller.enqueue(
EngineResponse.fromChatResponseChunk(
chunk,
chunk.sourceNodes,
),
);
},
}),
);
+1 -1
View File
@@ -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);
});
}
+1 -1
View File
@@ -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 -1
View File
@@ -1,4 +1,4 @@
import { Tokenizers, tokenizers } from "@llamaindex/env";
import { Tokenizers, tokenizers } from "@llamaindex/env/tokenizers";
export function truncateMaxTokens(
tokenizer: Tokenizers,
+2 -1
View File
@@ -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,
@@ -1,4 +1,5 @@
import { AsyncLocalStorage, type Tokenizer, tokenizers } from "@llamaindex/env";
import { AsyncLocalStorage } from "@llamaindex/env";
import { type Tokenizer, tokenizers } from "@llamaindex/env/tokenizers";
const chunkSizeAsyncLocalStorage = new AsyncLocalStorage<Tokenizer>();
let globalTokenizer: Tokenizer = tokenizers.tokenizer();
+2 -2
View File
@@ -1,4 +1,4 @@
import { type Tokenizer, tokenizers } from "@llamaindex/env";
import type { Tokenizer } from "@llamaindex/env/tokenizers";
import {
DEFAULT_CHUNK_OVERLAP_RATIO,
DEFAULT_CONTEXT_WINDOW,
@@ -64,7 +64,7 @@ export class PromptHelper {
this.numOutput = numOutput;
this.chunkOverlapRatio = chunkOverlapRatio;
this.chunkSizeLimit = chunkSizeLimit;
this.tokenizer = tokenizer ?? tokenizers.tokenizer();
this.tokenizer = tokenizer ?? Settings.tokenizer;
this.separator = separator;
}
+1 -2
View File
@@ -1,5 +1,4 @@
import { streamConverter } from "../utils";
import { extractText } from "../utils/llms";
import { extractText, streamConverter } from "../utils";
import type {
ChatResponse,
ChatResponseChunk,
+2 -2
View File
@@ -1,6 +1,6 @@
import type { Tokenizers } from "@llamaindex/env";
import type { Tokenizers } from "@llamaindex/env/tokenizers";
import type { JSONSchemaType } from "ajv";
import type { JSONObject, JSONValue } from "../global/type";
import type { JSONObject, JSONValue } from "../global";
/**
* @internal
+1 -1
View File
@@ -1,4 +1,4 @@
import { type Tokenizer, tokenizers } from "@llamaindex/env";
import { type Tokenizer, tokenizers } from "@llamaindex/env/tokenizers";
import { Settings } from "../global";
import type { ChatMessage, LLM, MessageType } from "../llms";
import { defaultSummaryPrompt, type SummaryPrompt } from "../prompts";
@@ -1,4 +1,4 @@
import type { Tokenizer } from "@llamaindex/env";
import type { Tokenizer } from "@llamaindex/env/tokenizers";
import { z } from "zod";
import { Settings } from "../global";
import { sentenceSplitterSchema } from "../schema";
@@ -1,4 +1,4 @@
import type { Tokenizer } from "@llamaindex/env";
import type { Tokenizer } from "@llamaindex/env/tokenizers";
import { z } from "zod";
import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, Settings } from "../global";
import { MetadataAwareTextSplitter } from "./base";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Tokenizer } from "@llamaindex/env";
import type { Tokenizer } from "@llamaindex/env/tokenizers";
export type SplitterParams = {
tokenizer?: Tokenizer;
+1 -1
View File
@@ -1,5 +1,5 @@
import { truncateMaxTokens } from "@llamaindex/core/embeddings";
import { Tokenizers, tokenizers } from "@llamaindex/env";
import { Tokenizers, tokenizers } from "@llamaindex/env/tokenizers";
import { describe, expect, test } from "vitest";
describe("truncateMaxTokens", () => {
@@ -1,6 +1,6 @@
import { SentenceSplitter } from "@llamaindex/core/node-parser";
import { Document } from "@llamaindex/core/schema";
import { tokenizers } from "@llamaindex/env";
import { tokenizers } from "@llamaindex/env/tokenizers";
import { beforeEach, describe, expect, test } from "vitest";
describe("SentenceSplitter", () => {
-1
View File
@@ -8,7 +8,6 @@
"moduleResolution": "Bundler",
"skipLibCheck": true,
"strict": true,
"lib": ["ESNext", "DOM", "DOM.AsyncIterable"],
"types": ["node"]
},
"include": ["./src"],
+15
View File
@@ -1,5 +1,20 @@
# @llamaindex/env
## 0.1.20
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
## 0.1.19
### 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
## 0.1.18
### Patch Changes
+31 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/env",
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
"version": "0.1.18",
"version": "0.1.20",
"type": "module",
"types": "dist/index.d.ts",
"module": "dist/index.js",
@@ -51,6 +51,32 @@
"default": "./dist/index.cjs"
}
},
"./tokenizers": {
"workerd": {
"types": "./tokenizers/dist/index.workerd.d.ts",
"default": "./tokenizers/dist/index.workerd.js"
},
"edge-light": {
"types": "./tokenizers/dist/index.edge-light.d.ts",
"default": "./tokenizers/dist/index.edge-light.js"
},
"browser": {
"types": "./tokenizers/dist/index.browser.d.ts",
"default": "./tokenizers/dist/index.browser.js"
},
"import": {
"types": "./tokenizers/dist/index.d.ts",
"default": "./tokenizers/dist/index.js"
},
"require": {
"types": "./tokenizers/dist/index.d.cts",
"default": "./tokenizers/dist/index.cjs"
},
"default": {
"types": "./tokenizers/dist/index.d.ts",
"default": "./tokenizers/dist/index.js"
}
},
"./multi-model": {
"workerd": {
"types": "./multi-model/dist/index.workerd.d.ts",
@@ -79,6 +105,7 @@
}
},
"files": [
"tokenizers",
"multi-model",
"dist",
"CHANGELOG.md",
@@ -97,7 +124,7 @@
"devDependencies": {
"@types/node": "^22.9.0",
"@types/readable-stream": "^4.0.15",
"@xenova/transformers": "^2.17.2",
"@huggingface/transformers": "^3.0.2",
"bunchee": "5.6.1",
"gpt-tokenizer": "^2.6.0",
"pathe": "^1.1.2",
@@ -105,7 +132,7 @@
},
"peerDependencies": {
"@aws-crypto/sha256-js": "^5.2.0",
"@xenova/transformers": "^2.17.2",
"@huggingface/transformers": "^3.0.2",
"gpt-tokenizer": "^2.5.0",
"js-tiktoken": "^1.0.12",
"pathe": "^1.1.2"
@@ -114,7 +141,7 @@
"@aws-crypto/sha256-js": {
"optional": true
},
"@xenova/transformers": {
"@huggingface/transformers": {
"optional": true
},
"pathe": {
+1
View File
@@ -0,0 +1 @@
export { AsyncLocalStorage } from "node:async_hooks";
+3
View File
@@ -0,0 +1,3 @@
// Async Local Storage is available cross different JS runtimes
// @ts-expect-error AsyncLocalStorage is not defined in Non Node.js environment
export const AsyncLocalStorage = globalThis.AsyncLocalStorage;
+32
View File
@@ -0,0 +1,32 @@
// Web doesn't have AsyncLocalStorage and there's no alternative way to implement it
// Wait for https://github.com/tc39/proposal-async-context
export class AsyncLocalStorage<T> {
#store: T = null!;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static bind<Func extends (...args: any[]) => any>(fn: Func): Func {
return fn;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static snapshot(): <R, TArgs extends any[]>(
fn: (...args: TArgs) => R,
...args: TArgs
) => R {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return (cb: any, ...args: any[]) => cb(...args);
}
getStore() {
return this.#store;
}
run<R>(store: T, cb: () => R): R {
this.#store = store;
if (cb.constructor.name === "AsyncFunction") {
console.warn("AsyncLocalStorage is not supported in the web environment");
console.warn("Please note that some features may not work as expected");
}
return cb();
}
}
+1 -2
View File
@@ -5,11 +5,10 @@
*/
import "./global-check.js";
export * from "./als/index.web.js";
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export * from "./web-polyfill.js";
// @ts-expect-error no type
if (typeof window === "undefined") {
console.warn(
"You are not in a browser environment. This module is not supposed to be used in a non-browser environment.",
+2 -2
View File
@@ -3,8 +3,8 @@
*
* @module
*/
import "./global-check.js";
export * from "./als/index.non-node.js";
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export * from "./node-polyfill.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
+2 -7
View File
@@ -34,14 +34,9 @@ export function createSHA256(): SHA256 {
};
}
export * from "./als/index.node.js";
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/node.js";
export {
AsyncLocalStorage,
CustomEvent,
getEnv,
setEnvs,
} from "./utils/index.js";
export { CustomEvent, getEnv, setEnvs } from "./utils/index.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export {
EOL,
+1 -1
View File
@@ -7,6 +7,7 @@
*/
import { INTERNAL_ENV } from "./utils/index.js";
export * from "./als/index.non-node.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export * from "./node-polyfill.js";
@@ -16,4 +17,3 @@ export function getEnv(name: string): string | undefined {
}
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
+4 -2
View File
@@ -8,8 +8,10 @@ export {
export async function loadTransformers(onLoad: OnLoad) {
if (getTransformers() === null) {
setTransformers(
// @ts-expect-error no type
await import("https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2"),
await import(
// @ts-expect-error no type
"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.0.2"
),
);
} else {
return getTransformers()!;
+1 -1
View File
@@ -8,7 +8,7 @@ export {
export async function loadTransformers(onLoad: OnLoad) {
if (getTransformers() === null) {
setTransformers(await import("@xenova/transformers"));
setTransformers(await import("@huggingface/transformers"));
} else {
return getTransformers()!;
}
+4 -4
View File
@@ -9,7 +9,7 @@ export async function loadTransformers(onLoad: OnLoad) {
if (getTransformers() === null) {
/**
* If you see this warning, it means that the current environment does not support the transformer.
* because "@xeonva/transformers" highly depends on Node.js APIs.
* because "@huggingface/transformers" highly depends on Node.js APIs.
*
* One possible solution is to fix their implementation to make it work in the non-Node.js environment,
* but it's not worth the effort because Edge Runtime and Cloudflare Workers are not the for heavy Machine Learning task.
@@ -17,14 +17,14 @@ export async function loadTransformers(onLoad: OnLoad) {
* Or you can provide an RPC server that runs the transformer in a Node.js environment.
* Or you just run the code in a Node.js environment.
*
* Refs: https://github.com/xenova/transformers.js/issues/309
* Refs: https://github.com/huggingface/transformers.js/issues/309
*/
console.warn(
'"@xenova/transformers" is not officially supported in this environment, some features may not work as expected.',
'"@huggingface/transformers" is not officially supported in this environment, some features may not work as expected.',
);
setTransformers(
// @ts-expect-error no type
await import("@xenova/transformers/dist/transformers"),
await import("@huggingface/transformers/dist/transformers.js"),
);
} else {
return getTransformers()!;
+4 -4
View File
@@ -1,17 +1,17 @@
let transformer: typeof import("@xenova/transformers") | null = null;
let transformer: typeof import("@huggingface/transformers") | null = null;
export function getTransformers() {
return transformer;
}
export function setTransformers(t: typeof import("@xenova/transformers")) {
export function setTransformers(t: typeof import("@huggingface/transformers")) {
transformer = t;
}
export type OnLoad = (
transformer: typeof import("@xenova/transformers"),
transformer: typeof import("@huggingface/transformers"),
) => void;
export type LoadTransformerEvent = {
transformer: typeof import("@xenova/transformers");
transformer: typeof import("@huggingface/transformers");
};
@@ -1,4 +1,4 @@
// Note: js-tiktoken it's 60x slower than the WASM implementation - use it only for unsupported environments
// Note: js-tiktoken it's 60x slower than gpt-tokenizer
import { getEncoding } from "js-tiktoken";
import type { Tokenizer } from "./types.js";
import { Tokenizers } from "./types.js";
@@ -1,4 +1,3 @@
// Note: This is using th WASM implementation of tiktoken which is 60x faster
import type { Tokenizer } from "./types.js";
import { Tokenizers } from "./types.js";
+1 -6
View File
@@ -56,9 +56,4 @@ export const process: NodeJS.Process = globalThis.process ?? {
versions: {},
};
export {
AsyncLocalStorage,
CustomEvent,
getEnv,
setEnvs,
} from "./utils/index.js";
export { CustomEvent, getEnv, setEnvs } from "./utils/index.js";
+5
View File
@@ -0,0 +1,5 @@
export {
Tokenizers,
tokenizers,
type Tokenizer,
} from "./internal/tokenizers/js.js";
+5
View File
@@ -0,0 +1,5 @@
export {
Tokenizers,
tokenizers,
type Tokenizer,
} from "./internal/tokenizers/js.js";
+5
View File
@@ -0,0 +1,5 @@
export {
Tokenizers,
tokenizers,
type Tokenizer,
} from "./internal/tokenizers/node.js";
+5
View File
@@ -0,0 +1,5 @@
export {
Tokenizers,
tokenizers,
type Tokenizer,
} from "./internal/tokenizers/js.js";
-3
View File
@@ -56,9 +56,6 @@ interface CustomEventInit<T = any> extends EventInit {
detail?: T;
}
// Async Local Storage is available cross different JS runtimes
export { AsyncLocalStorage } from "node:async_hooks";
// Node.js 18 doesn't have CustomEvent by default
// Refs: https://github.com/nodejs/node/issues/40678
// eslint-disable-next-line @typescript-eslint/no-explicit-any
-32
View File
@@ -13,38 +13,6 @@ export function getEnv(name: string): string | undefined {
}
}
// Web doesn't have AsyncLocalStorage and there's no alternative way to implement it
// Wait for https://github.com/tc39/proposal-async-context
export class AsyncLocalStorage<T> {
#store: T = null!;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static bind<Func extends (...args: any[]) => any>(fn: Func): Func {
return fn;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static snapshot(): <R, TArgs extends any[]>(
fn: (...args: TArgs) => R,
...args: TArgs
) => R {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return (cb: any, ...args: any[]) => cb(...args);
}
getStore() {
return this.#store;
}
run<R>(store: T, cb: () => R): R {
this.#store = store;
if (cb.constructor.name === "AsyncFunction") {
console.warn("AsyncLocalStorage is not supported in the web environment");
console.warn("Please note that some features may not work as expected");
}
return cb();
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const defaultCustomEvent = (globalThis as any).CustomEvent;
+2 -4
View File
@@ -18,10 +18,8 @@ export class NotSupportCurrentRuntimeClass {
export const glo: any =
typeof globalThis !== "undefined"
? globalThis
: // @ts-expect-error globalThis is not defined
typeof window !== "undefined"
? // @ts-expect-error window is not defined
window
: typeof window !== "undefined"
? window
: typeof global !== "undefined"
? global
: {};
+1 -7
View File
@@ -49,10 +49,4 @@ export function randomUUID(): string {
return crypto.randomUUID();
}
export {
AsyncLocalStorage,
CustomEvent,
getEnv,
process,
setEnvs,
} from "./utils/index.web.js";
export { CustomEvent, getEnv, process, setEnvs } from "./utils/index.web.js";
+13 -3
View File
@@ -1,11 +1,21 @@
import { describe, expect, it } from "vitest";
import { tokenizers } from "../src/tokenizers/node.js";
import { tokenizers as fallbackTokenizers } from "../src/internal/tokenizers/js.js";
import { tokenizers as nodeTokenizers } from "../src/internal/tokenizers/node.js";
describe("tokenizer", () => {
describe("node tokenizer", () => {
it("should tokenize text", () => {
const tokenizer = tokenizers.tokenizer();
const tokenizer = nodeTokenizers.tokenizer();
expect(tokenizer.decode(tokenizer.encode("hello world"))).toBe(
"hello world",
);
});
it("should have same result as fallback tokenizer", () => {
const nodeTokenizer = nodeTokenizers.tokenizer();
const fallbackTokenizer = fallbackTokenizers.tokenizer();
const text = "hello world";
expect(nodeTokenizer.decode(nodeTokenizer.encode(text))).toBe(
fallbackTokenizer.decode(fallbackTokenizer.encode(text)),
);
});
});
+15
View File
@@ -1,5 +1,20 @@
# @llamaindex/experimental
## 0.0.121
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.120
### Patch Changes
- Updated dependencies [ad85bd0]
- llamaindex@0.8.8
## 0.0.119
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.119",
"version": "0.0.121",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+51
View File
@@ -1,5 +1,56 @@
# llamaindex
## 0.8.9
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
- 4d4cd8a: feat: support ollama tool call
Note that `OllamaEmbedding` now is not the subclass of `Ollama`.
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- @llamaindex/env@0.1.20
- @llamaindex/clip@0.0.15
- @llamaindex/huggingface@0.0.15
- @llamaindex/ollama@0.0.22
- @llamaindex/cloud@2.0.6
- @llamaindex/core@0.4.6
- @llamaindex/node-parser@0.0.7
- @llamaindex/anthropic@0.0.15
- @llamaindex/deepinfra@0.0.15
- @llamaindex/groq@0.0.30
- @llamaindex/openai@0.1.31
- @llamaindex/portkey-ai@0.0.15
- @llamaindex/replicate@0.0.15
- @llamaindex/readers@1.0.7
## 0.8.8
### 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/core@0.4.5
- @llamaindex/env@0.1.19
- @llamaindex/node-parser@0.0.6
- @llamaindex/cloud@2.0.5
- @llamaindex/anthropic@0.0.14
- @llamaindex/clip@0.0.14
- @llamaindex/deepinfra@0.0.14
- @llamaindex/huggingface@0.0.14
- @llamaindex/ollama@0.0.21
- @llamaindex/openai@0.1.30
- @llamaindex/portkey-ai@0.0.14
- @llamaindex/replicate@0.0.14
- @llamaindex/readers@1.0.6
- @llamaindex/groq@0.0.29
## 0.8.7
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.8.7",
"version": "0.8.9",
"license": "MIT",
"type": "module",
"keywords": [
@@ -29,7 +29,7 @@
"@discoveryjs/json-ext": "^0.6.1",
"@google-cloud/vertexai": "1.2.0",
"@google/generative-ai": "0.12.0",
"@grpc/grpc-js": "^1.11.1",
"@grpc/grpc-js": "^1.12.2",
"@llamaindex/anthropic": "workspace:*",
"@llamaindex/clip": "workspace:*",
"@llamaindex/cloud": "workspace:*",
@@ -88,7 +88,7 @@
"@swc/cli": "^0.5.0",
"@swc/core": "^1.7.22",
"@vercel/postgres": "^0.10.0",
"@xenova/transformers": "^2.17.2",
"@huggingface/transformers": "^3.0.2",
"concurrently": "^9.1.0",
"glob": "^11.0.0",
"pg": "^8.12.0",
+5 -1
View File
@@ -1,4 +1,9 @@
export * from "@llamaindex/core/agent";
export {
OllamaAgent,
OllamaAgentWorker,
type OllamaAgentParams,
} from "@llamaindex/ollama";
export {
AnthropicAgent,
AnthropicAgentWorker,
@@ -16,7 +21,6 @@ export {
ReActAgent,
type ReACTAgentParams,
} from "./react.js";
// todo: ParallelAgent
// todo: CustomAgent
// todo: ReactMultiModal
@@ -1,7 +1 @@
import type { BaseEmbedding } from "@llamaindex/core/embeddings";
import { Ollama } from "@llamaindex/ollama";
/**
* OllamaEmbedding is an alias for Ollama that implements the BaseEmbedding interface.
*/
export class OllamaEmbedding extends Ollama implements BaseEmbedding {}
export { OllamaEmbedding } from "@llamaindex/ollama";
+1 -1
View File
@@ -22,7 +22,7 @@ export default function withLlamaIndex(config: any) {
config.experimental.serverComponentsExternalPackages =
config.experimental.serverComponentsExternalPackages ?? [];
config.experimental.serverComponentsExternalPackages.push(
"@xenova/transformers",
"@huggingface/transformers",
);
const userWebpack = config.webpack;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -12,6 +12,7 @@ import {
path,
randomUUID,
} from "@llamaindex/env";
export type InterpreterParameter = {
code: string;
};
@@ -266,7 +267,9 @@ export class AzureDynamicSessionTool
if (params.localFilename) {
const writer = createWriteStream(path.resolve(params.localFilename));
const blob = await response.blob();
Readable.from(blob.stream()).pipe(writer);
Readable.from(
blob.stream() as unknown as AsyncIterable<unknown>,
).pipe(writer);
return;
}
+18
View File
@@ -1,5 +1,23 @@
# @llamaindex/node-parser
## 0.0.7
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.6
### 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/core@0.4.5
- @llamaindex/env@0.1.19
## 0.0.5
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "0.0.5",
"version": "0.0.7",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {

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