Compare commits

..

42 Commits

Author SHA1 Message Date
github-actions[bot] 0111f5c8b0 Release 0.9.7 (#1703)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-03-05 16:59:05 +07:00
Thuc Pham beb922b743 fix: build fail in edge runtime (#1705)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-03-05 16:35:00 +07:00
patryktop e28c29d1f5 feat: add Llama 3.3 70B Instruct to community package (#1702) 2025-03-04 17:27:35 -08:00
github-actions[bot] 008cccd9f1 Release 0.9.6 (#1698) 2025-03-04 17:33:18 +07:00
Huu Le 081698d68c chore: simplify imports of agent workflow (#1700) 2025-03-04 17:01:29 +07:00
Huu Le ab5fe5d7a0 chore: remove core import in document (#1699) 2025-03-04 16:14:31 +07:00
Huu Le 56689707d3 feat: Support AgentWorkflow (#1685)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-03-04 16:05:25 +07:00
Brian Lange fd74ba4bf1 fix: Voyage typescript configs + docs (#1696) 2025-03-04 11:00:05 +07:00
github-actions[bot] b2634e47ca Release 0.9.5 (#1694)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-02-28 18:18:14 +07:00
Thuc Pham ad3c7f1ec1 fix: streaming issues with LLMAgent (#1692) 2025-02-28 18:13:36 +07:00
Alex Yang 335f2df626 chore: fix lock file 2025-02-27 12:31:11 -08:00
github-actions[bot] ee963644bf Release 0.9.4 (#1689)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 12:28:48 -08:00
Alex Yang cb256f24ae feat: support gpt-4.5 (#1688) 2025-02-27 12:24:33 -08:00
Alex Yang 1ccc04ecb5 chore: fix changeset 2025-02-27 12:17:12 -08:00
Brian Lange 034639153b feat: Voyage embeddings (#1574)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-02-27 10:22:33 +07:00
patryktop 1914b52708 feat: add Claude 3.7 Sonnet model to community package (#1683) 2025-02-26 14:38:14 -08:00
Alex Yang cb021e7196 feat(node-parser): support async function (#1682) 2025-02-26 08:59:51 -08:00
ratacat c2aa836b35 docs: upgrade remote ollama embeddings (#1680) 2025-02-25 11:39:16 -08:00
github-actions[bot] 3b0f55f1ea Release 0.9.3 (#1676)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-02-25 16:53:30 +07:00
Marcus Schiesser a9c6144eec feat: stream thinking tokens for claude 3.7 (#1679) 2025-02-25 16:48:12 +07:00
Marcus Schiesser 3564244ced chore: add claude 3.7 support (#1678) 2025-02-25 15:18:45 +07:00
Gunnar Holwerda d952e68ec4 Fix refine synthesizer empty source nodes behavior (#1677) 2025-02-24 10:56:21 +07:00
Tushar Sonawane 5c026e839f feat(vectorstore): adds firestore vector store support (#1600) 2025-02-21 16:23:50 +07:00
github-actions[bot] 9c1c5b4d50 Release 0.9.2 (#1673)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-21 10:57:11 +07:00
Thuc Pham c902fcbc33 chore: bump llamacloud openapi (#1674) 2025-02-20 17:47:41 +07:00
Thuc Pham 88d776f392 fix: enhance error message in llamacloud (#1672) 2025-02-20 16:33:34 +07:00
github-actions[bot] 6fcc6bcb84 Release @llamaindex/anthropic@0.1.2 (#1671)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-20 12:56:33 +07:00
Thuc Pham be74207945 fix: dont add empty text block to tool call (#1670) 2025-02-20 12:47:43 +07:00
Alex Yang 6be223dfad chore: bump version (#1668) 2025-02-19 19:28:12 +08:00
Alex Yang 4cbfdb5f5c ci: only run in pull request (#1669) 2025-02-19 19:11:53 +08:00
github-actions[bot] 9767d1c004 Release 0.9.1 (#1664)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <14026360+himself65@users.noreply.github.com>
2025-02-19 18:15:41 +08:00
Alex Yang e831b28627 ci: add size limit check (#1667) 2025-02-19 18:05:28 +08:00
Alex Yang cc50c9c2d4 chore: trigger env package release 2025-02-19 17:59:38 +08:00
Thuc Pham 954140776e fix: missing document entrypoints (#1663)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-02-14 17:06:23 +07:00
Savas Ziplies 6d37d440a6 refactor(agent): changed regex for tool use extraction to look for optional "Input:" prefix to comply with Cohere command-r models (#1654) 2025-02-14 15:17:03 +07:00
Alex Yang e724f7e9f2 fix: cjs module resolve esm module unexpectedly (#1662) 2025-02-14 15:52:37 +08:00
Alex Yang 1b029ae525 test: add cjs smoke test (#1660) 2025-02-14 14:28:09 +08:00
Marcus Schiesser d1db2189c9 docs: update starter to ask for api key (#1661) 2025-02-14 12:14:51 +07:00
Alex Yang 2c5b4030c9 chore: bump bunchee (#1645) 2025-02-14 09:41:32 +08:00
Alex Yang 96eb597059 fix: bundler issue default in default (#1653) 2025-02-14 09:20:39 +08:00
Marcus Schiesser 04098d55ff chore: fix pnpm lock (#1658) 2025-02-13 17:49:21 +07:00
Marcus Schiesser 335a6b9e88 chore: add pathe to examples (#1657) 2025-02-13 17:44:30 +07:00
173 changed files with 11909 additions and 2877 deletions
+25
View File
@@ -98,6 +98,7 @@ jobs:
- nextjs-node-runtime - nextjs-node-runtime
- waku-query-engine - waku-query-engine
- llama-parse-browser - llama-parse-browser
- vite-import-llamaindex
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Build LlamaIndex Example (${{ matrix.packages }}) name: Build LlamaIndex Example (${{ matrix.packages }})
steps: steps:
@@ -116,6 +117,30 @@ jobs:
run: pnpm run build run: pnpm run build
working-directory: e2e/examples/${{ matrix.packages }} working-directory: e2e/examples/${{ matrix.packages }}
size-limit:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
name: Size Limit
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build llamaindex
run: pnpm run build
- uses: andresz1/size-limit-action@94bc357df29c36c8f8d50ea497c3e225c3c95d1d
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
directory: e2e/examples/vite-import-llamaindex
skip_step: "install"
build_script: build
package_manager: pnpm
typecheck-examples: typecheck-examples:
runs-on: ubuntu-latest runs-on: ubuntu-latest
+7
View File
@@ -41,8 +41,15 @@ pnpm install
### Build the packages ### Build the packages
You'll need Turbo to build the packages. If you don't have it, you can run it with `pnpx`.
To build all packages, run:
```shell ```shell
# Build all packages # Build all packages
pnpx turbo build --filter "./packages/*"
# Or if you have turbo installed, you can run:
turbo build --filter "./packages/*" turbo build --filter "./packages/*"
``` ```
+85
View File
@@ -1,5 +1,90 @@
# @llamaindex/doc # @llamaindex/doc
## 0.1.7
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/core@0.5.6
- llamaindex@0.9.7
- @llamaindex/cloud@3.0.7
- @llamaindex/node-parser@1.0.6
- @llamaindex/openai@0.1.58
- @llamaindex/readers@2.0.6
- @llamaindex/workflow@0.0.13
## 0.1.6
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
- @llamaindex/workflow@0.0.12
- @llamaindex/cloud@3.0.6
- llamaindex@0.9.6
- @llamaindex/node-parser@1.0.5
- @llamaindex/openai@0.1.57
- @llamaindex/readers@2.0.5
## 0.1.5
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
- @llamaindex/cloud@3.0.5
- llamaindex@0.9.5
- @llamaindex/node-parser@1.0.4
- @llamaindex/openai@0.1.56
- @llamaindex/readers@2.0.4
## 0.1.4
### Patch Changes
- Updated dependencies [cb256f2]
- Updated dependencies [cb021e7]
- @llamaindex/openai@0.1.55
- @llamaindex/core@0.5.3
- llamaindex@0.9.4
- @llamaindex/cloud@3.0.4
- @llamaindex/node-parser@1.0.3
- @llamaindex/readers@2.0.3
## 0.1.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/cloud@3.0.3
- llamaindex@0.9.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/openai@0.1.54
- @llamaindex/readers@2.0.2
## 0.1.2
### Patch Changes
- Updated dependencies [c902fcb]
- Updated dependencies [88d776f]
- @llamaindex/cloud@3.0.2
- llamaindex@0.9.2
## 0.1.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
- @llamaindex/cloud@3.0.1
- @llamaindex/core@0.5.1
- @llamaindex/node-parser@1.0.1
- @llamaindex/openai@0.1.53
- @llamaindex/readers@2.0.1
- @llamaindex/workflow@0.0.11
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/doc", "name": "@llamaindex/doc",
"version": "0.1.0", "version": "0.1.7",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "pnpm run build:docs && next build", "build": "pnpm run build:docs && next build",
@@ -44,10 +44,10 @@
"hast-util-to-jsx-runtime": "^2.3.2", "hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"lucide-react": "^0.460.0", "lucide-react": "^0.460.0",
"next": "15.0.3", "next": "15.1.7",
"next-themes": "^0.4.3", "next-themes": "^0.4.3",
"react": "^18.3.1", "react": "^19.0.0",
"react-dom": "^18.3.1", "react-dom": "^19.0.0",
"react-icons": "^5.3.0", "react-icons": "^5.3.0",
"react-monaco-editor": "^0.56.2", "react-monaco-editor": "^0.56.2",
"react-text-transition": "^3.1.0", "react-text-transition": "^3.1.0",
@@ -3,6 +3,8 @@ title: With Node.js/Bun/Deno
description: In this guide, you'll learn how to use LlamaIndex with Node.js, Bun, and Deno. description: In this guide, you'll learn how to use LlamaIndex with Node.js, Bun, and Deno.
--- ---
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
## Adding environment variables ## Adding environment variables
By default, LlamaIndex uses OpenAI provider, which requires an API key. You can set the `OPENAI_API_KEY` environment variable to authenticate with OpenAI. By default, LlamaIndex uses OpenAI provider, which requires an API key. You can set the `OPENAI_API_KEY` environment variable to authenticate with OpenAI.
@@ -22,6 +24,26 @@ node --env-file .env your-script.js
For more information, see the [How to read environment variables from Node.js](https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs). For more information, see the [How to read environment variables from Node.js](https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs).
## Performance Optimization
By the default, we are using `js-tiktoken` for tokenization. You can install `gpt-tokenizer` which is then automatically used by LlamaIndex to get a 60x speedup for tokenization:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install gpt-tokenizer
```
```shell tab="yarn"
yarn add gpt-tokenizer
```
```shell tab="pnpm"
pnpm add gpt-tokenizer
```
</Tabs>
> Note: This only works for Node.js
## TypeScript support ## TypeScript support
<Card <Card
@@ -0,0 +1,139 @@
---
title: Agent Workflow
---
import { DynamicCodeBlock } from 'fumadocs-ui/components/dynamic-codeblock';
import CodeSource from "!raw-loader!../../../../../../../examples/agentworkflow/blog_writer.ts";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
`AgentWorkflow` is a powerful system that enables you to create and orchestrate one or multiple agents with tools to perform specific tasks. It's built on top of the base `Workflow` system and provides a streamlined interface for agent interactions.
## Installation
You'll need to install the `@llamaindex/workflow` package:
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install @llamaindex/workflow
```
```shell tab="yarn"
yarn add @llamaindex/workflow
```
```shell tab="pnpm"
pnpm add @llamaindex/workflow
```
</Tabs>
## Usage
### Single Agent Workflow
The simplest use case is creating a single agent with specific tools. Here's an example of creating an assistant that tells jokes:
```typescript
import { AgentWorkflow, FunctionTool } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
// Define a joke-telling tool
const jokeTool = FunctionTool.from(
() => "Baby Llama is called cria",
{
name: "joke",
description: "Use this tool to get a joke",
}
);
// Create an agent workflow with the tool
const workflow = AgentWorkflow.fromTools({
tools: [jokeTool],
llm: new OpenAI({
model: "gpt-4o-mini",
}),
});
// Run the workflow
const result = await workflow.run("Tell me something funny");
console.log(result); // Baby Llama is called cria
```
### Event Streaming
`AgentWorkflow` provides a unified interface for event streaming, making it easy to track and respond to different events during execution:
```typescript
import { AgentToolCall, AgentStream } from "llamaindex";
// Get the workflow execution context
const context = workflow.run("Tell me something funny");
// Stream and handle events
for await (const event of context) {
if (event instanceof AgentToolCall) {
console.log(`Tool being called: ${event.data.toolName}`);
}
if (event instanceof AgentStream) {
process.stdout.write(event.data.delta);
}
}
```
### Multi-Agent Workflow
`AgentWorkflow` can orchestrate multiple agents, enabling complex interactions and task handoffs. Each agent in a multi-agent workflow requires:
- `name`: Unique identifier for the agent
- `description`: Purpose description used for task routing
- `tools`: Array of tools the agent can use
- `canHandoffTo` (optional): Array of agent names or agent instances that this agent can delegate tasks to
Here's an example of a multi-agent system that combines joke-telling and weather information:
```typescript
import { AgentWorkflow, FunctionAgent, FunctionTool } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { z } from "zod";
// Create a weather agent
const weatherAgent = new FunctionAgent({
name: "WeatherAgent",
description: "Provides weather information for any city",
tools: [
FunctionTool.from(
({ city }: { city: string }) => `The weather in ${city} is sunny`,
{
name: "fetchWeather",
description: "Get weather information for a city",
parameters: z.object({
city: z.string(),
}),
}
),
],
llm: new OpenAI({ model: "gpt-4o-mini" }),
});
// Create a joke-telling agent
const jokeAgent = new FunctionAgent({
name: "JokeAgent",
description: "Tells jokes and funny stories",
tools: [jokeTool], // Using the joke tool defined earlier
llm: new OpenAI({ model: "gpt-4o-mini" }),
canHandoffTo: [weatherAgent], // Can hand off to the weather agent
});
// Create the multi-agent workflow
const workflow = new AgentWorkflow({
agents: [jokeAgent, weatherAgent],
rootAgent: jokeAgent, // Start with the joke agent
});
// Run the workflow
const result = await workflow.run(
"Give me a morning greeting with a joke and the weather in San Francisco"
);
```
The workflow will coordinate between agents, allowing them to handle different aspects of the request and hand off tasks when appropriate.
@@ -0,0 +1,46 @@
---
title: VoyageAI
---
To use VoyageAI embeddings, you need to import `VoyageAIEmbedding` from `@llamaindex/voyage-ai`.
## Installation
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
```shell tab="npm"
npm install llamaindex @llamaindex/voyage-ai
```
```shell tab="yarn"
yarn add llamaindex @llamaindex/voyage-ai
```
```shell tab="pnpm"
pnpm add llamaindex @llamaindex/voyage-ai
```
</Tabs>
```ts
import { VoyageAIEmbedding } from "@llamaindex/voyage-ai";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
Settings.embedModel = new VoyageAIEmbedding();
const document = new Document({ text: essay, id_: "essay" });
const index = await VectorStoreIndex.fromDocuments([document]);
const queryEngine = index.asQueryEngine();
const query = "What is the meaning of life?";
const results = await queryEngine.query({
query,
});
```
## API Reference
- [VoyageAIEmbedding](/docs/api/classes/VoyageAIEmbedding)
@@ -37,6 +37,31 @@ Settings.embedModel = new OpenAIEmbedding({
For local embeddings, you can use the [HuggingFace](/docs/llamaindex/modules/embeddings/available_embeddings/huggingface) embedding model. For local embeddings, you can use the [HuggingFace](/docs/llamaindex/modules/embeddings/available_embeddings/huggingface) embedding model.
## Local Ollama Embeddings With Remote Host
Ollama provides a way to run embedding models locally or connect to a remote Ollama instance. This is particularly useful when you need to:
- Run embeddings without relying on external API services
- Use custom embedding models
- Connect to a shared Ollama instance in your network
The ENV variable method you will find elsewhere sometimes may not work with the OllamaEmbedding class. Also note, you'll need to change the host
in the Ollama server to `0.0.0.0` to allow connections from other machines.
To use Ollama embeddings with a remote host, you need to specify the host URL in the configuration like this:
```typescript
import { OllamaEmbedding } from "@llamaindex/ollama";
import { Settings } from "llamaindex";
// Configure Ollama with a remote host
Settings.embedModel = new OllamaEmbedding({
model: "nomic-embed-text",
config: {
host: "http://your-ollama-host:11434"
}
});
```
## Available Embeddings ## Available Embeddings
Most available embeddings are listed in the sidebar on the left. Most available embeddings are listed in the sidebar on the left.
+8 -1
View File
@@ -1,6 +1,13 @@
{ {
"plugin": ["typedoc-plugin-markdown", "typedoc-plugin-merge-modules"], "plugin": ["typedoc-plugin-markdown", "typedoc-plugin-merge-modules"],
"entryPoints": ["../../packages/llamaindex/src/index.ts"], "entryPoints": ["../../packages/**/src/index.ts"],
"exclude": [
"../../packages/autotool/**/src/index.ts",
"**/node_modules/**",
"**/dist/**",
"**/test/**",
"**/tests/**"
],
"tsconfig": "../../tsconfig.json", "tsconfig": "../../tsconfig.json",
"readme": "none", "readme": "none",
"sourceLinkTemplate": "https://github.com/run-llama/LlamaIndexTS/blob/{gitRevision}/{path}#L{line}", "sourceLinkTemplate": "https://github.com/run-llama/LlamaIndexTS/blob/{gitRevision}/{path}#L{line}",
@@ -1,5 +1,51 @@
# @llamaindex/cloudflare-worker-agent-test # @llamaindex/cloudflare-worker-agent-test
## 0.0.141
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
## 0.0.140
### Patch Changes
- llamaindex@0.9.6
## 0.0.139
### Patch Changes
- llamaindex@0.9.5
## 0.0.138
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.137
### Patch Changes
- llamaindex@0.9.3
## 0.0.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.135
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 0.0.134 ## 0.0.134
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloudflare-worker-agent-test", "name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.134", "version": "0.0.141",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -1,5 +1,48 @@
# @llamaindex/llama-parse-browser-test # @llamaindex/llama-parse-browser-test
## 0.0.52
### Patch Changes
- @llamaindex/cloud@3.0.7
## 0.0.51
### Patch Changes
- @llamaindex/cloud@3.0.6
## 0.0.50
### Patch Changes
- @llamaindex/cloud@3.0.5
## 0.0.49
### Patch Changes
- @llamaindex/cloud@3.0.4
## 0.0.48
### Patch Changes
- @llamaindex/cloud@3.0.3
## 0.0.47
### Patch Changes
- Updated dependencies [c902fcb]
- @llamaindex/cloud@3.0.2
## 0.0.46
### Patch Changes
- @llamaindex/cloud@3.0.1
## 0.0.45 ## 0.0.45
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/llama-parse-browser-test", "name": "@llamaindex/llama-parse-browser-test",
"private": true, "private": true,
"version": "0.0.45", "version": "0.0.52",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+46
View File
@@ -1,5 +1,51 @@
# @llamaindex/next-agent-test # @llamaindex/next-agent-test
## 0.1.141
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
## 0.1.140
### Patch Changes
- llamaindex@0.9.6
## 0.1.139
### Patch Changes
- llamaindex@0.9.5
## 0.1.138
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.1.137
### Patch Changes
- llamaindex@0.9.3
## 0.1.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.135
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 0.1.134 ## 0.1.134
### Patch Changes ### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-agent-test", "name": "@llamaindex/next-agent-test",
"version": "0.1.134", "version": "0.1.141",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -10,9 +10,9 @@
"dependencies": { "dependencies": {
"ai": "^4.0.0", "ai": "^4.0.0",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"react": "18.3.1", "react": "19.0.0",
"react-dom": "18.3.1" "react-dom": "19.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
@@ -1,5 +1,51 @@
# test-edge-runtime # test-edge-runtime
## 0.1.140
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
## 0.1.139
### Patch Changes
- llamaindex@0.9.6
## 0.1.138
### Patch Changes
- llamaindex@0.9.5
## 0.1.137
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.1.136
### Patch Changes
- llamaindex@0.9.3
## 0.1.135
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.134
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 0.1.133 ## 0.1.133
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/nextjs-edge-runtime-test", "name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.133", "version": "0.1.140",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -9,7 +9,7 @@
}, },
"dependencies": { "dependencies": {
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1" "react-dom": "^18.3.1"
}, },
@@ -1,5 +1,63 @@
# @llamaindex/next-node-runtime # @llamaindex/next-node-runtime
## 0.1.7
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
- @llamaindex/huggingface@0.0.42
- @llamaindex/readers@2.0.6
## 0.1.6
### Patch Changes
- llamaindex@0.9.6
- @llamaindex/huggingface@0.0.41
- @llamaindex/readers@2.0.5
## 0.1.5
### Patch Changes
- llamaindex@0.9.5
- @llamaindex/huggingface@0.0.40
- @llamaindex/readers@2.0.4
## 0.1.4
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
- @llamaindex/huggingface@0.0.39
- @llamaindex/readers@2.0.3
## 0.1.3
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/huggingface@0.0.38
- @llamaindex/readers@2.0.2
## 0.1.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
- @llamaindex/huggingface@0.0.37
- @llamaindex/readers@2.0.1
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-node-runtime-test", "name": "@llamaindex/next-node-runtime-test",
"version": "0.1.0", "version": "0.1.7",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -11,9 +11,9 @@
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"@llamaindex/huggingface": "workspace:*", "@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*", "@llamaindex/readers": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"react": "18.3.1", "react": "19.0.0",
"react-dom": "18.3.1" "react-dom": "19.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
@@ -0,0 +1,47 @@
# vite-import-llamaindex
## 0.0.7
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
## 0.0.6
### Patch Changes
- llamaindex@0.9.6
## 0.0.5
### Patch Changes
- llamaindex@0.9.5
## 0.0.4
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.3
### Patch Changes
- llamaindex@0.9.3
## 0.0.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
@@ -0,0 +1,24 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.7",
"type": "module",
"scripts": {
"build": "vite build",
"size-limit": "size-limit"
},
"size-limit": [
{
"path": "dist/LlamaIndexImportTest.js"
}
],
"devDependencies": {
"@size-limit/preset-big-lib": "^11.1.6",
"size-limit": "^11.1.6",
"typescript": "^5.7.2",
"vite": "^6.1.0"
},
"dependencies": {
"llamaindex": "workspace:*"
}
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,7 @@
import "llamaindex";
document.querySelector<HTMLDivElement>("#app")!.innerHTML = `
<div>
Hello World!
</div>
`;
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src", "vite.config.ts"]
}
@@ -0,0 +1,16 @@
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { defineConfig } from "vite";
const __dirname = dirname(fileURLToPath(import.meta.url));
export default defineConfig({
build: {
lib: {
entry: resolve(__dirname, "src/main.ts"),
name: "LlamaIndexImportTest",
fileName: "LlamaIndexImportTest",
formats: ["es", "cjs"],
},
},
});
@@ -5,3 +5,4 @@ dist
.cache .cache
.DS_Store .DS_Store
*.pem *.pem
/src/pages.gen.ts
@@ -1,5 +1,54 @@
# @llamaindex/waku-query-engine-test # @llamaindex/waku-query-engine-test
## 0.0.141
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- llamaindex@0.9.7
## 0.0.140
### Patch Changes
- llamaindex@0.9.6
## 0.0.139
### Patch Changes
- llamaindex@0.9.5
## 0.0.138
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.137
### Patch Changes
- llamaindex@0.9.3
## 0.0.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.135
### Patch Changes
- Updated dependencies [cc50c9c]
- Updated dependencies [6d37d44]
- @llamaindex/env@0.1.28
- llamaindex@0.9.1
## 0.0.134 ## 0.0.134
### Patch Changes ### Patch Changes
+5 -5
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/waku-query-engine-test", "name": "@llamaindex/waku-query-engine-test",
"version": "0.0.134", "version": "0.0.141",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -11,10 +11,10 @@
"dependencies": { "dependencies": {
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"react": "19.0.0-rc-5c56b873-20241107", "react": "19.0.0",
"react-dom": "19.0.0-rc-5c56b873-20241107", "react-dom": "19.0.0",
"react-server-dom-webpack": "19.0.0-rc-5c56b873-20241107", "react-server-dom-webpack": "19.0.0",
"waku": "0.21.6" "waku": "0.21.20"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "18.3.12", "@types/react": "18.3.12",
+30 -11
View File
@@ -1,5 +1,7 @@
import assert from "node:assert";
import { execSync } from "node:child_process"; import { execSync } from "node:child_process";
import { mkdir, rm, writeFile } from "node:fs/promises"; import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
import { createRequire } from "node:module";
import { resolve } from "node:path"; import { resolve } from "node:path";
import { test } from "node:test"; import { test } from "node:test";
import { testRootDir } from "./utils.js"; import { testRootDir } from "./utils.js";
@@ -14,17 +16,17 @@ const { Document, MetadataMode, VectorStoreIndex } = require('llamaindex')
const { OpenAIEmbedding } = require('@llamaindex/openai') const { OpenAIEmbedding } = require('@llamaindex/openai')
const { Settings } = require('@llamaindex/core/global')`; const { Settings } = require('@llamaindex/core/global')`;
const mainCode = ` const mainCode = `
async function main() { Settings.embedModel = new OpenAIEmbedding({
Settings.embedModel = new OpenAIEmbedding({ model: 'text-embedding-3-small',
model: 'text-embedding-3-small', apiKey: '${process.env.OPENAI_API_KEY}',
apiKey: '${process.env.OPENAI_API_KEY}', })
}) const model = Settings.embedModel
const model = Settings.embedModel if (model == null) {
if (model == null) { process.exit(-1)
process.exit(-1)
}
} }
main().catch(console.error)`; const document = new Document({ text: 'Hello, world!' })
const index = await VectorStoreIndex.fromDocuments([document])
`;
t.before(async () => { t.before(async () => {
await mkdir(resolve(testRootDir, ".temp"), { await mkdir(resolve(testRootDir, ".temp"), {
recursive: true, recursive: true,
@@ -84,3 +86,20 @@ main().catch(console.error)`;
}); });
} }
}); });
test('no extra deps in "@llamaindex/env" cjs module', async () => {
const modules = ["@aws-crypto/sha256-js"];
const require = createRequire(import.meta.url);
const envPackage = require.resolve("@llamaindex/env");
const file = await readFile(envPackage, "utf-8");
for (const module of modules) {
assert.ok(!file.includes(module));
}
});
test('no error when require "llamaindex" in CJS', async () => {
const code = `require('llamaindex')`;
execSync(`${process.argv[0]} -e "${code}"`, {
cwd: process.cwd(),
});
});
+240
View File
@@ -1,5 +1,245 @@
# examples # examples
## 0.2.6
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
- llamaindex@0.9.7
- @llamaindex/cloud@3.0.7
- @llamaindex/node-parser@1.0.6
- @llamaindex/anthropic@0.2.4
- @llamaindex/clip@0.0.42
- @llamaindex/cohere@0.0.11
- @llamaindex/deepinfra@0.0.42
- @llamaindex/google@0.0.13
- @llamaindex/groq@0.0.57
- @llamaindex/huggingface@0.0.42
- @llamaindex/mistral@0.0.11
- @llamaindex/mixedbread@0.0.11
- @llamaindex/ollama@0.0.46
- @llamaindex/openai@0.1.58
- @llamaindex/portkey-ai@0.0.39
- @llamaindex/replicate@0.0.39
- @llamaindex/astra@0.0.11
- @llamaindex/azure@0.1.6
- @llamaindex/chroma@0.0.11
- @llamaindex/firestore@1.0.4
- @llamaindex/milvus@0.1.6
- @llamaindex/mongodb@0.0.11
- @llamaindex/pinecone@0.0.11
- @llamaindex/postgres@0.0.39
- @llamaindex/qdrant@0.1.6
- @llamaindex/upstash@0.0.11
- @llamaindex/weaviate@0.0.11
- @llamaindex/voyage-ai@1.0.3
- @llamaindex/readers@2.0.6
- @llamaindex/workflow@0.0.13
- @llamaindex/vercel@0.0.17
- @llamaindex/vllm@0.0.28
## 0.2.5
### Patch Changes
- Updated dependencies [5668970]
- Updated dependencies [fd74ba4]
- @llamaindex/core@0.5.5
- @llamaindex/workflow@0.0.12
- @llamaindex/voyage-ai@1.0.2
- @llamaindex/cloud@3.0.6
- llamaindex@0.9.6
- @llamaindex/node-parser@1.0.5
- @llamaindex/anthropic@0.2.3
- @llamaindex/clip@0.0.41
- @llamaindex/cohere@0.0.10
- @llamaindex/deepinfra@0.0.41
- @llamaindex/google@0.0.12
- @llamaindex/huggingface@0.0.41
- @llamaindex/mistral@0.0.10
- @llamaindex/mixedbread@0.0.10
- @llamaindex/ollama@0.0.45
- @llamaindex/openai@0.1.57
- @llamaindex/portkey-ai@0.0.38
- @llamaindex/replicate@0.0.38
- @llamaindex/astra@0.0.10
- @llamaindex/azure@0.1.5
- @llamaindex/chroma@0.0.10
- @llamaindex/firestore@1.0.3
- @llamaindex/milvus@0.1.5
- @llamaindex/mongodb@0.0.10
- @llamaindex/pinecone@0.0.10
- @llamaindex/postgres@0.0.38
- @llamaindex/qdrant@0.1.5
- @llamaindex/upstash@0.0.10
- @llamaindex/weaviate@0.0.10
- @llamaindex/vercel@0.0.16
- @llamaindex/readers@2.0.5
- @llamaindex/groq@0.0.56
- @llamaindex/vllm@0.0.27
## 0.2.4
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
- @llamaindex/cloud@3.0.5
- llamaindex@0.9.5
- @llamaindex/node-parser@1.0.4
- @llamaindex/anthropic@0.2.2
- @llamaindex/clip@0.0.40
- @llamaindex/cohere@0.0.9
- @llamaindex/deepinfra@0.0.40
- @llamaindex/google@0.0.11
- @llamaindex/huggingface@0.0.40
- @llamaindex/mistral@0.0.9
- @llamaindex/mixedbread@0.0.9
- @llamaindex/ollama@0.0.44
- @llamaindex/openai@0.1.56
- @llamaindex/portkey-ai@0.0.37
- @llamaindex/replicate@0.0.37
- @llamaindex/astra@0.0.9
- @llamaindex/azure@0.1.4
- @llamaindex/chroma@0.0.9
- @llamaindex/firestore@1.0.2
- @llamaindex/milvus@0.1.4
- @llamaindex/mongodb@0.0.9
- @llamaindex/pinecone@0.0.9
- @llamaindex/postgres@0.0.37
- @llamaindex/qdrant@0.1.4
- @llamaindex/upstash@0.0.9
- @llamaindex/weaviate@0.0.9
- @llamaindex/vercel@0.0.15
- @llamaindex/voyage-ai@1.0.1
- @llamaindex/readers@2.0.4
- @llamaindex/groq@0.0.55
- @llamaindex/vllm@0.0.26
## 0.2.3
### Patch Changes
- Updated dependencies [cb256f2]
- Updated dependencies [cb021e7]
- Updated dependencies [0346391]
- @llamaindex/openai@0.1.55
- @llamaindex/core@0.5.3
- llamaindex@0.9.4
- @llamaindex/voyage-ai@1.0.0
- @llamaindex/clip@0.0.39
- @llamaindex/deepinfra@0.0.39
- @llamaindex/groq@0.0.54
- @llamaindex/huggingface@0.0.39
- @llamaindex/azure@0.1.3
- @llamaindex/milvus@0.1.3
- @llamaindex/qdrant@0.1.3
- @llamaindex/vllm@0.0.25
- @llamaindex/cloud@3.0.4
- @llamaindex/node-parser@1.0.3
- @llamaindex/anthropic@0.2.1
- @llamaindex/cohere@0.0.8
- @llamaindex/google@0.0.10
- @llamaindex/mistral@0.0.8
- @llamaindex/mixedbread@0.0.8
- @llamaindex/ollama@0.0.43
- @llamaindex/portkey-ai@0.0.36
- @llamaindex/replicate@0.0.36
- @llamaindex/astra@0.0.8
- @llamaindex/chroma@0.0.8
- @llamaindex/firestore@1.0.1
- @llamaindex/mongodb@0.0.8
- @llamaindex/pinecone@0.0.8
- @llamaindex/postgres@0.0.36
- @llamaindex/upstash@0.0.8
- @llamaindex/weaviate@0.0.8
- @llamaindex/vercel@0.0.14
- @llamaindex/readers@2.0.3
## 0.2.2
### Patch Changes
- 3564244: Add support for claude 3.7 thinking (and set default temperature to 1)
- 3564244: add support for claude 3.7
- Updated dependencies [d952e68]
- Updated dependencies [a9c6144]
- Updated dependencies [5c026e8]
- Updated dependencies [3564244]
- Updated dependencies [3564244]
- @llamaindex/core@0.5.2
- @llamaindex/anthropic@0.2.0
- @llamaindex/firestore@1.0.0
- @llamaindex/cloud@3.0.3
- llamaindex@0.9.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/clip@0.0.38
- @llamaindex/cohere@0.0.7
- @llamaindex/deepinfra@0.0.38
- @llamaindex/google@0.0.9
- @llamaindex/huggingface@0.0.38
- @llamaindex/mistral@0.0.7
- @llamaindex/mixedbread@0.0.7
- @llamaindex/ollama@0.0.42
- @llamaindex/openai@0.1.54
- @llamaindex/portkey-ai@0.0.35
- @llamaindex/replicate@0.0.35
- @llamaindex/astra@0.0.7
- @llamaindex/azure@0.1.2
- @llamaindex/chroma@0.0.7
- @llamaindex/milvus@0.1.2
- @llamaindex/mongodb@0.0.7
- @llamaindex/pinecone@0.0.7
- @llamaindex/postgres@0.0.35
- @llamaindex/qdrant@0.1.2
- @llamaindex/upstash@0.0.7
- @llamaindex/weaviate@0.0.7
- @llamaindex/vercel@0.0.13
- @llamaindex/readers@2.0.2
- @llamaindex/groq@0.0.53
- @llamaindex/vllm@0.0.24
## 0.2.1
### Patch Changes
- Updated dependencies [cc50c9c]
- Updated dependencies [6d37d44]
- @llamaindex/env@0.1.28
- llamaindex@0.9.1
- @llamaindex/cloud@3.0.1
- @llamaindex/core@0.5.1
- @llamaindex/node-parser@1.0.1
- @llamaindex/anthropic@0.1.1
- @llamaindex/clip@0.0.37
- @llamaindex/cohere@0.0.6
- @llamaindex/deepinfra@0.0.37
- @llamaindex/google@0.0.8
- @llamaindex/groq@0.0.52
- @llamaindex/huggingface@0.0.37
- @llamaindex/mistral@0.0.6
- @llamaindex/mixedbread@0.0.6
- @llamaindex/ollama@0.0.41
- @llamaindex/openai@0.1.53
- @llamaindex/portkey-ai@0.0.34
- @llamaindex/replicate@0.0.34
- @llamaindex/astra@0.0.6
- @llamaindex/azure@0.1.1
- @llamaindex/chroma@0.0.6
- @llamaindex/milvus@0.1.1
- @llamaindex/mongodb@0.0.6
- @llamaindex/pinecone@0.0.6
- @llamaindex/postgres@0.0.34
- @llamaindex/qdrant@0.1.1
- @llamaindex/upstash@0.0.6
- @llamaindex/weaviate@0.0.6
- @llamaindex/readers@2.0.1
- @llamaindex/workflow@0.0.11
- @llamaindex/vercel@0.0.12
- @llamaindex/vllm@0.0.23
## 0.2.0 ## 0.2.0
### Minor Changes ### Minor Changes
+83
View File
@@ -0,0 +1,83 @@
import { OpenAI } from "@llamaindex/openai";
import fs from "fs";
import {
AgentToolCall,
AgentToolCallResult,
AgentWorkflow,
FunctionAgent,
FunctionTool,
} from "llamaindex";
import os from "os";
import { z } from "zod";
import { WikipediaTool } from "../wiki";
const llm = new OpenAI({
model: "gpt-4o-mini",
});
const saveFileTool = FunctionTool.from(
({ content }: { content: string }) => {
const filePath = os.tmpdir() + "/report.md";
fs.writeFileSync(filePath, content);
return `File saved successfully at ${filePath}`;
},
{
name: "saveFile",
description:
"Save the written content into a file that can be downloaded by the user",
parameters: z.object({
content: z.string({
description: "The content to save into a file",
}),
}),
},
);
async function main() {
const reportAgent = new FunctionAgent({
name: "ReportAgent",
description:
"Responsible for crafting well-written blog posts based on research findings",
systemPrompt: `You are a professional writer. Your task is to create an engaging blog post using the research content provided. Once complete, save the post to a file using the saveFile tool.`,
tools: [saveFileTool],
llm,
});
const researchAgent = new FunctionAgent({
name: "ResearchAgent",
description:
"Responsible for gathering relevant information from the internet",
systemPrompt: `You are a research agent. Your role is to gather information from the internet using the provided tools and then transfer this information to the report agent for content creation.`,
tools: [new WikipediaTool()],
canHandoffTo: [reportAgent],
llm,
});
const workflow = new AgentWorkflow({
agents: [researchAgent, reportAgent],
rootAgent: researchAgent,
});
const context = workflow.run("Write a blog post about history of LLM");
let finalResult;
for await (const event of context) {
if (event instanceof AgentToolCall) {
console.log(
`[Agent ${event.displayName}] executing tool ${event.data.toolName} with parameters ${JSON.stringify(
event.data.toolKwargs,
)}`,
);
} else if (event instanceof AgentToolCallResult) {
console.log(
`[Agent ${event.displayName}] executed tool ${event.data.toolName} with result ${event.data.toolOutput.result}`,
);
}
finalResult = event;
}
console.log("Final result:", finalResult?.data);
}
main().catch((error) => {
console.error("Error:", error);
});
+110
View File
@@ -0,0 +1,110 @@
/**
* This example shows how to use AgentWorkflow with multiple agents
* 1. FetchWeatherAgent - Fetches the weather in a city
* 2. TemperatureConverterAgent - Converts the temperature from Fahrenheit to Celsius
*/
import { OpenAI } from "@llamaindex/openai";
import { StopEvent } from "@llamaindex/workflow";
import {
AgentInput,
AgentOutput,
AgentStream,
AgentToolCall,
AgentToolCallResult,
AgentWorkflow,
FunctionAgent,
FunctionTool,
} from "llamaindex";
import { z } from "zod";
const llm = new OpenAI({
model: "gpt-4o-mini",
});
// Define tools for the agents
const temperatureConverterTool = FunctionTool.from(
({ temperature }: { temperature: number }) => {
return ((temperature - 32) * 5) / 9;
},
{
description: "Convert a temperature from Fahrenheit to Celsius",
name: "fahrenheitToCelsius",
parameters: z.object({
temperature: z.number({
description: "The temperature in Fahrenheit",
}),
}),
},
);
const temperatureFetcherTool = FunctionTool.from(
({ city }: { city: string }) => {
const temperature = Math.floor(Math.random() * 58) + 32;
return `The current temperature in ${city} is ${temperature}°F`;
},
{
description: "Fetch the temperature (in Fahrenheit) for a city",
name: "fetchTemperature",
parameters: z.object({
city: z.string({
description: "The city to fetch the temperature for",
}),
}),
},
);
// Create agents
async function multiWeatherAgent() {
const converterAgent = new FunctionAgent({
name: "TemperatureConverterAgent",
description:
"An agent that can convert temperatures from Fahrenheit to Celsius.",
tools: [temperatureConverterTool],
llm,
});
const weatherAgent = new FunctionAgent({
name: "FetchWeatherAgent",
description: "An agent that can get the weather in a city. ",
systemPrompt:
"If you can't answer the user question, hand off to other agents.",
tools: [temperatureFetcherTool],
llm,
// Define which next agents can be called next if this agent cannot complete the task
// Can be passed as agent name, e.g. "TemperatureConverterAgent"
canHandoffTo: [converterAgent],
});
// Create agent workflow with the agents
const workflow = new AgentWorkflow({
agents: [weatherAgent, converterAgent],
rootAgent: weatherAgent,
verbose: false,
});
// Ask the agent to get the weather in a city
const context = workflow.run(
"What is the weather in San Francisco in Celsius?",
);
// Stream the events
for await (const event of context) {
// These events might be useful for UI
if (
event instanceof AgentToolCall ||
event instanceof AgentToolCallResult ||
event instanceof AgentOutput ||
event instanceof AgentInput ||
event instanceof StopEvent
) {
console.log(event);
} else if (event instanceof AgentStream) {
for (const chunk of event.data.delta) {
process.stdout.write(chunk);
}
}
}
}
multiWeatherAgent().catch((error) => {
console.error("Error:", error);
});
+37
View File
@@ -0,0 +1,37 @@
/**
* This example shows how to use AgentWorkflow as a single agent with tools
*/
import { OpenAI } from "@llamaindex/openai";
import { AgentWorkflow } from "llamaindex";
import { getWeatherTool } from "../agent/utils/tools";
const llm = new OpenAI({
model: "gpt-4o",
});
async function singleWeatherAgent() {
const workflow = AgentWorkflow.fromTools({
tools: [getWeatherTool],
llm,
verbose: false,
});
const workflowContext = workflow.run(
"What's the weather like in San Francisco?",
);
const sfResult = await workflowContext;
// The weather in San Francisco, CA is currently sunny.
console.log(`${JSON.stringify(sfResult, null, 2)}`);
// Reuse the context from the previous run
const workflowContext2 = workflow.run("Compare it with California?", {
context: workflowContext.data,
});
const caResult = await workflowContext2;
// Both San Francisco and California are currently experiencing sunny weather.
console.log(`${JSON.stringify(caResult, null, 2)}`);
}
singleWeatherAgent().catch((error) => {
console.error("Error:", error);
});
+1 -1
View File
@@ -8,7 +8,7 @@ Settings.callbackManager.on("llm-tool-call", (event) => {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet", model: "claude-3-7-sonnet",
}); });
const agent = new AnthropicAgent({ const agent = new AnthropicAgent({
+2 -2
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => { (async () => {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus", model: "claude-3-7-sonnet",
}); });
const result = await anthropic.chat({ const result = await anthropic.chat({
messages: [ messages: [
@@ -15,5 +15,5 @@ import { Anthropic } from "@llamaindex/anthropic";
}, },
], ],
}); });
console.log(result); console.log(result.message.content);
})(); })();
+1 -1
View File
@@ -6,7 +6,7 @@ import readline from "node:readline/promises";
(async () => { (async () => {
const llm = new Anthropic({ const llm = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus", model: "claude-3-7-sonnet",
}); });
// chatHistory will store all the messages in the conversation // chatHistory will store all the messages in the conversation
const chatHistory = new ChatMemoryBuffer({ const chatHistory = new ChatMemoryBuffer({
+1 -1
View File
@@ -2,7 +2,7 @@ import { Anthropic } from "@llamaindex/anthropic";
async function main() { async function main() {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
model: "claude-3-5-sonnet-20241022", model: "claude-3-7-sonnet",
}); });
const entireBook = await fetch( const entireBook = await fetch(
+1 -1
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => { (async () => {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet", model: "claude-3-7-sonnet",
}); });
const stream = await anthropic.chat({ const stream = await anthropic.chat({
messages: [ messages: [
+32
View File
@@ -0,0 +1,32 @@
import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
model: "claude-3-7-sonnet",
maxTokens: 20000,
additionalChatOptions: {
thinking: {
type: "enabled",
budget_tokens: 16000,
},
},
});
const result = await anthropic.chat({
messages: [
{
role: "user",
content:
"Are there an infinite number of prime numbers such that n mod 4 == 3?",
},
],
stream: true,
});
console.log("Thinking...");
for await (const chunk of result) {
if (chunk.delta) {
process.stdout.write(chunk.delta);
} else if (chunk.options?.thinking) {
process.stdout.write(chunk.options.thinking);
}
}
})();
+25
View File
@@ -0,0 +1,25 @@
import { LLMAgent } from "llamaindex";
import { stdin as input, stdout as output } from "node:process";
import readline from "node:readline/promises";
const agent = new LLMAgent({ tools: [] });
(async () => {
const rl = readline.createInterface({ input, output });
while (true) {
const query = await rl.question("User: ");
const startTime = Date.now();
const stream = await agent.chat({ message: query, stream: true });
const timeToGetFirstChunk = Date.now() - startTime;
process.stdout.write(
`Time to get first chunk from LLMAgent: ${timeToGetFirstChunk}ms\n`,
);
process.stdout.write("Assistant with LLMAgent: ");
for await (const chunk of stream) {
process.stdout.write(chunk.response);
}
process.stdout.write("\n");
}
})();
+4
View File
@@ -0,0 +1,4 @@
GCP_PROJECT_ID=
GCP_CREDENTIALS=
FIRESTORE_DB=
OPENAI_API_KEY=
+35
View File
@@ -0,0 +1,35 @@
# Firestore Vector Store
Here are some sample scripts which work with loading and querying data from a Firestore Vector Store.
## Prerequisites
- A Firestore Database
- Hosted https://console.firebase.google.com/
- An OpenAI API Key
## Setup
1. Set your env variables:
- `FIRESTORE_DB`: Name of your Firestore database
- `GCP_PROJECT_ID`: Your GCP project ID
- `GCP_CREDENTIALS`: Your GCP credentials JSON
- `OPENAI_API_KEY`: Your OpenAI key
2. `cd` Into the `examples` directory
3. run `npm i`
## Load the data
This sample loads the same dataset of movie reviews as sample dataset
run `npx tsx firestore/load.ts`
## Use RAG to Query the data
run `npx tsx firestore/query.ts`
## Delete the data
run `npx tsx firestore/delete.ts`
+32
View File
@@ -0,0 +1,32 @@
import { CollectionReference } from "@google-cloud/firestore";
import "dotenv/config";
import { FirestoreVectorStore } from "@llamaindex/firestore";
import { OpenAIEmbedding, Settings } from "llamaindex";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
vectorStore.delete("movie_reviews.csv");
} catch (e) {
console.error(e);
}
}
void main();
+44
View File
@@ -0,0 +1,44 @@
import { CollectionReference } from "@google-cloud/firestore";
import { CSVReader } from "@llamaindex/readers/csv";
import "dotenv/config";
import {
OpenAIEmbedding,
Settings,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import { FirestoreVectorStore } from "@llamaindex/firestore";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const reader = new CSVReader(false);
const docs = await reader.loadData("./data/movie_reviews.csv");
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
const storageContext = await storageContextFromDefaults({ vectorStore });
await VectorStoreIndex.fromDocuments(docs, { storageContext });
} catch (e) {
console.error(e);
}
}
void main();
+58
View File
@@ -0,0 +1,58 @@
import "dotenv/config";
import { OpenAIEmbedding, Settings, VectorStoreIndex } from "llamaindex";
import { CollectionReference } from "@google-cloud/firestore";
import { FirestoreVectorStore } from "@llamaindex/firestore";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
const index = await VectorStoreIndex.fromVectorStore(vectorStore);
const retriever = index.asRetriever({ similarityTopK: 20 });
const queryEngine = index.asQueryEngine({ retriever });
const query = "Get all movie titles.";
const results = await queryEngine.query({ query });
console.log(`Query from ${results.sourceNodes?.length} nodes`);
console.log(results.response);
console.log("\n=====\nQuerying the index with filters");
const queryEngineWithFilters = index.asQueryEngine({
retriever,
preFilters: {
filters: [
{
key: "file_name",
value: "movie_reviews.csv",
operator: "==",
},
],
},
});
const resultAfterFilter = await queryEngineWithFilters.query({
query: "Get all movie titles.",
});
console.log(`Query from ${resultAfterFilter.sourceNodes?.length} nodes`);
console.log(resultAfterFilter.response);
} catch (e) {
console.error(e);
}
}
void main();
+1 -1
View File
@@ -1,7 +1,7 @@
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai"; import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
(async () => { (async () => {
const llm = new OpenAI({ model: "gpt-4-1106-preview", temperature: 0.1 }); const llm = new OpenAI({ model: "gpt-4.5-preview", temperature: 0.1 });
// complete api // complete api
const response1 = await llm.complete({ prompt: "How are you?" }); const response1 = await llm.complete({ prompt: "How are you?" });
+37 -33
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/examples", "name": "@llamaindex/examples",
"version": "0.2.0", "version": "0.2.6",
"private": true, "private": true,
"scripts": { "scripts": {
"lint": "eslint .", "lint": "eslint .",
@@ -11,36 +11,39 @@
"@azure/cosmos": "^4.1.1", "@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1", "@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0", "@azure/search-documents": "^12.1.0",
"@llamaindex/anthropic": "^0.1.0", "@llamaindex/anthropic": "^0.2.4",
"@llamaindex/astra": "^0.0.5", "@llamaindex/astra": "^0.0.11",
"@llamaindex/azure": "^0.1.0", "@llamaindex/azure": "^0.1.6",
"@llamaindex/chroma": "^0.0.5", "@llamaindex/chroma": "^0.0.11",
"@llamaindex/clip": "^0.0.36", "@llamaindex/clip": "^0.0.42",
"@llamaindex/cloud": "^3.0.0", "@llamaindex/cloud": "^3.0.7",
"@llamaindex/cohere": "^0.0.5", "@llamaindex/cohere": "^0.0.11",
"@llamaindex/deepinfra": "^0.0.36", "@llamaindex/core": "^0.5.6",
"@llamaindex/env": "^0.1.27", "@llamaindex/deepinfra": "^0.0.42",
"@llamaindex/google": "^0.0.7", "@llamaindex/env": "^0.1.29",
"@llamaindex/groq": "^0.0.51", "@llamaindex/firestore": "^1.0.4",
"@llamaindex/huggingface": "^0.0.36", "@llamaindex/google": "^0.0.13",
"@llamaindex/milvus": "^0.1.0", "@llamaindex/groq": "^0.0.57",
"@llamaindex/mistral": "^0.0.5", "@llamaindex/huggingface": "^0.0.42",
"@llamaindex/mixedbread": "^0.0.5", "@llamaindex/milvus": "^0.1.6",
"@llamaindex/mongodb": "^0.0.5", "@llamaindex/mistral": "^0.0.11",
"@llamaindex/node-parser": "^1.0.0", "@llamaindex/mixedbread": "^0.0.11",
"@llamaindex/ollama": "^0.0.40", "@llamaindex/mongodb": "^0.0.11",
"@llamaindex/openai": "^0.1.52", "@llamaindex/node-parser": "^1.0.6",
"@llamaindex/pinecone": "^0.0.5", "@llamaindex/ollama": "^0.0.46",
"@llamaindex/portkey-ai": "^0.0.33", "@llamaindex/openai": "^0.1.58",
"@llamaindex/postgres": "^0.0.33", "@llamaindex/pinecone": "^0.0.11",
"@llamaindex/qdrant": "^0.1.0", "@llamaindex/portkey-ai": "^0.0.39",
"@llamaindex/readers": "^2.0.0", "@llamaindex/postgres": "^0.0.39",
"@llamaindex/replicate": "^0.0.33", "@llamaindex/qdrant": "^0.1.6",
"@llamaindex/upstash": "^0.0.5", "@llamaindex/readers": "^2.0.6",
"@llamaindex/vercel": "^0.0.11", "@llamaindex/replicate": "^0.0.39",
"@llamaindex/vllm": "^0.0.22", "@llamaindex/upstash": "^0.0.11",
"@llamaindex/weaviate": "^0.0.5", "@llamaindex/vercel": "^0.0.17",
"@llamaindex/workflow": "^0.0.10", "@llamaindex/vllm": "^0.0.28",
"@llamaindex/voyage-ai": "^1.0.3",
"@llamaindex/weaviate": "^0.0.11",
"@llamaindex/workflow": "^0.0.13",
"@notionhq/client": "^2.2.15", "@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^4.0.0", "@pinecone-database/pinecone": "^4.0.0",
"@vercel/postgres": "^0.10.0", "@vercel/postgres": "^0.10.0",
@@ -49,10 +52,11 @@
"commander": "^12.1.0", "commander": "^12.1.0",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14", "js-tiktoken": "^1.0.14",
"llamaindex": "^0.9.0", "llamaindex": "^0.9.7",
"mongodb": "6.7.0", "mongodb": "6.7.0",
"postgres": "^3.4.4", "postgres": "^3.4.4",
"wikipedia": "^2.1.2" "wikipedia": "^2.1.2",
"zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
+12 -2
View File
@@ -3,6 +3,18 @@ import fs from "node:fs/promises";
import { createInterface } from "node:readline/promises"; import { createInterface } from "node:readline/promises";
async function main() { async function main() {
const rl = createInterface({ input: process.stdin, output: process.stdout });
if (!process.env.OPENAI_API_KEY) {
console.log("OpenAI API key not found in environment variables.");
console.log(
"You can get an API key at https://platform.openai.com/account/api-keys",
);
process.env.OPENAI_API_KEY = await rl.question(
"Please enter your OpenAI API key: ",
);
}
const path = "node_modules/llamaindex/examples/abramov.txt"; const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8"); const essay = await fs.readFile(path, "utf-8");
const document = new Document({ text: essay, id_: path }); const document = new Document({ text: essay, id_: path });
@@ -10,8 +22,6 @@ async function main() {
const index = await VectorStoreIndex.fromDocuments([document]); const index = await VectorStoreIndex.fromDocuments([document]);
const queryEngine = index.asQueryEngine(); const queryEngine = index.asQueryEngine();
const rl = createInterface({ input: process.stdin, output: process.stdout });
console.log( console.log(
"Try asking a question about the essay: https://github.com/run-llama/LlamaIndexTS/blob/main/packages/llamaindex/examples/abramov.txt", "Try asking a question about the essay: https://github.com/run-llama/LlamaIndexTS/blob/main/packages/llamaindex/examples/abramov.txt",
"\nExample: When did the author graduate from high school?", "\nExample: When did the author graduate from high school?",
+1 -1
View File
@@ -15,7 +15,7 @@ async function main() {
tools: [ tools: [
{ {
metadata: { metadata: {
name: "wikipedia_tool", name: "wikipedia_search",
description: "A tool that uses a query engine to search Wikipedia.", description: "A tool that uses a query engine to search Wikipedia.",
parameters: { parameters: {
type: "object", type: "object",
+17
View File
@@ -0,0 +1,17 @@
import { VoyageAIEmbedding } from "@llamaindex/voyage-ai";
async function main() {
// API token can be provided as an environment variable too
// using VOYAGE_API_TOKEN variable
const apiKey = process.env.VOYAGE_API_TOKEN ?? "YOUR_API_TOKEN";
const model = "voyage-3-lite";
const embedModel = new VoyageAIEmbedding({
model,
apiKey,
});
const texts = ["hello", "world"];
const embeddings = await embedModel.getTextEmbeddingsBatch(texts);
console.log(`\nWe have ${embeddings.length} embeddings`);
}
main().catch(console.error);
+1 -1
View File
@@ -14,7 +14,7 @@ type WikipediaToolParams = {
}; };
const DEFAULT_META_DATA: ToolMetadata<JSONSchemaType<WikipediaParameter>> = { const DEFAULT_META_DATA: ToolMetadata<JSONSchemaType<WikipediaParameter>> = {
name: "wikipedia_tool", name: "wikipedia_search",
description: "A tool that uses a query engine to search Wikipedia.", description: "A tool that uses a query engine to search Wikipedia.",
parameters: { parameters: {
type: "object", type: "object",
+5
View File
@@ -43,5 +43,10 @@
"eslint" "eslint"
], ],
"*.{json,md}": "prettier --check" "*.{json,md}": "prettier --check"
},
"pnpm": {
"patchedDependencies": {
"bunchee@6.3.4": "patches/bunchee@6.3.4.patch"
}
} }
} }
+46
View File
@@ -1,5 +1,51 @@
# @llamaindex/autotool # @llamaindex/autotool
## 6.0.7
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
## 6.0.6
### Patch Changes
- llamaindex@0.9.6
## 6.0.5
### Patch Changes
- llamaindex@0.9.5
## 6.0.4
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 6.0.3
### Patch Changes
- llamaindex@0.9.3
## 6.0.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 6.0.1
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 6.0.0 ## 6.0.0
### Patch Changes ### Patch Changes
@@ -1,5 +1,58 @@
# @llamaindex/autotool-01-node-example # @llamaindex/autotool-01-node-example
## 0.0.88
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
- @llamaindex/autotool@6.0.7
## 0.0.87
### Patch Changes
- llamaindex@0.9.6
- @llamaindex/autotool@6.0.6
## 0.0.86
### Patch Changes
- llamaindex@0.9.5
- @llamaindex/autotool@6.0.5
## 0.0.85
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
- @llamaindex/autotool@6.0.4
## 0.0.84
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/autotool@6.0.3
## 0.0.83
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
- @llamaindex/autotool@6.0.2
## 0.0.82
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
- @llamaindex/autotool@6.0.1
## 0.0.81 ## 0.0.81
### Patch Changes ### Patch Changes
@@ -13,5 +13,5 @@
"scripts": { "scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts" "start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
}, },
"version": "0.0.81" "version": "0.0.88"
} }
@@ -1,5 +1,58 @@
# @llamaindex/autotool-02-next-example # @llamaindex/autotool-02-next-example
## 0.1.132
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
- @llamaindex/autotool@6.0.7
## 0.1.131
### Patch Changes
- llamaindex@0.9.6
- @llamaindex/autotool@6.0.6
## 0.1.130
### Patch Changes
- llamaindex@0.9.5
- @llamaindex/autotool@6.0.5
## 0.1.129
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
- @llamaindex/autotool@6.0.4
## 0.1.128
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/autotool@6.0.3
## 0.1.127
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
- @llamaindex/autotool@6.0.2
## 0.1.126
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
- @llamaindex/autotool@6.0.1
## 0.1.125 ## 0.1.125
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/autotool-02-next-example", "name": "@llamaindex/autotool-02-next-example",
"private": true, "private": true,
"version": "0.1.125", "version": "0.1.132",
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
@@ -15,7 +15,7 @@
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"lucide-react": "^0.460.0", "lucide-react": "^0.460.0",
"next": "15.0.3", "next": "15.1.7",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-markdown": "^9.0.1", "react-markdown": "^9.0.1",
+3 -3
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git", "url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool" "directory": "packages/autotool"
}, },
"version": "6.0.0", "version": "6.0.7",
"description": "auto transpile your JS function to LLM Agent compatible", "description": "auto transpile your JS function to LLM Agent compatible",
"files": [ "files": [
"dist", "dist",
@@ -75,9 +75,9 @@
"@swc/types": "^0.1.12", "@swc/types": "^0.1.12",
"@types/json-schema": "^7.0.15", "@types/json-schema": "^7.0.15",
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"bunchee": "6.2.0", "bunchee": "6.3.4",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"rollup": "^4.28.1", "rollup": "^4.28.1",
"tsx": "^4.19.0", "tsx": "^4.19.0",
"typescript": "^5.7.2", "typescript": "^5.7.2",
+50
View File
@@ -1,5 +1,55 @@
# @llamaindex/cloud # @llamaindex/cloud
## 3.0.7
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
## 3.0.6
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
## 3.0.5
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
## 3.0.4
### Patch Changes
- Updated dependencies [cb021e7]
- @llamaindex/core@0.5.3
## 3.0.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 3.0.2
### Patch Changes
- c902fcb: chore: bump llamacloud openapi
## 3.0.1
### Patch Changes
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
- @llamaindex/core@0.5.1
## 3.0.0 ## 3.0.0
### Patch Changes ### Patch Changes
+4290 -1580
View File
File diff suppressed because it is too large Load Diff
+5 -14
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloud", "name": "@llamaindex/cloud",
"version": "3.0.0", "version": "3.0.7",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
@@ -24,10 +24,7 @@
"types": "./api/dist/index.d.ts", "types": "./api/dist/index.d.ts",
"default": "./api/dist/index.js" "default": "./api/dist/index.js"
}, },
"default": { "default": "./api/dist/index.js"
"types": "./api/dist/index.d.ts",
"default": "./api/dist/index.js"
}
}, },
"./reader": { "./reader": {
"require": { "require": {
@@ -38,10 +35,7 @@
"types": "./reader/dist/index.d.ts", "types": "./reader/dist/index.d.ts",
"default": "./reader/dist/index.js" "default": "./reader/dist/index.js"
}, },
"default": { "default": "./reader/dist/index.js"
"types": "./reader/dist/index.d.ts",
"default": "./reader/dist/index.js"
}
}, },
".": { ".": {
"require": { "require": {
@@ -52,10 +46,7 @@
"types": "./reader/dist/index.d.ts", "types": "./reader/dist/index.d.ts",
"default": "./reader/dist/index.js" "default": "./reader/dist/index.js"
}, },
"default": { "default": "./reader/dist/index.js"
"types": "./reader/dist/index.d.ts",
"default": "./reader/dist/index.js"
}
} }
}, },
"repository": { "repository": {
@@ -68,7 +59,7 @@
"@hey-api/openapi-ts": "^0.61.0", "@hey-api/openapi-ts": "^0.61.0",
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"bunchee": "6.2.0" "bunchee": "6.3.4"
}, },
"peerDependencies": { "peerDependencies": {
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
+44
View File
@@ -4,6 +4,7 @@ import { fs, getEnv, path } from "@llamaindex/env";
import { import {
type Body_upload_file_api_v1_parsing_upload_post, type Body_upload_file_api_v1_parsing_upload_post,
type ParserLanguages, type ParserLanguages,
type ParsingMode,
getJobApiV1ParsingJobJobIdGet, getJobApiV1ParsingJobJobIdGet,
getJobImageResultApiV1ParsingJobJobIdResultImageNameGet, getJobImageResultApiV1ParsingJobJobIdResultImageNameGet,
getJobJsonResultApiV1ParsingJobJobIdResultJsonGet, getJobJsonResultApiV1ParsingJobJobIdResultJsonGet,
@@ -127,6 +128,26 @@ export class LlamaParseReader extends FileReader {
readonly #client: Client; readonly #client: Client;
output_tables_as_HTML: boolean = false;
input_s3_region?: string | undefined;
output_s3_region?: string | undefined;
preserve_layout_alignment_across_pages?: boolean | undefined;
spreadsheet_extract_sub_tables?: boolean | undefined;
formatting_instruction?: string | undefined;
parse_mode?: ParsingMode | undefined;
system_prompt?: string | undefined;
system_prompt_append?: string | undefined;
user_prompt?: string | undefined;
job_timeout_in_seconds?: number | undefined;
job_timeout_extra_time_per_page_in_seconds?: number | undefined;
strict_mode_image_extraction?: boolean | undefined;
strict_mode_image_ocr?: boolean | undefined;
strict_mode_reconstruction?: boolean | undefined;
strict_mode_buggy_font?: boolean | undefined;
ignore_document_elements_for_layout_detection?: boolean | undefined;
complemental_formatting_instruction?: string | undefined;
content_guideline_instruction?: string | undefined;
constructor( constructor(
params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & { params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & {
language?: ParserLanguages | ParserLanguages[] | undefined; language?: ParserLanguages | ParserLanguages[] | undefined;
@@ -252,6 +273,29 @@ export class LlamaParseReader extends FileReader {
structured_output_json_schema_name: structured_output_json_schema_name:
this.structured_output_json_schema_name, this.structured_output_json_schema_name,
extract_layout: this.extract_layout, extract_layout: this.extract_layout,
output_tables_as_HTML: this.output_tables_as_HTML,
input_s3_region: this.input_s3_region,
output_s3_region: this.output_s3_region,
preserve_layout_alignment_across_pages:
this.preserve_layout_alignment_across_pages,
spreadsheet_extract_sub_tables: this.spreadsheet_extract_sub_tables,
formatting_instruction: this.formatting_instruction,
parse_mode: this.parse_mode,
system_prompt: this.system_prompt,
system_prompt_append: this.system_prompt_append,
user_prompt: this.user_prompt,
job_timeout_in_seconds: this.job_timeout_in_seconds,
job_timeout_extra_time_per_page_in_seconds:
this.job_timeout_extra_time_per_page_in_seconds,
strict_mode_image_extraction: this.strict_mode_image_extraction,
strict_mode_image_ocr: this.strict_mode_image_ocr,
strict_mode_reconstruction: this.strict_mode_reconstruction,
strict_mode_buggy_font: this.strict_mode_buggy_font,
ignore_document_elements_for_layout_detection:
this.ignore_document_elements_for_layout_detection,
complemental_formatting_instruction:
this.complemental_formatting_instruction,
content_guideline_instruction: this.content_guideline_instruction,
} satisfies { } satisfies {
[Key in keyof Body_upload_file_api_v1_parsing_upload_post]-?: [Key in keyof Body_upload_file_api_v1_parsing_upload_post]-?:
| Body_upload_file_api_v1_parsing_upload_post[Key] | Body_upload_file_api_v1_parsing_upload_post[Key]
+46
View File
@@ -1,5 +1,51 @@
# @llamaindex/community # @llamaindex/community
## 0.0.88
### Patch Changes
- e28c29d: Added Llama 3.3 70B Instruct support
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
## 0.0.87
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
## 0.0.86
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
## 0.0.85
### Patch Changes
- 1914b52: Added Claude 3.7 Sonnet support
- Updated dependencies [cb021e7]
- @llamaindex/core@0.5.3
## 0.0.84
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.83
### Patch Changes
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
- @llamaindex/core@0.5.1
## 0.0.82 ## 0.0.82
### Patch Changes ### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/community", "name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS", "description": "Community package for LlamaIndexTS",
"version": "0.0.82", "version": "0.0.88",
"type": "module", "type": "module",
"types": "dist/type/index.d.ts", "types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js", "main": "dist/cjs/index.js",
@@ -43,7 +43,7 @@
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"bunchee": "6.2.0" "bunchee": "6.3.4"
}, },
"dependencies": { "dependencies": {
"@aws-sdk/client-bedrock-agent-runtime": "^3.706.0", "@aws-sdk/client-bedrock-agent-runtime": "^3.706.0",
@@ -6,7 +6,19 @@ export type ToolChoice =
| { type: "auto" } | { type: "auto" }
| { type: "tool"; name: string }; | { type: "tool"; name: string };
export type AnthropicAdditionalChatOptions = { toolChoice: ToolChoice }; export interface ThinkingConfigDisabled {
type: "disabled";
}
export interface ThinkingConfigEnabled {
budget_tokens: number;
type: "enabled";
}
export type AnthropicAdditionalChatOptions = {
toolChoice: ToolChoice;
thinking?: ThinkingConfigDisabled | ThinkingConfigEnabled;
};
type Usage = { type Usage = {
input_tokens: number; input_tokens: number;
@@ -69,6 +69,7 @@ export const BEDROCK_MODELS = {
ANTHROPIC_CLAUDE_3_5_SONNET: "anthropic.claude-3-5-sonnet-20240620-v1:0", ANTHROPIC_CLAUDE_3_5_SONNET: "anthropic.claude-3-5-sonnet-20240620-v1:0",
ANTHROPIC_CLAUDE_3_5_SONNET_V2: "anthropic.claude-3-5-sonnet-20241022-v2:0", ANTHROPIC_CLAUDE_3_5_SONNET_V2: "anthropic.claude-3-5-sonnet-20241022-v2:0",
ANTHROPIC_CLAUDE_3_5_HAIKU: "anthropic.claude-3-5-haiku-20241022-v1:0", ANTHROPIC_CLAUDE_3_5_HAIKU: "anthropic.claude-3-5-haiku-20241022-v1:0",
ANTHROPIC_CLAUDE_3_7_SONNET: "anthropic.claude-3-7-sonnet-20250219-v1:0",
META_LLAMA2_13B_CHAT: "meta.llama2-13b-chat-v1", META_LLAMA2_13B_CHAT: "meta.llama2-13b-chat-v1",
META_LLAMA2_70B_CHAT: "meta.llama2-70b-chat-v1", META_LLAMA2_70B_CHAT: "meta.llama2-70b-chat-v1",
META_LLAMA3_8B_INSTRUCT: "meta.llama3-8b-instruct-v1:0", META_LLAMA3_8B_INSTRUCT: "meta.llama3-8b-instruct-v1:0",
@@ -80,6 +81,7 @@ export const BEDROCK_MODELS = {
META_LLAMA3_2_3B_INSTRUCT: "meta.llama3-2-3b-instruct-v1:0", META_LLAMA3_2_3B_INSTRUCT: "meta.llama3-2-3b-instruct-v1:0",
META_LLAMA3_2_11B_INSTRUCT: "meta.llama3-2-11b-instruct-v1:0", META_LLAMA3_2_11B_INSTRUCT: "meta.llama3-2-11b-instruct-v1:0",
META_LLAMA3_2_90B_INSTRUCT: "meta.llama3-2-90b-instruct-v1:0", META_LLAMA3_2_90B_INSTRUCT: "meta.llama3-2-90b-instruct-v1:0",
META_LLAMA3_3_70B_INSTRUCT: "meta.llama3-3-70b-instruct-v1:0",
MISTRAL_7B_INSTRUCT: "mistral.mistral-7b-instruct-v0:2", MISTRAL_7B_INSTRUCT: "mistral.mistral-7b-instruct-v0:2",
MISTRAL_MIXTRAL_7B_INSTRUCT: "mistral.mixtral-8x7b-instruct-v0:1", MISTRAL_MIXTRAL_7B_INSTRUCT: "mistral.mixtral-8x7b-instruct-v0:1",
MISTRAL_MIXTRAL_LARGE_2402: "mistral.mistral-large-2402-v1:0", MISTRAL_MIXTRAL_LARGE_2402: "mistral.mistral-large-2402-v1:0",
@@ -100,10 +102,13 @@ export const INFERENCE_BEDROCK_MODELS = {
"us.anthropic.claude-3-5-sonnet-20240620-v1:0", "us.anthropic.claude-3-5-sonnet-20240620-v1:0",
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2: US_ANTHROPIC_CLAUDE_3_5_SONNET_V2:
"us.anthropic.claude-3-5-sonnet-20241022-v2:0", "us.anthropic.claude-3-5-sonnet-20241022-v2:0",
US_ANTHROPIC_CLAUDE_3_7_SONNET:
"us.anthropic.claude-3-7-sonnet-20250219-v1:0",
US_META_LLAMA_3_2_1B_INSTRUCT: "us.meta.llama3-2-1b-instruct-v1:0", US_META_LLAMA_3_2_1B_INSTRUCT: "us.meta.llama3-2-1b-instruct-v1:0",
US_META_LLAMA_3_2_3B_INSTRUCT: "us.meta.llama3-2-3b-instruct-v1:0", US_META_LLAMA_3_2_3B_INSTRUCT: "us.meta.llama3-2-3b-instruct-v1:0",
US_META_LLAMA_3_2_11B_INSTRUCT: "us.meta.llama3-2-11b-instruct-v1:0", US_META_LLAMA_3_2_11B_INSTRUCT: "us.meta.llama3-2-11b-instruct-v1:0",
US_META_LLAMA_3_2_90B_INSTRUCT: "us.meta.llama3-2-90b-instruct-v1:0", US_META_LLAMA_3_2_90B_INSTRUCT: "us.meta.llama3-2-90b-instruct-v1:0",
US_META_LLAMA_3_3_70B_INSTRUCT: "us.meta.llama3-3-70b-instruct-v1:0",
US_AMAZON_NOVA_PRO_1: "us.amazon.nova-pro-v1:0", US_AMAZON_NOVA_PRO_1: "us.amazon.nova-pro-v1:0",
US_AMAZON_NOVA_LITE_1: "us.amazon.nova-lite-v1:0", US_AMAZON_NOVA_LITE_1: "us.amazon.nova-lite-v1:0",
US_AMAZON_NOVA_MICRO_1: "us.amazon.nova-micro-v1:0", US_AMAZON_NOVA_MICRO_1: "us.amazon.nova-micro-v1:0",
@@ -113,6 +118,8 @@ export const INFERENCE_BEDROCK_MODELS = {
EU_ANTHROPIC_CLAUDE_3_SONNET: "eu.anthropic.claude-3-sonnet-20240229-v1:0", EU_ANTHROPIC_CLAUDE_3_SONNET: "eu.anthropic.claude-3-sonnet-20240229-v1:0",
EU_ANTHROPIC_CLAUDE_3_5_SONNET: EU_ANTHROPIC_CLAUDE_3_5_SONNET:
"eu.anthropic.claude-3-5-sonnet-20240620-v1:0", "eu.anthropic.claude-3-5-sonnet-20240620-v1:0",
EU_ANTHROPIC_CLAUDE_3_7_SONNET:
"eu.anthropic.claude-3-7-sonnet-20250219-v1:0",
EU_META_LLAMA_3_2_1B_INSTRUCT: "eu.meta.llama3-2-1b-instruct-v1:0", EU_META_LLAMA_3_2_1B_INSTRUCT: "eu.meta.llama3-2-1b-instruct-v1:0",
EU_META_LLAMA_3_2_3B_INSTRUCT: "eu.meta.llama3-2-3b-instruct-v1:0", EU_META_LLAMA_3_2_3B_INSTRUCT: "eu.meta.llama3-2-3b-instruct-v1:0",
}; };
@@ -132,6 +139,8 @@ export const INFERENCE_TO_BEDROCK_MAP: Record<
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET]: [INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_7_SONNET]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET_V2]: [INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET_V2]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_HAIKU]: [INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_HAIKU]:
@@ -144,6 +153,8 @@ export const INFERENCE_TO_BEDROCK_MAP: Record<
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_90B_INSTRUCT]: [INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_90B_INSTRUCT]:
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_3_70B_INSTRUCT]:
BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT,
[INFERENCE_BEDROCK_MODELS.US_AMAZON_NOVA_PRO_1]: [INFERENCE_BEDROCK_MODELS.US_AMAZON_NOVA_PRO_1]:
BEDROCK_MODELS.AMAZON_NOVA_PRO_1, BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
@@ -158,6 +169,8 @@ export const INFERENCE_TO_BEDROCK_MAP: Record<
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
[INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_5_SONNET]: [INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_5_SONNET]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
[INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_7_SONNET]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
[INFERENCE_BEDROCK_MODELS.EU_META_LLAMA_3_2_1B_INSTRUCT]: [INFERENCE_BEDROCK_MODELS.EU_META_LLAMA_3_2_1B_INSTRUCT]:
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
[INFERENCE_BEDROCK_MODELS.EU_META_LLAMA_3_2_3B_INSTRUCT]: [INFERENCE_BEDROCK_MODELS.EU_META_LLAMA_3_2_3B_INSTRUCT]:
@@ -191,6 +204,7 @@ const CHAT_ONLY_MODELS = {
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 200000, [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 200000,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 200000, [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 200000,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU]: 200000, [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU]: 200000,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET]: 200000,
[BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048, [BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048,
[BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 4096, [BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 4096,
[BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 8192, [BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 8192,
@@ -202,6 +216,7 @@ const CHAT_ONLY_MODELS = {
[BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT]: 131000, [BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT]: 131000,
[BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT]: 128000, [BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT]: 128000,
[BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT]: 128000, [BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT]: 128000,
[BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT]: 128000,
[BEDROCK_MODELS.MISTRAL_7B_INSTRUCT]: 32000, [BEDROCK_MODELS.MISTRAL_7B_INSTRUCT]: 32000,
[BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT]: 32000, [BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT]: 32000,
[BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402]: 32000, [BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402]: 32000,
@@ -230,6 +245,7 @@ export const STREAMING_MODELS = new Set([
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
BEDROCK_MODELS.META_LLAMA2_13B_CHAT, BEDROCK_MODELS.META_LLAMA2_13B_CHAT,
BEDROCK_MODELS.META_LLAMA2_70B_CHAT, BEDROCK_MODELS.META_LLAMA2_70B_CHAT,
BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT,
@@ -241,6 +257,7 @@ export const STREAMING_MODELS = new Set([
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT,
BEDROCK_MODELS.MISTRAL_7B_INSTRUCT, BEDROCK_MODELS.MISTRAL_7B_INSTRUCT,
BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT, BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT,
BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402, BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402,
@@ -256,11 +273,13 @@ export const TOOL_CALL_MODELS: BEDROCK_MODELS[] = [
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU, BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT, BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT,
BEDROCK_MODELS.AMAZON_NOVA_PRO_1, BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
BEDROCK_MODELS.AMAZON_NOVA_LITE_1, BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1, BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
@@ -294,6 +313,7 @@ export const BEDROCK_MODEL_MAX_TOKENS: Partial<Record<BEDROCK_MODELS, number>> =
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 4096, [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 4096,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 8192, [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 8192,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU]: 8192, [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU]: 8192,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET]: 8192,
[BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048, [BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048,
[BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 2048, [BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 2048,
[BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 2048, [BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 2048,
@@ -305,6 +325,7 @@ export const BEDROCK_MODEL_MAX_TOKENS: Partial<Record<BEDROCK_MODELS, number>> =
[BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT]: 2048, [BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT]: 2048,
[BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT]: 2048, [BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT]: 2048,
[BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT]: 2048, [BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT]: 2048,
[BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT]: 2048,
}; };
const DEFAULT_BEDROCK_PARAMS = { const DEFAULT_BEDROCK_PARAMS = {
+39
View File
@@ -1,5 +1,44 @@
# @llamaindex/core # @llamaindex/core
## 0.5.6
### Patch Changes
- beb922b: Fix edge runtime builds by adding missing packages to env package. Make gpt-tokenizer optional for llamaindex to reduce package size.
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
## 0.5.5
### Patch Changes
- 5668970: feat: Support AgentWorkflow
## 0.5.4
### Patch Changes
- ad3c7f1: fix: streaming issues with LLMAgent
## 0.5.3
### Patch Changes
- cb021e7: feat(node-parser): support async function
## 0.5.2
### Patch Changes
- d952e68: Refine synthesizer will now return an empty string as the response if an empty array of source nodes were provided. Before it would throw an internal error converting undefined to ReadableStream.
## 0.5.1
### Patch Changes
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
## 0.5.0 ## 0.5.0
### Minor Changes ### Minor Changes
+27 -102
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/core", "name": "@llamaindex/core",
"type": "module", "type": "module",
"version": "0.5.0", "version": "0.5.6",
"description": "LlamaIndex Core Module", "description": "LlamaIndex Core Module",
"exports": { "exports": {
"./agent": { "./agent": {
@@ -13,10 +13,7 @@
"types": "./agent/dist/index.d.ts", "types": "./agent/dist/index.d.ts",
"default": "./agent/dist/index.js" "default": "./agent/dist/index.js"
}, },
"default": { "default": "./agent/dist/index.js"
"types": "./agent/dist/index.d.ts",
"default": "./agent/dist/index.js"
}
}, },
"./objects": { "./objects": {
"require": { "require": {
@@ -27,10 +24,7 @@
"types": "./objects/dist/index.d.ts", "types": "./objects/dist/index.d.ts",
"default": "./objects/dist/index.js" "default": "./objects/dist/index.js"
}, },
"default": { "default": "./objects/dist/index.js"
"types": "./objects/dist/index.d.ts",
"default": "./objects/dist/index.js"
}
}, },
"./node-parser": { "./node-parser": {
"require": { "require": {
@@ -41,10 +35,7 @@
"types": "./node-parser/dist/index.d.ts", "types": "./node-parser/dist/index.d.ts",
"default": "./node-parser/dist/index.js" "default": "./node-parser/dist/index.js"
}, },
"default": { "default": "./node-parser/dist/index.js"
"types": "./node-parser/dist/index.d.ts",
"default": "./node-parser/dist/index.js"
}
}, },
"./query-engine": { "./query-engine": {
"require": { "require": {
@@ -55,10 +46,7 @@
"types": "./query-engine/dist/index.d.ts", "types": "./query-engine/dist/index.d.ts",
"default": "./query-engine/dist/index.js" "default": "./query-engine/dist/index.js"
}, },
"default": { "default": "./query-engine/dist/index.js"
"types": "./query-engine/dist/index.d.ts",
"default": "./query-engine/dist/index.js"
}
}, },
"./llms": { "./llms": {
"require": { "require": {
@@ -69,10 +57,7 @@
"types": "./llms/dist/index.d.ts", "types": "./llms/dist/index.d.ts",
"default": "./llms/dist/index.js" "default": "./llms/dist/index.js"
}, },
"default": { "default": "./llms/dist/index.js"
"types": "./llms/dist/index.d.ts",
"default": "./llms/dist/index.js"
}
}, },
"./decorator": { "./decorator": {
"require": { "require": {
@@ -83,10 +68,7 @@
"types": "./decorator/dist/index.d.ts", "types": "./decorator/dist/index.d.ts",
"default": "./decorator/dist/index.js" "default": "./decorator/dist/index.js"
}, },
"default": { "default": "./decorator/dist/index.js"
"types": "./decorator/dist/index.d.ts",
"default": "./decorator/dist/index.js"
}
}, },
"./embeddings": { "./embeddings": {
"require": { "require": {
@@ -97,10 +79,7 @@
"types": "./embeddings/dist/index.d.ts", "types": "./embeddings/dist/index.d.ts",
"default": "./embeddings/dist/index.js" "default": "./embeddings/dist/index.js"
}, },
"default": { "default": "./embeddings/dist/index.js"
"types": "./embeddings/dist/index.d.ts",
"default": "./embeddings/dist/index.js"
}
}, },
"./global": { "./global": {
"require": { "require": {
@@ -111,10 +90,7 @@
"types": "./global/dist/index.d.ts", "types": "./global/dist/index.d.ts",
"default": "./global/dist/index.js" "default": "./global/dist/index.js"
}, },
"default": { "default": "./global/dist/index.js"
"types": "./global/dist/index.d.ts",
"default": "./global/dist/index.js"
}
}, },
"./schema": { "./schema": {
"require": { "require": {
@@ -125,10 +101,7 @@
"types": "./schema/dist/index.d.ts", "types": "./schema/dist/index.d.ts",
"default": "./schema/dist/index.js" "default": "./schema/dist/index.js"
}, },
"default": { "default": "./schema/dist/index.js"
"types": "./schema/dist/index.d.ts",
"default": "./schema/dist/index.js"
}
}, },
"./utils": { "./utils": {
"require": { "require": {
@@ -139,10 +112,7 @@
"types": "./utils/dist/index.d.ts", "types": "./utils/dist/index.d.ts",
"default": "./utils/dist/index.js" "default": "./utils/dist/index.js"
}, },
"default": { "default": "./utils/dist/index.js"
"types": "./utils/dist/index.d.ts",
"default": "./utils/dist/index.js"
}
}, },
"./prompts": { "./prompts": {
"require": { "require": {
@@ -153,10 +123,7 @@
"types": "./prompts/dist/index.d.ts", "types": "./prompts/dist/index.d.ts",
"default": "./prompts/dist/index.js" "default": "./prompts/dist/index.js"
}, },
"default": { "default": "./prompts/dist/index.js"
"types": "./prompts/dist/index.d.ts",
"default": "./prompts/dist/index.js"
}
}, },
"./indices": { "./indices": {
"require": { "require": {
@@ -167,10 +134,7 @@
"types": "./indices/dist/index.d.ts", "types": "./indices/dist/index.d.ts",
"default": "./indices/dist/index.js" "default": "./indices/dist/index.js"
}, },
"default": { "default": "./indices/dist/index.js"
"types": "./indices/dist/index.d.ts",
"default": "./indices/dist/index.js"
}
}, },
"./workflow": { "./workflow": {
"require": { "require": {
@@ -181,10 +145,7 @@
"types": "./workflow/dist/index.d.ts", "types": "./workflow/dist/index.d.ts",
"default": "./workflow/dist/index.js" "default": "./workflow/dist/index.js"
}, },
"default": { "default": "./workflow/dist/index.js"
"types": "./workflow/dist/index.d.ts",
"default": "./workflow/dist/index.js"
}
}, },
"./memory": { "./memory": {
"require": { "require": {
@@ -195,10 +156,7 @@
"types": "./memory/dist/index.d.ts", "types": "./memory/dist/index.d.ts",
"default": "./memory/dist/index.js" "default": "./memory/dist/index.js"
}, },
"default": { "default": "./memory/dist/index.js"
"types": "./memory/dist/index.d.ts",
"default": "./memory/dist/index.js"
}
}, },
"./storage/chat-store": { "./storage/chat-store": {
"require": { "require": {
@@ -209,10 +167,7 @@
"types": "./storage/chat-store/dist/index.d.ts", "types": "./storage/chat-store/dist/index.d.ts",
"default": "./storage/chat-store/dist/index.js" "default": "./storage/chat-store/dist/index.js"
}, },
"default": { "default": "./storage/chat-store/dist/index.js"
"types": "./storage/chat-store/dist/index.d.ts",
"default": "./storage/chat-store/dist/index.js"
}
}, },
"./storage/doc-store": { "./storage/doc-store": {
"require": { "require": {
@@ -223,10 +178,7 @@
"types": "./storage/doc-store/dist/index.d.ts", "types": "./storage/doc-store/dist/index.d.ts",
"default": "./storage/doc-store/dist/index.js" "default": "./storage/doc-store/dist/index.js"
}, },
"default": { "default": "./storage/doc-store/dist/index.js"
"types": "./storage/doc-store/dist/index.d.ts",
"default": "./storage/doc-store/dist/index.js"
}
}, },
"./storage/index-store": { "./storage/index-store": {
"require": { "require": {
@@ -237,10 +189,7 @@
"types": "./storage/index-store/dist/index.d.ts", "types": "./storage/index-store/dist/index.d.ts",
"default": "./storage/index-store/dist/index.js" "default": "./storage/index-store/dist/index.js"
}, },
"default": { "default": "./storage/index-store/dist/index.js"
"types": "./storage/index-store/dist/index.d.ts",
"default": "./storage/index-store/dist/index.js"
}
}, },
"./storage/kv-store": { "./storage/kv-store": {
"require": { "require": {
@@ -251,10 +200,7 @@
"types": "./storage/kv-store/dist/index.d.ts", "types": "./storage/kv-store/dist/index.d.ts",
"default": "./storage/kv-store/dist/index.js" "default": "./storage/kv-store/dist/index.js"
}, },
"default": { "default": "./storage/kv-store/dist/index.js"
"types": "./storage/kv-store/dist/index.d.ts",
"default": "./storage/kv-store/dist/index.js"
}
}, },
"./response-synthesizers": { "./response-synthesizers": {
"require": { "require": {
@@ -265,10 +211,7 @@
"types": "./response-synthesizers/dist/index.d.ts", "types": "./response-synthesizers/dist/index.d.ts",
"default": "./response-synthesizers/dist/index.js" "default": "./response-synthesizers/dist/index.js"
}, },
"default": { "default": "./response-synthesizers/dist/index.js"
"types": "./response-synthesizers/dist/index.d.ts",
"default": "./response-synthesizers/dist/index.js"
}
}, },
"./chat-engine": { "./chat-engine": {
"require": { "require": {
@@ -279,10 +222,7 @@
"types": "./chat-engine/dist/index.d.ts", "types": "./chat-engine/dist/index.d.ts",
"default": "./chat-engine/dist/index.js" "default": "./chat-engine/dist/index.js"
}, },
"default": { "default": "./chat-engine/dist/index.js"
"types": "./chat-engine/dist/index.d.ts",
"default": "./chat-engine/dist/index.js"
}
}, },
"./retriever": { "./retriever": {
"require": { "require": {
@@ -293,10 +233,7 @@
"types": "./retriever/dist/index.d.ts", "types": "./retriever/dist/index.d.ts",
"default": "./retriever/dist/index.js" "default": "./retriever/dist/index.js"
}, },
"default": { "default": "./retriever/dist/index.js"
"types": "./retriever/dist/index.d.ts",
"default": "./retriever/dist/index.js"
}
}, },
"./vector-store": { "./vector-store": {
"require": { "require": {
@@ -307,10 +244,7 @@
"types": "./vector-store/dist/index.d.ts", "types": "./vector-store/dist/index.d.ts",
"default": "./vector-store/dist/index.js" "default": "./vector-store/dist/index.js"
}, },
"default": { "default": "./vector-store/dist/index.js"
"types": "./vector-store/dist/index.d.ts",
"default": "./vector-store/dist/index.js"
}
}, },
"./tools": { "./tools": {
"require": { "require": {
@@ -321,10 +255,7 @@
"types": "./tools/dist/index.d.ts", "types": "./tools/dist/index.d.ts",
"default": "./tools/dist/index.js" "default": "./tools/dist/index.js"
}, },
"default": { "default": "./tools/dist/index.js"
"types": "./tools/dist/index.d.ts",
"default": "./tools/dist/index.js"
}
}, },
"./data-structs": { "./data-structs": {
"require": { "require": {
@@ -335,10 +266,7 @@
"types": "./data-structs/dist/index.d.ts", "types": "./data-structs/dist/index.d.ts",
"default": "./data-structs/dist/index.js" "default": "./data-structs/dist/index.js"
}, },
"default": { "default": "./data-structs/dist/index.js"
"types": "./data-structs/dist/index.d.ts",
"default": "./data-structs/dist/index.js"
}
}, },
"./postprocessor": { "./postprocessor": {
"require": { "require": {
@@ -349,10 +277,7 @@
"types": "./postprocessor/dist/index.d.ts", "types": "./postprocessor/dist/index.d.ts",
"default": "./postprocessor/dist/index.js" "default": "./postprocessor/dist/index.js"
}, },
"default": { "default": "./postprocessor/dist/index.js"
"types": "./postprocessor/dist/index.d.ts",
"default": "./postprocessor/dist/index.js"
}
} }
}, },
"files": [ "files": [
@@ -391,7 +316,7 @@
"devDependencies": { "devDependencies": {
"@edge-runtime/vm": "^4.0.4", "@edge-runtime/vm": "^4.0.4",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"bunchee": "6.2.0", "bunchee": "6.3.4",
"happy-dom": "^15.11.6", "happy-dom": "^15.11.6",
"natural": "^8.0.1" "natural": "^8.0.1"
}, },
+26 -18
View File
@@ -193,7 +193,7 @@ export abstract class AgentWorker<
return new ReadableStream< return new ReadableStream<
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions> TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
>({ >({
start: async (controller) => { pull: async (controller) => {
for await (const stepOutput of taskOutputStream) { for await (const stepOutput of taskOutputStream) {
this.#taskSet.add(stepOutput.taskStep); this.#taskSet.add(stepOutput.taskStep);
if (stepOutput.isLast) { if (stepOutput.isLast) {
@@ -209,23 +209,31 @@ export abstract class AgentWorker<
} }
const { output, taskStep } = stepOutput; const { output, taskStep } = stepOutput;
if (output instanceof ReadableStream) { if (output instanceof ReadableStream) {
const [pipStream, finalStream] = output.tee(); let content = "";
stepOutput.output = finalStream; let options: AdditionalMessageOptions | undefined = undefined;
const reader = pipStream.getReader(); const transformedStream = output.pipeThrough(
const { value } = await reader.read(); new TransformStream({
reader.releaseLock(); transform(chunk, controller) {
let content: string = value!.delta; content += chunk.delta;
for await (const chunk of pipStream) { if (!options && chunk.options) {
content += chunk.delta; options = chunk.options;
} }
taskStep.context.store.messages = [ controller.enqueue(chunk); // Pass the chunk through unchanged
...taskStep.context.store.messages, },
{ // When stream finishes, store the accumulated message in context
role: "assistant", flush() {
content, taskStep.context.store.messages = [
options: value!.options, ...taskStep.context.store.messages,
}, {
]; role: "assistant",
content,
options,
},
];
},
}),
);
stepOutput.output = transformedStream;
} }
controller.enqueue(stepOutput); controller.enqueue(stepOutput);
controller.close(); controller.close();
+4
View File
@@ -215,6 +215,10 @@ export type ToolMetadata<
* @link https://json-schema.org/understanding-json-schema * @link https://json-schema.org/understanding-json-schema
*/ */
parameters?: Parameters; parameters?: Parameters;
/**
* Whether the tool requires workflow context to be passed in.
*/
requireContext?: boolean;
}; };
/** /**
+37 -15
View File
@@ -7,21 +7,27 @@ import {
TextNode, TextNode,
TransformComponent, TransformComponent,
} from "../schema"; } from "../schema";
import { isPromise } from "../utils";
export abstract class NodeParser extends TransformComponent<BaseNode[]> { export abstract class NodeParser<
Result extends TextNode[] | Promise<TextNode[]> =
| TextNode[]
| Promise<TextNode[]>,
> extends TransformComponent<Result> {
includeMetadata: boolean = true; includeMetadata: boolean = true;
includePrevNextRel: boolean = true; includePrevNextRel: boolean = true;
constructor() { constructor() {
super((nodes: BaseNode[]): BaseNode[] => { super((nodes: BaseNode[]): Result => {
// alex: should we fix `as` type?
return this.getNodesFromDocuments(nodes as TextNode[]); return this.getNodesFromDocuments(nodes as TextNode[]);
}); });
} }
protected postProcessParsedNodes( protected postProcessParsedNodes(
nodes: TextNode[], nodes: Awaited<Result>,
parentDocMap: Map<string, TextNode>, parentDocMap: Map<string, TextNode>,
): TextNode[] { ): Awaited<Result> {
nodes.forEach((node, i) => { nodes.forEach((node, i) => {
const parentDoc = parentDocMap.get(node.sourceNode?.nodeId || ""); const parentDoc = parentDocMap.get(node.sourceNode?.nodeId || "");
@@ -73,9 +79,9 @@ export abstract class NodeParser extends TransformComponent<BaseNode[]> {
protected abstract parseNodes( protected abstract parseNodes(
documents: TextNode[], documents: TextNode[],
showProgress?: boolean, showProgress?: boolean,
): TextNode[]; ): Result;
public getNodesFromDocuments(documents: TextNode[]): TextNode[] { public getNodesFromDocuments(documents: TextNode[]): Result {
const docsId: Map<string, TextNode> = new Map( const docsId: Map<string, TextNode> = new Map(
documents.map((doc) => [doc.id_, doc]), documents.map((doc) => [doc.id_, doc]),
); );
@@ -85,20 +91,36 @@ export abstract class NodeParser extends TransformComponent<BaseNode[]> {
documents, documents,
}); });
const nodes = this.postProcessParsedNodes( const parsedNodes = this.parseNodes(documents);
this.parseNodes(documents), if (isPromise(parsedNodes)) {
docsId, return parsedNodes.then((parsedNodes) => {
); const nodes = this.postProcessParsedNodes(
parsedNodes as Awaited<Result>,
docsId,
);
callbackManager.dispatchEvent("node-parsing-end", { callbackManager.dispatchEvent("node-parsing-end", {
nodes, nodes,
}); });
return nodes; return nodes;
}) as Result;
} else {
const nodes = this.postProcessParsedNodes(
parsedNodes as Awaited<Result>,
docsId,
);
callbackManager.dispatchEvent("node-parsing-end", {
nodes,
});
return nodes;
}
} }
} }
export abstract class TextSplitter extends NodeParser { export abstract class TextSplitter extends NodeParser<TextNode[]> {
abstract splitText(text: string): string[]; abstract splitText(text: string): string[];
public splitTexts(texts: string[]): string[] { public splitTexts(texts: string[]): string[] {
+1 -1
View File
@@ -6,7 +6,7 @@ import {
} from "../schema"; } from "../schema";
import { NodeParser } from "./base"; import { NodeParser } from "./base";
export class MarkdownNodeParser extends NodeParser { export class MarkdownNodeParser extends NodeParser<TextNode[]> {
override parseNodes(nodes: TextNode[], showProgress?: boolean): TextNode[] { override parseNodes(nodes: TextNode[], showProgress?: boolean): TextNode[] {
return nodes.reduce<TextNode[]>((allNodes, node) => { return nodes.reduce<TextNode[]>((allNodes, node) => {
const markdownNodes = this.getNodesFromNode(node); const markdownNodes = this.getNodesFromNode(node);
@@ -9,7 +9,7 @@ import {
import { NodeParser } from "./base"; import { NodeParser } from "./base";
import { splitBySentenceTokenizer, type TextSplitterFn } from "./utils"; import { splitBySentenceTokenizer, type TextSplitterFn } from "./utils";
export class SentenceWindowNodeParser extends NodeParser { export class SentenceWindowNodeParser extends NodeParser<TextNode[]> {
static DEFAULT_WINDOW_SIZE = 3; static DEFAULT_WINDOW_SIZE = 3;
static DEFAULT_WINDOW_METADATA_KEY = "window"; static DEFAULT_WINDOW_METADATA_KEY = "window";
static DEFAULT_ORIGINAL_TEXT_METADATA_KEY = "originalText"; static DEFAULT_ORIGINAL_TEXT_METADATA_KEY = "originalText";
@@ -116,7 +116,14 @@ class Refine extends BaseSynthesizer {
} }
} }
// fixme: no source nodes provided, cannot fix right now due to lack of context if (response === undefined) {
response = stream
? (async function* () {
yield "";
})()
: "";
}
if (typeof response === "string") { if (typeof response === "string") {
return EngineResponse.fromResponse(response, false, nodes); return EngineResponse.fromResponse(response, false, nodes);
} else { } else {
+15 -1
View File
@@ -59,14 +59,28 @@ export class FunctionTool<T, R extends JSONValue | Promise<JSONValue>>
} }
call = (input: T) => { call = (input: T) => {
if (this.#metadata.requireContext) {
const inputWithContext = input as Record<string, unknown>;
if (!inputWithContext.context) {
throw new Error(
"Tool call requires context, but context parameter is missing",
);
}
}
if (this.#zodType) { if (this.#zodType) {
const result = this.#zodType.safeParse(input); const result = this.#zodType.safeParse(input);
if (result.success) { if (result.success) {
return this.#fn.call(null, result.data); if (this.#metadata.requireContext) {
const { context } = input as Record<string, unknown>;
return this.#fn.call(null, { context, ...result.data });
} else {
return this.#fn.call(null, result.data);
}
} else { } else {
console.warn(result.error.errors); console.warn(result.error.errors);
} }
} }
return this.#fn.call(null, input); return this.#fn.call(null, input);
}; };
} }
+4
View File
@@ -1,5 +1,9 @@
import type { JSONValue } from "../global"; import type { JSONValue } from "../global";
export const isPromise = <T>(obj: unknown): obj is Promise<T> => {
return obj != null && typeof obj === "object" && "then" in obj;
};
export const isAsyncIterable = ( export const isAsyncIterable = (
obj: unknown, obj: unknown,
): obj is AsyncIterable<unknown> => { ): obj is AsyncIterable<unknown> => {
+2 -2
View File
@@ -1,6 +1,6 @@
import type { BaseEmbedding } from "../embeddings/base.js"; import type { BaseEmbedding } from "../embeddings";
import { Settings } from "../global"; import { Settings } from "../global";
import type { BaseNode, ModalityType } from "../schema/node.js"; import type { BaseNode, ModalityType } from "../schema";
/** /**
* should compatible with npm:pg and npm:postgres * should compatible with npm:pg and npm:postgres
+61 -1
View File
@@ -1,4 +1,5 @@
import { validateAgentParams } from "@llamaindex/core/agent"; import { LLMAgent, validateAgentParams } from "@llamaindex/core/agent";
import { MockLLM } from "@llamaindex/core/utils";
import { expect, test } from "vitest"; import { expect, test } from "vitest";
import { ZodError } from "zod"; import { ZodError } from "zod";
@@ -33,3 +34,62 @@ test("validate agent params", () => {
], ],
}); });
}); });
test("LLMAgent streaming: first chunk should be available immediately", async () => {
const responseMessage =
"This is a very long response message that should take a while to stream";
const timeBetweenToken = 20; // delay time between tokens
const agent = new LLMAgent({
tools: [],
llm: new MockLLM({ responseMessage, timeBetweenToken }),
});
const startTime = Date.now();
const stream = await agent.chat({ message: "Hello", stream: true });
let fullResponse = "";
let timeToGetFirstChunk: number | undefined;
for await (const chunk of stream) {
expect(chunk).toHaveProperty("delta");
fullResponse += chunk.delta;
if (timeToGetFirstChunk === undefined) {
timeToGetFirstChunk = Date.now() - startTime;
}
}
expect(fullResponse).toBe(responseMessage);
// the first chunk should be available immediately and no need the whole response to be sent
expect(timeToGetFirstChunk).toBeLessThan(500);
});
test("LLMAgent create task: first task should be executed immediately", async () => {
const responseMessage =
"This is a very long response message that should take a while to stream";
const timeBetweenToken = 20; // delay time between tokens
const agent = new LLMAgent({
tools: [],
llm: new MockLLM({ responseMessage, timeBetweenToken }),
});
const startTime = Date.now();
const task = agent.createTask("Write a long paragraph", true, false, []);
let timeToGetFirstChunk: number | undefined;
let output: ReadableStream | undefined;
for await (const stepOutput of task) {
if (timeToGetFirstChunk === undefined) {
timeToGetFirstChunk = Date.now() - startTime;
}
if (stepOutput.output instanceof ReadableStream) {
output = stepOutput.output;
}
}
expect(timeToGetFirstChunk).toBeLessThan(500);
expect(output).toBeDefined();
expect(output).toBeInstanceOf(ReadableStream);
});
@@ -66,9 +66,9 @@ describe("ChatMemoryBuffer", () => {
expect(result).toEqual([...inputMessages, ...storedMessages]); expect(result).toEqual([...inputMessages, ...storedMessages]);
}); });
test("getMessages throws error when initial token count exceeds limit", () => { test("getMessages throws error when initial token count exceeds limit", async () => {
const buffer = new ChatMemoryBuffer({ tokenLimit: 10 }); const buffer = new ChatMemoryBuffer({ tokenLimit: 10 });
expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow( await expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
"Initial token count exceeds token limit", "Initial token count exceeds token limit",
); );
}); });
@@ -0,0 +1,24 @@
import { NodeParser } from "@llamaindex/core/node-parser";
import { TextNode } from "@llamaindex/core/schema";
import { describe, expect, test } from "vitest";
describe("NodeParser", () => {
test("node parser should allow async parse function", async () => {
class MyNodeParser extends NodeParser<Promise<TextNode[]>> {
protected async parseNodes(documents: TextNode[]): Promise<TextNode[]> {
await new Promise((resolve) => setTimeout(resolve, 1000));
return documents;
}
}
const nodeParser = new MyNodeParser();
const nodes = [
new TextNode({
text: "Hello, world!",
}),
];
const result = nodeParser(nodes);
expect(result).toBeInstanceOf(Promise);
await expect(result).resolves.toEqual(nodes);
});
});
@@ -1,4 +1,4 @@
import { describe, expect, test, vi } from "vitest"; import { beforeEach, describe, expect, test, vi } from "vitest";
import type { LLMMetadata } from "../../llms/dist/index.js"; import type { LLMMetadata } from "../../llms/dist/index.js";
import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js"; import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js";
import { Document } from "../../schema/dist/index.js"; import { Document } from "../../schema/dist/index.js";
@@ -10,26 +10,69 @@ const mockLllm = () => ({
return response; return response;
} }
function* gen() { return {
// yield a few times to make sure each chunk has the sourceNodes [Symbol.asyncIterator]: function* gen() {
yield response; // yield a few times to make sure each chunk has the sourceNodes
yield response; yield response;
yield response; yield response;
} yield response;
},
return gen(); };
}), }),
chat: vi.fn(), chat: vi.fn(),
metadata: {} as unknown as LLMMetadata, metadata: {} as unknown as LLMMetadata,
}); });
describe("refine response synthesizer", () => {
let synthesizer: ReturnType<typeof getResponseSynthesizer<"refine">>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const isAsyncIterable = (obj: any): boolean =>
obj[Symbol.asyncIterator] !== undefined;
beforeEach(() => {
synthesizer = getResponseSynthesizer("refine", {
llm: mockLllm(),
});
});
describe("getResponse", () => {
test("should return async iterable of EngineResponse when stream is true and sourceNodes are empty", async () => {
const response = await synthesizer.getResponse(
"unimportant query",
[],
true,
);
expect(isAsyncIterable(response)).toBe(true);
for await (const chunk of response) {
expect(chunk.message.content).toEqual("");
}
});
test("should return non async iterable when stream is false and sourceNodes are empty", async () => {
const response = await synthesizer.getResponse(
"unimportant query",
[],
false,
);
expect(isAsyncIterable(response)).toBe(false);
expect(response.message.content).toEqual("");
});
});
});
describe("compact and refine response synthesizer", () => { describe("compact and refine response synthesizer", () => {
let synthesizer: ReturnType<typeof getResponseSynthesizer<"compact">>;
beforeEach(() => {
synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
});
describe("synthesize", () => { describe("synthesize", () => {
test("should return original sourceNodes with response when stream = false", async () => { test("should return original sourceNodes with response when stream = false", async () => {
const synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
const sourceNode = { node: new Document({}), score: 1 }; const sourceNode = { node: new Document({}), score: 1 };
const response = await synthesizer.synthesize( const response = await synthesizer.synthesize(
@@ -44,10 +87,6 @@ describe("compact and refine response synthesizer", () => {
}); });
test("should return original sourceNodes with response when stream = true", async () => { test("should return original sourceNodes with response when stream = true", async () => {
const synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
const sourceNode = { node: new Document({}), score: 1 }; const sourceNode = { node: new Document({}), score: 1 };
const response = await synthesizer.synthesize( const response = await synthesizer.synthesize(
+12
View File
@@ -1,5 +1,17 @@
# @llamaindex/env # @llamaindex/env
## 0.1.29
### Patch Changes
- beb922b: Fix edge runtime builds by adding missing packages to env package. Make gpt-tokenizer optional for llamaindex to reduce package size.
## 0.1.28
### Patch Changes
- cc50c9c: fix: missing release
## 0.1.27 ## 0.1.27
### Patch Changes ### Patch Changes
+11 -26
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/env", "name": "@llamaindex/env",
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker", "description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
"version": "0.1.27", "version": "0.1.29",
"type": "module", "type": "module",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"module": "dist/index.js", "module": "dist/index.js",
@@ -72,10 +72,7 @@
"types": "./tokenizers/dist/index.d.cts", "types": "./tokenizers/dist/index.d.cts",
"default": "./tokenizers/dist/index.cjs" "default": "./tokenizers/dist/index.cjs"
}, },
"default": { "default": "./tokenizers/dist/index.js"
"types": "./tokenizers/dist/index.d.ts",
"default": "./tokenizers/dist/index.js"
}
}, },
"./multi-model": { "./multi-model": {
"workerd": { "workerd": {
@@ -98,10 +95,7 @@
"types": "./multi-model/dist/index.d.cts", "types": "./multi-model/dist/index.d.cts",
"default": "./multi-model/dist/index.cjs" "default": "./multi-model/dist/index.cjs"
}, },
"default": { "default": "./multi-model/dist/index.js"
"types": "./multi-model/dist/index.d.ts",
"default": "./multi-model/dist/index.js"
}
} }
}, },
"files": [ "files": [
@@ -125,32 +119,23 @@
"@huggingface/transformers": "^3.0.2", "@huggingface/transformers": "^3.0.2",
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"@types/readable-stream": "^4.0.15", "@types/readable-stream": "^4.0.15",
"bunchee": "6.2.0", "bunchee": "6.3.4",
"gpt-tokenizer": "^2.6.2",
"pathe": "^1.1.2",
"vitest": "^2.1.5" "vitest": "^2.1.5"
}, },
"peerDependencies": { "dependencies": {
"pathe": "^1.1.2",
"@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/sha256-js": "^5.2.0",
"js-tiktoken": "^1.0.12"
},
"peerDependencies": {
"@huggingface/transformers": "^3.0.2", "@huggingface/transformers": "^3.0.2",
"gpt-tokenizer": "^2.5.0", "gpt-tokenizer": "^2.5.0"
"js-tiktoken": "^1.0.12",
"pathe": "^1.1.2"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"@aws-crypto/sha256-js": {
"optional": true
},
"@huggingface/transformers": { "@huggingface/transformers": {
"optional": true "optional": true
}, },
"pathe": { "gpt-tokenizer": {
"optional": true
},
"tiktoken": {
"optional": true
},
"js-tiktoken": {
"optional": true "optional": true
} }
} }
+5 -4
View File
@@ -20,7 +20,7 @@ import { Readable } from "node:stream";
import { fileURLToPath } from "node:url"; import { fileURLToPath } from "node:url";
import { createWriteStream, fs } from "./fs/node.js"; import { createWriteStream, fs } from "./fs/node.js";
import "./global-check.js"; import "./global-check.js";
import { type SHA256, process } from "./node-polyfill.js"; import { type SHA256 } from "./node-polyfill.js";
export function createSHA256(): SHA256 { export function createSHA256(): SHA256 {
const hash = createHash("sha256"); const hash = createHash("sha256");
@@ -34,18 +34,19 @@ export function createSHA256(): SHA256 {
}; };
} }
export const process = globalThis.process;
export * from "./als/index.node.js"; export * from "./als/index.node.js";
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js"; export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export { CustomEvent, getEnv, setEnvs } from "./utils/index.js"; export { CustomEvent, getEnv, setEnvs } from "./utils/index.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js"; export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export { export {
EOL,
Readable,
createWriteStream, createWriteStream,
EOL,
fileURLToPath, fileURLToPath,
fs, fs,
ok, ok,
path, path,
process,
randomUUID, randomUUID,
Readable,
}; };
+37 -9
View File
@@ -1,20 +1,48 @@
import { getEncoding } from "js-tiktoken";
import type { Tokenizer } from "./types.js"; import type { Tokenizer } from "./types.js";
import { Tokenizers } from "./types.js"; import { Tokenizers } from "./types.js";
import cl100kBase from "gpt-tokenizer"; function tryLoadGptTokenizer() {
try {
// eslint-disable-next-line @typescript-eslint/no-require-imports
return require("gpt-tokenizer"); // using require for CommonJS compatibility
} catch (e) {
return null;
}
}
const gptTokenizerModule = tryLoadGptTokenizer();
class TokenizerSingleton { class TokenizerSingleton {
#defaultTokenizer: Tokenizer; #defaultTokenizer: Tokenizer;
constructor() { constructor() {
this.#defaultTokenizer = { // Use gpt-tokenizer if available, otherwise use js-tiktoken
encode: (text: string): Uint32Array => { if (gptTokenizerModule) {
return new Uint32Array(cl100kBase.encode(text)); this.#defaultTokenizer = {
}, encode: (text: string): Uint32Array => {
decode: (tokens: Uint32Array) => { return new Uint32Array(gptTokenizerModule.encode(text));
return cl100kBase.decode(tokens); },
}, decode: (tokens: Uint32Array): string => {
}; return gptTokenizerModule.decode(Array.from(tokens));
},
};
} else {
// Fall back to js-tiktoken which is always available
// Note: js-tiktoken it's 60x slower than gpt-tokenizer
const encoding = getEncoding("cl100k_base");
this.#defaultTokenizer = {
encode: (text: string) => {
return new Uint32Array(encoding.encode(text));
},
decode: (tokens: Uint32Array) => {
const numberArray = Array.from(tokens);
const text = encoding.decode(numberArray);
const uint8Array = new TextEncoder().encode(text);
return new TextDecoder().decode(uint8Array);
},
};
}
} }
tokenizer(encoding?: Tokenizers): Tokenizer { tokenizer(encoding?: Tokenizers): Tokenizer {
+46
View File
@@ -1,5 +1,51 @@
# @llamaindex/experimental # @llamaindex/experimental
## 0.0.157
### Patch Changes
- Updated dependencies [beb922b]
- llamaindex@0.9.7
## 0.0.156
### Patch Changes
- llamaindex@0.9.6
## 0.0.155
### Patch Changes
- llamaindex@0.9.5
## 0.0.154
### Patch Changes
- Updated dependencies [cb021e7]
- llamaindex@0.9.4
## 0.0.153
### Patch Changes
- llamaindex@0.9.3
## 0.0.152
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.151
### Patch Changes
- Updated dependencies [6d37d44]
- llamaindex@0.9.1
## 0.0.150 ## 0.0.150
### Patch Changes ### Patch Changes
+2 -4
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/experimental", "name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS", "description": "Experimental package for LlamaIndexTS",
"version": "0.0.150", "version": "0.0.157",
"type": "module", "type": "module",
"types": "dist/type/index.d.ts", "types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js", "main": "dist/cjs/index.js",
@@ -55,12 +55,10 @@
"dev": "concurrently \"pnpm run build:esm --watch\" \"pnpm run build:cjs --watch\" \"pnpm run build:type --watch\"" "dev": "concurrently \"pnpm run build:esm --watch\" \"pnpm run build:cjs --watch\" \"pnpm run build:type --watch\""
}, },
"devDependencies": { "devDependencies": {
"@aws-crypto/sha256-js": "^5.2.0",
"@swc/cli": "^0.5.0", "@swc/cli": "^0.5.0",
"@swc/core": "^1.9.2", "@swc/core": "^1.9.2",
"@types/jsonpath": "^0.2.4", "@types/jsonpath": "^0.2.4",
"concurrently": "^9.1.0", "concurrently": "^9.1.0"
"pathe": "^1.1.2"
}, },
"dependencies": { "dependencies": {
"@types/lodash": "^4.17.7", "@types/lodash": "^4.17.7",
+76
View File
@@ -1,5 +1,81 @@
# llamaindex # llamaindex
## 0.9.7
### Patch Changes
- beb922b: Fix edge runtime builds by adding missing packages to env package. Make gpt-tokenizer optional for llamaindex to reduce package size.
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
- @llamaindex/cloud@3.0.7
- @llamaindex/node-parser@1.0.6
- @llamaindex/openai@0.1.58
- @llamaindex/workflow@0.0.13
## 0.9.6
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
- @llamaindex/workflow@0.0.12
- @llamaindex/cloud@3.0.6
- @llamaindex/node-parser@1.0.5
- @llamaindex/openai@0.1.57
## 0.9.5
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
- @llamaindex/cloud@3.0.5
- @llamaindex/node-parser@1.0.4
- @llamaindex/openai@0.1.56
## 0.9.4
### Patch Changes
- cb021e7: feat(node-parser): support async function
- Updated dependencies [cb256f2]
- Updated dependencies [cb021e7]
- @llamaindex/openai@0.1.55
- @llamaindex/core@0.5.3
- @llamaindex/cloud@3.0.4
- @llamaindex/node-parser@1.0.3
## 0.9.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/cloud@3.0.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/openai@0.1.54
## 0.9.2
### Patch Changes
- 88d776f: fix: enhance error message in llamacloud
- Updated dependencies [c902fcb]
- @llamaindex/cloud@3.0.2
## 0.9.1
### Patch Changes
- 6d37d44: fix: Update react agent to support tool calls from Cohere command-r models
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
- @llamaindex/cloud@3.0.1
- @llamaindex/core@0.5.1
- @llamaindex/node-parser@1.0.1
- @llamaindex/openai@0.1.53
## 0.9.0 ## 0.9.0
### Minor Changes ### Minor Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "llamaindex", "name": "llamaindex",
"version": "0.9.0", "version": "0.9.7",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"keywords": [ "keywords": [
@@ -25,12 +25,12 @@
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"@llamaindex/node-parser": "workspace:*", "@llamaindex/node-parser": "workspace:*",
"@llamaindex/openai": "workspace:*", "@llamaindex/openai": "workspace:*",
"@llamaindex/workflow": "workspace:*",
"@types/lodash": "^4.17.7", "@types/lodash": "^4.17.7",
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"magic-bytes.js": "^1.10.0", "magic-bytes.js": "^1.10.0"
"gpt-tokenizer": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "^0.5.0", "@swc/cli": "^0.5.0",
+1 -1
View File
@@ -100,7 +100,7 @@ function extractToolUse(
inputText: string, inputText: string,
): [thought: string, action: string, input: string] { ): [thought: string, action: string, input: string] {
const pattern = const pattern =
/\s*Thought: (.*?)\nAction: ([a-zA-Z0-9_]+).*?\.*Input: .*?(\{.*?\})/s; /\s*Thought: (.*?)\nAction: ([a-zA-Z0-9_]+).*?\.*[Input:]*.*?(\{.*?\})/s;
const match = inputText.match(pattern); const match = inputText.match(pattern);
+5
View File
@@ -31,6 +31,11 @@ export function initService({ apiKey, baseUrl }: ClientParams = {}) {
request.headers.set("Authorization", `Bearer ${token}`); request.headers.set("Authorization", `Bearer ${token}`);
return request; return request;
}); });
client.interceptors.error.use((error) => {
throw new Error(
`LlamaCloud API request failed. Error details: ${JSON.stringify(error)}`,
);
});
if (!token) { if (!token) {
throw new Error( throw new Error(
"API Key is required for LlamaCloudIndex. Please pass the apiKey parameter", "API Key is required for LlamaCloudIndex. Please pass the apiKey parameter",
+1
View File
@@ -65,6 +65,7 @@ export * from "@llamaindex/core/storage/doc-store";
export * from "@llamaindex/core/storage/index-store"; export * from "@llamaindex/core/storage/index-store";
export * from "@llamaindex/core/storage/kv-store"; export * from "@llamaindex/core/storage/kv-store";
export * from "@llamaindex/core/utils"; export * from "@llamaindex/core/utils";
export * from "@llamaindex/workflow/agent";
export * from "./agent/index.js"; export * from "./agent/index.js";
export * from "./cloud/index.js"; export * from "./cloud/index.js";
export * from "./embeddings/index.js"; export * from "./embeddings/index.js";
@@ -296,7 +296,7 @@ export class KeywordTableIndex extends BaseIndex<KeywordTable> {
await docStore.setDocumentHash(doc.id_, doc.hash); await docStore.setDocumentHash(doc.id_, doc.hash);
} }
const nodes = Settings.nodeParser.getNodesFromDocuments(documents); const nodes = await Settings.nodeParser.getNodesFromDocuments(documents);
const index = await KeywordTableIndex.init({ const index = await KeywordTableIndex.init({
nodes, nodes,
storageContext, storageContext,
@@ -145,7 +145,7 @@ export class SummaryIndex extends BaseIndex<IndexList> {
await docStore.setDocumentHash(doc.id_, doc.hash); await docStore.setDocumentHash(doc.id_, doc.hash);
} }
const nodes = Settings.nodeParser.getNodesFromDocuments(documents); const nodes = await Settings.nodeParser.getNodesFromDocuments(documents);
const index = await SummaryIndex.init({ const index = await SummaryIndex.init({
nodes, nodes,
+44
View File
@@ -1,5 +1,49 @@
# @llamaindex/node-parser # @llamaindex/node-parser
## 1.0.6
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
## 1.0.5
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
## 1.0.4
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
## 1.0.3
### Patch Changes
- Updated dependencies [cb021e7]
- @llamaindex/core@0.5.3
## 1.0.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 1.0.1
### Patch Changes
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
- @llamaindex/core@0.5.1
## 1.0.0 ## 1.0.0
### Patch Changes ### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/node-parser", "name": "@llamaindex/node-parser",
"version": "1.0.0", "version": "1.0.6",
"description": "Node parser for LlamaIndex", "description": "Node parser for LlamaIndex",
"type": "module", "type": "module",
"exports": { "exports": {
@@ -43,7 +43,7 @@
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"@types/html-to-text": "^9.0.4", "@types/html-to-text": "^9.0.4",
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"bunchee": "6.2.0", "bunchee": "6.3.4",
"tree-sitter": "^0.22.1", "tree-sitter": "^0.22.1",
"web-tree-sitter": "^0.24.4" "web-tree-sitter": "^0.24.4"
}, },
+56
View File
@@ -1,5 +1,61 @@
# @llamaindex/anthropic # @llamaindex/anthropic
## 0.2.4
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
## 0.2.3
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
## 0.2.2
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
## 0.2.1
### Patch Changes
- Updated dependencies [cb021e7]
- @llamaindex/core@0.5.3
## 0.2.0
### Minor Changes
- 3564244: Add support for claude 3.7 thinking (and set default temperature to 1)
### Patch Changes
- a9c6144: Stream thinking tokens
- 3564244: add support for claude 3.7
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.2
### Patch Changes
- be74207: fix: dont add empty text block to tool call
## 0.1.1
### Patch Changes
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
- @llamaindex/core@0.5.1
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/anthropic", "name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex", "description": "Anthropic Adapter for LlamaIndex",
"version": "0.1.0", "version": "0.2.4",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -31,11 +31,11 @@
"test": "vitest run" "test": "vitest run"
}, },
"devDependencies": { "devDependencies": {
"bunchee": "6.2.0", "bunchee": "6.3.4",
"vitest": "^2.1.5" "vitest": "^2.1.5"
}, },
"dependencies": { "dependencies": {
"@anthropic-ai/sdk": "0.32.1", "@anthropic-ai/sdk": "0.37.0",
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"remeda": "^2.17.3" "remeda": "^2.17.3"
+82 -53
View File
@@ -6,6 +6,8 @@ import type {
} from "@anthropic-ai/sdk/resources/beta/index"; } from "@anthropic-ai/sdk/resources/beta/index";
import type { TextBlock } from "@anthropic-ai/sdk/resources/index"; import type { TextBlock } from "@anthropic-ai/sdk/resources/index";
import type { import type {
MessageCreateParams,
MessageCreateParamsBase,
MessageParam, MessageParam,
Model, Model,
Tool, Tool,
@@ -102,10 +104,17 @@ export const ALL_AVAILABLE_V3_5_MODELS = {
"claude-3-5-haiku-20241022": { contextWindow: 200000 }, "claude-3-5-haiku-20241022": { contextWindow: 200000 },
}; };
export const ALL_AVAILABLE_V3_7_MODELS = {
"claude-3-7-sonnet": { contextWindow: 200000 },
"claude-3-7-sonnet-20250219": { contextWindow: 200000 },
"claude-3-7-sonnet-latest": { contextWindow: 200000 },
};
export const ALL_AVAILABLE_ANTHROPIC_MODELS = { export const ALL_AVAILABLE_ANTHROPIC_MODELS = {
...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS, ...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS,
...ALL_AVAILABLE_V3_MODELS, ...ALL_AVAILABLE_V3_MODELS,
...ALL_AVAILABLE_V3_5_MODELS, ...ALL_AVAILABLE_V3_5_MODELS,
...ALL_AVAILABLE_V3_7_MODELS,
} satisfies { } satisfies {
[key in Model]: { contextWindow: number }; [key in Model]: { contextWindow: number };
}; };
@@ -115,11 +124,16 @@ const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
"claude-3-sonnet": "claude-3-sonnet-20240229", "claude-3-sonnet": "claude-3-sonnet-20240229",
"claude-3-haiku": "claude-3-haiku-20240307", "claude-3-haiku": "claude-3-haiku-20240307",
"claude-3-5-sonnet": "claude-3-5-sonnet-20240620", "claude-3-5-sonnet": "claude-3-5-sonnet-20240620",
"claude-3-7-sonnet": "claude-3-7-sonnet-20250219",
} as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string }; } as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string };
export type AnthropicAdditionalChatOptions = object; export type AnthropicAdditionalChatOptions = Pick<
MessageCreateParamsBase,
"thinking"
>;
export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & { export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
cache_control?: BetaCacheControlEphemeral | null; cache_control?: BetaCacheControlEphemeral | null;
thinking?: string | undefined;
}; };
export class Anthropic extends ToolCallLLM< export class Anthropic extends ToolCallLLM<
@@ -129,8 +143,9 @@ export class Anthropic extends ToolCallLLM<
// Per completion Anthropic params // Per completion Anthropic params
model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string); model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string);
temperature: number; temperature: number;
topP: number; topP?: number | undefined;
maxTokens?: number | undefined; maxTokens?: number | undefined;
additionalChatOptions?: AnthropicAdditionalChatOptions | undefined;
// Anthropic session params // Anthropic session params
apiKey?: string | undefined; apiKey?: string | undefined;
@@ -141,13 +156,14 @@ export class Anthropic extends ToolCallLLM<
constructor(init?: Partial<Anthropic>) { constructor(init?: Partial<Anthropic>) {
super(); super();
this.model = init?.model ?? "claude-3-opus"; this.model = init?.model ?? "claude-3-opus";
this.temperature = init?.temperature ?? 0.1; this.temperature = init?.temperature ?? 1; // default in anthropic is 1
this.topP = init?.topP ?? 0.999; // Per Ben Mann this.topP = init?.topP;
this.maxTokens = init?.maxTokens ?? undefined; this.maxTokens = init?.maxTokens ?? undefined;
this.apiKey = init?.apiKey ?? undefined; this.apiKey = init?.apiKey ?? undefined;
this.maxRetries = init?.maxRetries ?? 10; this.maxRetries = init?.maxRetries ?? 10;
this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds
this.additionalChatOptions = init?.additionalChatOptions;
this.session = this.session =
init?.session ?? init?.session ??
getAnthropicSession({ getAnthropicSession({
@@ -165,7 +181,7 @@ export class Anthropic extends ToolCallLLM<
return { return {
model: this.model, model: this.model,
temperature: this.temperature, temperature: this.temperature,
topP: this.topP, topP: this.topP ?? 0, // XXX: topP needs to be returned but might be undefined for Anthropic
maxTokens: this.maxTokens, maxTokens: this.maxTokens,
contextWindow: contextWindow:
this.model in ALL_AVAILABLE_ANTHROPIC_MODELS this.model in ALL_AVAILABLE_ANTHROPIC_MODELS
@@ -207,23 +223,26 @@ export class Anthropic extends ToolCallLLM<
} }
if ("toolCall" in options) { if ("toolCall" in options) {
const formattedMessage: MessageParam = { const text = extractText(message.content);
role: "assistant",
content: [
{
type: "text" as const,
text: extractText(message.content),
},
...options.toolCall.map((tool) => ({
type: "tool_use" as const,
id: tool.id,
name: tool.name,
input: this.parseToolInput(tool.input),
})),
],
};
return formattedMessage; const content: MessageParam["content"] = [];
if (text && text.trim().length > 0) {
// don't add empty text blocks
content.push({
type: "text" as const,
text: text,
});
}
content.push(
...options.toolCall.map((tool) => ({
type: "tool_use" as const,
id: tool.id,
name: tool.name,
input: this.parseToolInput(tool.input),
})),
);
return { role: "assistant", content } satisfies MessageParam;
} }
// Handle tool results // Handle tool results
@@ -362,8 +381,14 @@ export class Anthropic extends ToolCallLLM<
@wrapLLMEvent @wrapLLMEvent
async chat( async chat(
params: params:
| LLMChatParamsNonStreaming<AnthropicToolCallLLMMessageOptions> | LLMChatParamsNonStreaming<
| LLMChatParamsStreaming<AnthropicToolCallLLMMessageOptions>, AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
>
| LLMChatParamsStreaming<
AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
>,
): Promise< ): Promise<
| ChatResponse<AnthropicToolCallLLMMessageOptions> | ChatResponse<AnthropicToolCallLLMMessageOptions>
| AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> | AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
@@ -404,28 +429,29 @@ export class Anthropic extends ToolCallLLM<
anthropic = anthropic.beta.promptCaching; anthropic = anthropic.beta.promptCaching;
} }
if (stream) { const apiParams: MessageCreateParams = {
if (tools) {
console.error("Tools are not supported in streaming mode");
}
return this.streamChat(
messages.filter((m) => m.role !== "system"),
systemPrompt,
anthropic,
);
}
const apiParams = {
model: this.getModelName(this.model), model: this.getModelName(this.model),
messages: this.mergeConsecutiveMessages( messages: this.mergeConsecutiveMessages(
this.formatMessages(messages.filter((m) => m.role !== "system")), this.formatMessages(messages.filter((m) => m.role !== "system")),
), ),
max_tokens: this.maxTokens ?? 4096, max_tokens: this.maxTokens ?? 4096,
temperature: this.temperature, temperature: this.temperature,
top_p: this.topP, ...(this.topP ? { top_p: this.topP } : {}),
...(systemPrompt && { system: systemPrompt }), ...(systemPrompt && { system: systemPrompt }),
...Object.assign(
{},
this.additionalChatOptions,
params.additionalChatOptions,
),
}; };
if (stream) {
if (tools) {
console.error("Tools are not supported in streaming mode");
}
return this.streamChat(anthropic, apiParams);
}
if (tools?.length) { if (tools?.length) {
Object.assign(apiParams, { Object.assign(apiParams, {
tools: this.prepareToolsForAPI(tools), tools: this.prepareToolsForAPI(tools),
@@ -442,7 +468,10 @@ export class Anthropic extends ToolCallLLM<
raw: response, raw: response,
message: { message: {
content: response.content content: response.content
.filter((content): content is TextBlock => content.type === "text") .filter(
(content): content is TextBlock =>
content.type === "text" && content.text?.trim().length > 0,
)
.map((content) => ({ .map((content) => ({
type: "text" as const, type: "text" as const,
text: content.text, text: content.text,
@@ -466,36 +495,36 @@ export class Anthropic extends ToolCallLLM<
} }
protected async *streamChat( protected async *streamChat(
messages: ChatMessage<AnthropicToolCallLLMMessageOptions>[],
systemPrompt: string | Array<BetaTextBlockParam> | null,
anthropic: SDKAnthropic, anthropic: SDKAnthropic,
params: MessageCreateParams,
): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> { ): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> {
const stream = await anthropic.messages.create({ const stream = await anthropic.messages.create({
model: this.getModelName(this.model), ...params,
messages: this.formatMessages(messages),
max_tokens: this.maxTokens ?? 4096,
temperature: this.temperature,
top_p: this.topP,
stream: true, stream: true,
...(systemPrompt && { system: systemPrompt }),
}); });
let idx_counter: number = 0; let idx_counter: number = 0;
for await (const part of stream) { for await (const part of stream) {
const content = const textContent =
part.type === "content_block_delta" part.type === "content_block_delta" && part.delta.type === "text_delta"
? part.delta.type === "text_delta" ? part.delta.text
? part.delta.text
: part.delta
: undefined; : undefined;
if (typeof content !== "string") continue; const thinking =
part.type === "content_block_delta" &&
part.delta.type === "thinking_delta"
? part.delta.thinking
: undefined;
if (!textContent && !thinking) continue;
idx_counter++; idx_counter++;
yield { yield {
raw: part, raw: part,
delta: content, delta: textContent ?? "",
options: {}, options: {
thinking: thinking,
},
}; };
} }
return; return;

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