mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-01 22:14:03 -04:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5b4a53177e | |||
| 5da1cda939 | |||
| 1285e381bd | |||
| 5d5cd44276 | |||
| ed37c645af | |||
| c40adafecc | |||
| 995b465205 | |||
| 8929dcf1dd | |||
| af0b79f1cd | |||
| 1995b38660 | |||
| 001a5159cf | |||
| 9d7d2052e7 | |||
| fd90e25f0e | |||
| 97c00d67c3 | |||
| 6ebd7c2f13 | |||
| 0267bb0e8e | |||
| 7875ee91e6 | |||
| e3405fca44 | |||
| f3bc2b61e7 | |||
| 4c703767b7 | |||
| a27648200d | |||
| c93bb02002 | |||
| e9ded4e65f | |||
| 47a6f5fe5a | |||
| b80f33e264 | |||
| b6409b6823 | |||
| db3f556cb4 | |||
| 4b5179169b | |||
| 971d37ceba | |||
| 3e0ffdc688 | |||
| 049471bade | |||
| 1e296ebe72 | |||
| f9f1de9516 | |||
| f576812e7a | |||
| c3bf3c7178 |
@@ -105,6 +105,7 @@ jobs:
|
||||
run: |
|
||||
pnpm pack --pack-destination ${{ runner.temp }} -C packages/llamaindex
|
||||
pnpm pack --pack-destination ${{ runner.temp }} -C packages/workflow
|
||||
pnpm pack --pack-destination ${{ runner.temp }} -C packages/core
|
||||
- name: Install packed packages
|
||||
run: npm add ${{ runner.temp }}/*.tgz
|
||||
working-directory: e2e/npm
|
||||
@@ -162,7 +163,7 @@ jobs:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
directory: e2e/examples/vite-import-llamaindex
|
||||
skip_step: "install"
|
||||
build_script: build
|
||||
build_script: ci-build
|
||||
package_manager: pnpm
|
||||
|
||||
typecheck-examples:
|
||||
@@ -203,7 +204,7 @@ jobs:
|
||||
fi
|
||||
done
|
||||
- name: Install
|
||||
run: npm add ${{ runner.temp }}/*.tgz
|
||||
run: npm add ${{ runner.temp }}/*.tgz --legacy-peer-deps
|
||||
working-directory: ${{ runner.temp }}/examples
|
||||
- name: Run Type Check
|
||||
run: npx tsc --project ./tsconfig.json
|
||||
|
||||
@@ -1,5 +1,89 @@
|
||||
# @llamaindex/doc
|
||||
|
||||
## 0.2.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ed37c64: Addition of APAC_ANTHROPIC_CLAUDE_4_SONNET type/record in @llamaindex/aws for APAC support for claude 4 sonnet per issue 2184.
|
||||
- Updated dependencies [8929dcf]
|
||||
- Updated dependencies [5da1cda]
|
||||
- llamaindex@0.11.29
|
||||
- @llamaindex/core@0.6.21
|
||||
- @llamaindex/workflow@1.1.23
|
||||
- @llamaindex/openai@0.4.19
|
||||
- @llamaindex/cloud@4.1.3
|
||||
- @llamaindex/node-parser@2.0.21
|
||||
- @llamaindex/readers@3.1.20
|
||||
|
||||
## 0.2.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1995b38]
|
||||
- Updated dependencies [001a515]
|
||||
- Updated dependencies [9d7d205]
|
||||
- @llamaindex/workflow@1.1.22
|
||||
- @llamaindex/openai@0.4.18
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.2.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
- @llamaindex/cloud@4.1.2
|
||||
- llamaindex@0.11.27
|
||||
- @llamaindex/node-parser@2.0.20
|
||||
- @llamaindex/openai@0.4.17
|
||||
- @llamaindex/readers@3.1.19
|
||||
- @llamaindex/workflow@1.1.21
|
||||
|
||||
## 0.2.51
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4c70376]
|
||||
- @llamaindex/openai@0.4.16
|
||||
|
||||
## 0.2.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b6409b6]
|
||||
- @llamaindex/openai@0.4.15
|
||||
|
||||
## 0.2.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4b51791]
|
||||
- @llamaindex/cloud@4.1.1
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.2.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- Updated dependencies [049471b]
|
||||
- @llamaindex/cloud@4.1.0
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.2.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c3bf3c7]
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/cloud@4.0.28
|
||||
- @llamaindex/core@0.6.19
|
||||
- llamaindex@0.11.24
|
||||
- @llamaindex/node-parser@2.0.19
|
||||
- @llamaindex/openai@0.4.14
|
||||
- @llamaindex/readers@3.1.18
|
||||
- @llamaindex/workflow@1.1.20
|
||||
|
||||
## 0.2.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/doc",
|
||||
"version": "0.2.46",
|
||||
"version": "0.2.54",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"postinstall": "fumadocs-mdx",
|
||||
@@ -15,7 +15,7 @@
|
||||
"dependencies": {
|
||||
"@huggingface/transformers": "^3.5.0",
|
||||
"@icons-pack/react-simple-icons": "^10.1.0",
|
||||
"@llamaindex/chat-ui-docs": "^0.0.5",
|
||||
"@llamaindex/chat-ui-docs": "^0.1.0",
|
||||
"@llamaindex/cloud": "workspace:*",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/node-parser": "workspace:*",
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 154 KiB |
@@ -0,0 +1,85 @@
|
||||
---
|
||||
title: MCP Toolbox For Databases
|
||||
description: MCP Toolbox for Databases is an open source MCP server for databases.
|
||||
---
|
||||
|
||||
# MCP Toolbox for Databases
|
||||
|
||||
[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an open source MCP server for databases. It was designed with enterprise-grade and production-quality in mind. It enables you to develop tools easier, faster, and more securely by handling the complexities such as connection pooling, authentication, and more.
|
||||
|
||||
Toolbox Tools can be seemlessly integrated with LlamaIndex applications. For more
|
||||
information on [getting
|
||||
started](https://googleapis.github.io/genai-toolbox/getting-started/local_quickstart_js/) or
|
||||
[configuring](https://googleapis.github.io/genai-toolbox/getting-started/configure/)
|
||||
Toolbox, see the
|
||||
[documentation](https://googleapis.github.io/genai-toolbox/getting-started/introduction/).
|
||||
|
||||

|
||||
|
||||
### Configure and deploy
|
||||
|
||||
Toolbox is an open source server that you deploy and manage yourself. For more
|
||||
instructions on deploying and configuring, see the official Toolbox
|
||||
documentation:
|
||||
|
||||
* [Installing the Server](https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server)
|
||||
* [Configuring Toolbox](https://googleapis.github.io/genai-toolbox/getting-started/configure/)
|
||||
|
||||
### Install client SDK
|
||||
|
||||
LlamaIndex relies on the `@toolbox-sdk/core` node package to use Toolbox. Install the
|
||||
package before getting started:
|
||||
|
||||
```shell
|
||||
npm install @toolbox-sdk/core
|
||||
```
|
||||
|
||||
### Loading Toolbox Tools
|
||||
|
||||
Once your Toolbox server is configured and up and running, you can load tools
|
||||
from your server using the SDK:
|
||||
|
||||
```javascript
|
||||
import { gemini, GEMINI_MODEL } from "@llamaindex/google";
|
||||
import { agent } from "@llamaindex/workflow";
|
||||
import { tool } from "llamaindex";
|
||||
import { ToolboxClient } from "@toolbox-sdk/core";
|
||||
|
||||
// Initialize LLM
|
||||
const llm = gemini({
|
||||
model: GEMINI_MODEL.GEMINI_2_0_FLASH,
|
||||
apiKey: process.env.GOOGLE_API_KEY,
|
||||
});
|
||||
|
||||
// Replace with your Toolbox Server URL
|
||||
const URL = 'https://127.0.0.1:5000';
|
||||
|
||||
const client = new ToolboxClient("http://127.0.0.1:5000");
|
||||
const toolboxTools = await client.loadToolset("my-toolset");
|
||||
|
||||
const getTool = (toolboxTool) => tool({
|
||||
name: toolboxTool.getName(),
|
||||
description: toolboxTool.getDescription(),
|
||||
parameters: toolboxTool.getParamSchema(),
|
||||
execute: toolboxTool
|
||||
});
|
||||
const tools = toolboxTools.map(getTool);
|
||||
|
||||
const myAgent = agent({
|
||||
tools: tools,
|
||||
llm,
|
||||
memory,
|
||||
systemPrompt: prompt,
|
||||
});
|
||||
const result = await myAgent.run(query);
|
||||
console.log(result);
|
||||
```
|
||||
|
||||
### Advanced Toolbox Features
|
||||
|
||||
Toolbox has a variety of features to make developing Gen AI tools for databases seamless.
|
||||
For more information, read more about the following:
|
||||
|
||||
- [Authenticated Parameters](https://googleapis.github.io/genai-toolbox/resources/tools/#authenticated-parameters): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data
|
||||
- [Authorized Invocations](https://googleapis.github.io/genai-toolbox/resources/tools/#authorized-invocations): restrict access to use a tool based on the users Auth token
|
||||
- [OpenTelemetry](https://googleapis.github.io/genai-toolbox/how-to/export_telemetry/): get metrics and tracing from Toolbox with [OpenTelemetry](https://opentelemetry.io/docs/)
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"title": "Integration",
|
||||
"description": "See our integrations",
|
||||
"pages": ["open-llm-metry", "lang-trace", "vercel"]
|
||||
"pages": ["open-llm-metry", "lang-trace", "mcp-toolbox", "vercel"]
|
||||
}
|
||||
|
||||
@@ -101,6 +101,9 @@ const agent = agent({
|
||||
});
|
||||
```
|
||||
|
||||
You can also use [MCP Toolbox for
|
||||
Databases](/docs/llamaindex/integration/mcp-toolbox) to interact with MCP tools.
|
||||
|
||||
|
||||
## Function tool
|
||||
|
||||
|
||||
@@ -115,6 +115,7 @@ EU_AMAZON_NOVA_MICRO_1 = "eu.amazon.nova-micro-v1:0";
|
||||
APAC_ANTHROPIC_CLAUDE_3_5_SONNET = "apac.anthropic.claude-3-5-sonnet-20240620-v1:0";
|
||||
APAC_ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "apac.anthropic.claude-3-5-sonnet-20241022-v2:0";
|
||||
APAC_ANTHROPIC_CLAUDE_3_7_SONNET = "apac.anthropic.claude-3-7-sonnet-20250219-v1:0";
|
||||
APAC_ANTHROPIC_CLAUDE_4_SONNET = "apac.anthropic.claude-sonnet-4-20250514-v1:0";
|
||||
APAC_ANTHROPIC_CLAUDE_3_HAIKU = "apac.anthropic.claude-3-haiku-20240307-v1:0";
|
||||
APAC_ANTHROPIC_CLAUDE_3_SONNET = "apac.anthropic.claude-3-sonnet-20240229-v1:0";
|
||||
APAC_AMAZON_NOVA_PRO_1 = "apac.amazon.nova-pro-v1:0";
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: Custom Model Per Request
|
||||
---
|
||||
|
||||
There are scenarios, such as the case of a multi-tenant backend API, where it may be required to handle each request with a custom model.
|
||||
|
||||
In such a scenario, modifying the `Settings` object directly as follows is not recommended:
|
||||
|
||||
```typescript
|
||||
import { Settings } from 'llamaindex';
|
||||
import { OpenAIEmbedding } from '@llamaindex/embeddings-openai';
|
||||
|
||||
Settings.embedModel = new OpenAIEmbedding({ apiKey: 'CLIENT_API_KEY' });
|
||||
Settings.llm = openai({ apiKey: key, model: 'gpt-4o' })
|
||||
```
|
||||
|
||||
Setting `llm` and `embedModel` directly will lead to unpredictable responses, since `Settings` is global and mutable.
|
||||
This can lead to race conditions, as each request modifies `Settings.embedModel` or `Settings.llm`.
|
||||
|
||||
The recommended approach is to use `Settings.withEmbedModel` or `Settings.withLLM` as follows:
|
||||
|
||||
```typescript
|
||||
const embedModel = new OpenAIEmbedding({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
});
|
||||
const llm = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
||||
|
||||
const llmResponse = await Settings.withEmbedModel(embedModel, async () => {
|
||||
return Settings.withLLM(llm, async () => {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
// Create Document object with essay
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
// Split text and create embeddings. Store them in a VectorStoreIndex
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const { message, sourceNodes } = await queryEngine.query({
|
||||
query: "What did the author do in college?",
|
||||
});
|
||||
// Return response with sources
|
||||
return message.content;
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
The full example can be found [here](https://github.com/run-llama/LlamaIndexTS/tree/main/examples/local-settings).
|
||||
@@ -93,4 +93,4 @@ async function main() {
|
||||
main().catch(console.error);
|
||||
```
|
||||
|
||||
You can see the [full example file](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexLocal.ts).
|
||||
You can see the [full example file](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/index/vectorIndexLocal.ts).
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"workflows",
|
||||
"local_llm",
|
||||
"chatbot",
|
||||
"structured_data_extraction"
|
||||
"structured_data_extraction",
|
||||
"custom_model_per_request"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -46,3 +46,31 @@ You should expect output something like:
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Using the `exec` method
|
||||
|
||||
Many LLMs do not natively support structured output, and often rely exclusively on prompt or context engineering.
|
||||
|
||||
In this sense, we proved you with an alternative for structured data extraction, using the `exec` method with `responseFormat`.
|
||||
|
||||
For example, you can, in a new folder, install our Anthropic integration and `zod` v3:
|
||||
|
||||
```package-install
|
||||
npm init
|
||||
npm i -D typescript @types/node
|
||||
npm i @llamaindex/anthropic zod@3.25.76
|
||||
```
|
||||
|
||||
And then try extracting data with this code:
|
||||
|
||||
<include cwd>../../examples/agents/tools/response-format-exec.ts</include>
|
||||
|
||||
The output should look like this:
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "La Divina Commedia",
|
||||
"author": "Dante Alighieri",
|
||||
"year": 1321
|
||||
}
|
||||
```
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/cloudflare-worker-agent-test
|
||||
|
||||
## 0.0.190
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 0.0.189
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.0.188
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 0.0.187
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.0.186
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.0.185
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 0.0.184
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||
"version": "0.0.184",
|
||||
"version": "0.0.190",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,38 @@
|
||||
# @llamaindex/llama-parse-browser-test
|
||||
|
||||
## 0.0.87
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@4.1.3
|
||||
|
||||
## 0.0.86
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@4.1.2
|
||||
|
||||
## 0.0.85
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4b51791]
|
||||
- @llamaindex/cloud@4.1.1
|
||||
|
||||
## 0.0.84
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- @llamaindex/cloud@4.1.0
|
||||
|
||||
## 0.0.83
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c3bf3c7]
|
||||
- @llamaindex/cloud@4.0.28
|
||||
|
||||
## 0.0.82
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llama-parse-browser-test",
|
||||
"private": true,
|
||||
"version": "0.0.82",
|
||||
"version": "0.0.87",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.8.3",
|
||||
"vite": "^6.3.3",
|
||||
"vite": "^6.3.6",
|
||||
"vite-plugin-wasm": "^3.4.1"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/next-agent-test
|
||||
|
||||
## 0.1.190
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 0.1.189
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.1.188
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 0.1.187
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.1.186
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.1.185
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 0.1.184
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-agent-test",
|
||||
"version": "0.1.184",
|
||||
"version": "0.1.190",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# test-edge-runtime
|
||||
|
||||
## 0.1.189
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 0.1.188
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.1.187
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 0.1.186
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.1.185
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.1.184
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 0.1.183
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||
"version": "0.1.183",
|
||||
"version": "0.1.189",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,62 @@
|
||||
# @llamaindex/next-node-runtime
|
||||
|
||||
## 0.1.61
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
- @llamaindex/huggingface@0.1.29
|
||||
- @llamaindex/readers@3.1.20
|
||||
|
||||
## 0.1.60
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
- @llamaindex/huggingface@0.1.28
|
||||
|
||||
## 0.1.59
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
- @llamaindex/huggingface@0.1.27
|
||||
- @llamaindex/readers@3.1.19
|
||||
|
||||
## 0.1.58
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/huggingface@0.1.26
|
||||
|
||||
## 0.1.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/huggingface@0.1.25
|
||||
|
||||
## 0.1.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.1.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.1.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
- @llamaindex/huggingface@0.1.24
|
||||
- @llamaindex/readers@3.1.18
|
||||
|
||||
## 0.1.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-node-runtime-test",
|
||||
"version": "0.1.53",
|
||||
"version": "0.1.61",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# vite-import-llamaindex
|
||||
|
||||
## 0.0.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 0.0.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.0.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 0.0.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.0.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.0.51
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 0.0.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"name": "vite-import-llamaindex",
|
||||
"private": true,
|
||||
"version": "0.0.50",
|
||||
"version": "0.0.56",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"size-limit": "size-limit"
|
||||
"size-limit": "size-limit",
|
||||
"ci-build": "pnpm -C ../../../ build && vite build"
|
||||
},
|
||||
"size-limit": [
|
||||
{
|
||||
@@ -16,7 +17,7 @@
|
||||
"@size-limit/preset-big-lib": "^11.1.6",
|
||||
"size-limit": "^11.1.6",
|
||||
"typescript": "^5.8.3",
|
||||
"vite": "^6.3.3"
|
||||
"vite": "^6.3.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*"
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/waku-query-engine-test
|
||||
|
||||
## 0.0.190
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 0.0.189
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.0.188
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 0.0.187
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.0.186
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.0.185
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 0.0.184
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/waku-query-engine-test",
|
||||
"version": "0.0.184",
|
||||
"version": "0.0.190",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -44,9 +44,7 @@ export const getWeatherTool = FunctionTool.from(
|
||||
name: "getWeather",
|
||||
description: "Get the weather for a city",
|
||||
parameters: z.object({
|
||||
city: z.string({
|
||||
description: "The city to get the weather for",
|
||||
}),
|
||||
city: z.string().describe("The city to get the weather for"),
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1,5 +1,241 @@
|
||||
# examples
|
||||
|
||||
## 0.3.41
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- Updated dependencies [5da1cda]
|
||||
- Updated dependencies [5d5cd44]
|
||||
- Updated dependencies [c40adaf]
|
||||
- llamaindex@0.11.29
|
||||
- @llamaindex/core@0.6.21
|
||||
- @llamaindex/tools@0.1.11
|
||||
- @llamaindex/workflow@1.1.23
|
||||
- @llamaindex/ollama@0.1.22
|
||||
- @llamaindex/openai@0.4.19
|
||||
- @llamaindex/vercel@0.1.21
|
||||
- @llamaindex/anthropic@0.3.24
|
||||
- @llamaindex/google@0.3.21
|
||||
- @llamaindex/cloud@4.1.3
|
||||
- @llamaindex/node-parser@2.0.21
|
||||
- @llamaindex/assemblyai@0.1.20
|
||||
- @llamaindex/clip@0.0.75
|
||||
- @llamaindex/cohere@0.0.35
|
||||
- @llamaindex/deepinfra@0.0.75
|
||||
- @llamaindex/discord@0.1.20
|
||||
- @llamaindex/huggingface@0.1.29
|
||||
- @llamaindex/jinaai@0.0.35
|
||||
- @llamaindex/mistral@0.1.21
|
||||
- @llamaindex/mixedbread@0.0.35
|
||||
- @llamaindex/notion@0.1.20
|
||||
- @llamaindex/perplexity@0.0.32
|
||||
- @llamaindex/portkey-ai@0.0.63
|
||||
- @llamaindex/replicate@0.0.63
|
||||
- @llamaindex/bm25-retriever@0.0.10
|
||||
- @llamaindex/astra@0.0.35
|
||||
- @llamaindex/azure@0.1.36
|
||||
- @llamaindex/chroma@0.0.35
|
||||
- @llamaindex/elastic-search@0.1.21
|
||||
- @llamaindex/firestore@1.0.28
|
||||
- @llamaindex/milvus@0.1.30
|
||||
- @llamaindex/mongodb@0.0.36
|
||||
- @llamaindex/pinecone@0.1.21
|
||||
- @llamaindex/postgres@0.0.64
|
||||
- @llamaindex/qdrant@0.1.31
|
||||
- @llamaindex/supabase@0.1.22
|
||||
- @llamaindex/upstash@0.0.35
|
||||
- @llamaindex/weaviate@0.0.36
|
||||
- @llamaindex/voyage-ai@1.0.27
|
||||
- @llamaindex/readers@3.1.20
|
||||
- @llamaindex/deepseek@0.0.37
|
||||
- @llamaindex/fireworks@0.0.35
|
||||
- @llamaindex/groq@0.0.91
|
||||
- @llamaindex/together@0.0.35
|
||||
- @llamaindex/vllm@0.0.61
|
||||
- @llamaindex/xai@0.0.22
|
||||
|
||||
## 0.3.40
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1995b38]
|
||||
- Updated dependencies [001a515]
|
||||
- Updated dependencies [9d7d205]
|
||||
- @llamaindex/workflow@1.1.22
|
||||
- @llamaindex/openai@0.4.18
|
||||
- llamaindex@0.11.28
|
||||
- @llamaindex/clip@0.0.74
|
||||
- @llamaindex/deepinfra@0.0.74
|
||||
- @llamaindex/deepseek@0.0.36
|
||||
- @llamaindex/fireworks@0.0.34
|
||||
- @llamaindex/groq@0.0.90
|
||||
- @llamaindex/huggingface@0.1.28
|
||||
- @llamaindex/jinaai@0.0.34
|
||||
- @llamaindex/perplexity@0.0.31
|
||||
- @llamaindex/azure@0.1.35
|
||||
- @llamaindex/together@0.0.34
|
||||
- @llamaindex/vllm@0.0.60
|
||||
- @llamaindex/xai@0.0.21
|
||||
|
||||
## 0.3.39
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
- @llamaindex/cloud@4.1.2
|
||||
- llamaindex@0.11.27
|
||||
- @llamaindex/node-parser@2.0.20
|
||||
- @llamaindex/anthropic@0.3.23
|
||||
- @llamaindex/assemblyai@0.1.19
|
||||
- @llamaindex/clip@0.0.73
|
||||
- @llamaindex/cohere@0.0.34
|
||||
- @llamaindex/deepinfra@0.0.73
|
||||
- @llamaindex/discord@0.1.19
|
||||
- @llamaindex/google@0.3.20
|
||||
- @llamaindex/huggingface@0.1.27
|
||||
- @llamaindex/jinaai@0.0.33
|
||||
- @llamaindex/mistral@0.1.20
|
||||
- @llamaindex/mixedbread@0.0.34
|
||||
- @llamaindex/notion@0.1.19
|
||||
- @llamaindex/ollama@0.1.21
|
||||
- @llamaindex/openai@0.4.17
|
||||
- @llamaindex/perplexity@0.0.30
|
||||
- @llamaindex/portkey-ai@0.0.62
|
||||
- @llamaindex/replicate@0.0.62
|
||||
- @llamaindex/bm25-retriever@0.0.9
|
||||
- @llamaindex/astra@0.0.34
|
||||
- @llamaindex/azure@0.1.34
|
||||
- @llamaindex/chroma@0.0.34
|
||||
- @llamaindex/elastic-search@0.1.20
|
||||
- @llamaindex/firestore@1.0.27
|
||||
- @llamaindex/milvus@0.1.29
|
||||
- @llamaindex/mongodb@0.0.35
|
||||
- @llamaindex/pinecone@0.1.20
|
||||
- @llamaindex/postgres@0.0.63
|
||||
- @llamaindex/qdrant@0.1.30
|
||||
- @llamaindex/supabase@0.1.21
|
||||
- @llamaindex/upstash@0.0.34
|
||||
- @llamaindex/weaviate@0.0.35
|
||||
- @llamaindex/vercel@0.1.20
|
||||
- @llamaindex/voyage-ai@1.0.26
|
||||
- @llamaindex/readers@3.1.19
|
||||
- @llamaindex/tools@0.1.10
|
||||
- @llamaindex/workflow@1.1.21
|
||||
- @llamaindex/deepseek@0.0.35
|
||||
- @llamaindex/fireworks@0.0.33
|
||||
- @llamaindex/groq@0.0.89
|
||||
- @llamaindex/together@0.0.33
|
||||
- @llamaindex/vllm@0.0.59
|
||||
- @llamaindex/xai@0.0.20
|
||||
|
||||
## 0.3.38
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4c70376]
|
||||
- @llamaindex/openai@0.4.16
|
||||
- @llamaindex/clip@0.0.72
|
||||
- @llamaindex/deepinfra@0.0.72
|
||||
- @llamaindex/deepseek@0.0.34
|
||||
- @llamaindex/fireworks@0.0.32
|
||||
- @llamaindex/groq@0.0.88
|
||||
- @llamaindex/huggingface@0.1.26
|
||||
- @llamaindex/jinaai@0.0.32
|
||||
- @llamaindex/perplexity@0.0.29
|
||||
- @llamaindex/azure@0.1.33
|
||||
- @llamaindex/together@0.0.32
|
||||
- @llamaindex/vllm@0.0.58
|
||||
- @llamaindex/xai@0.0.19
|
||||
|
||||
## 0.3.37
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [47a6f5f]
|
||||
- Updated dependencies [b80f33e]
|
||||
- Updated dependencies [b6409b6]
|
||||
- Updated dependencies [b80f33e]
|
||||
- @llamaindex/ollama@0.1.20
|
||||
- @llamaindex/anthropic@0.3.22
|
||||
- @llamaindex/openai@0.4.15
|
||||
- @llamaindex/clip@0.0.71
|
||||
- @llamaindex/deepinfra@0.0.71
|
||||
- @llamaindex/deepseek@0.0.33
|
||||
- @llamaindex/fireworks@0.0.31
|
||||
- @llamaindex/groq@0.0.87
|
||||
- @llamaindex/huggingface@0.1.25
|
||||
- @llamaindex/jinaai@0.0.31
|
||||
- @llamaindex/perplexity@0.0.28
|
||||
- @llamaindex/azure@0.1.32
|
||||
- @llamaindex/together@0.0.31
|
||||
- @llamaindex/vllm@0.0.57
|
||||
- @llamaindex/xai@0.0.18
|
||||
|
||||
## 0.3.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4b51791]
|
||||
- Updated dependencies [971d37c]
|
||||
- @llamaindex/cloud@4.1.1
|
||||
- @llamaindex/deepseek@0.0.32
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.3.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c3bf3c7]
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/cloud@4.0.28
|
||||
- @llamaindex/core@0.6.19
|
||||
- llamaindex@0.11.24
|
||||
- @llamaindex/node-parser@2.0.19
|
||||
- @llamaindex/anthropic@0.3.21
|
||||
- @llamaindex/assemblyai@0.1.18
|
||||
- @llamaindex/clip@0.0.70
|
||||
- @llamaindex/cohere@0.0.33
|
||||
- @llamaindex/deepinfra@0.0.70
|
||||
- @llamaindex/discord@0.1.18
|
||||
- @llamaindex/google@0.3.18
|
||||
- @llamaindex/huggingface@0.1.24
|
||||
- @llamaindex/jinaai@0.0.30
|
||||
- @llamaindex/mistral@0.1.19
|
||||
- @llamaindex/mixedbread@0.0.33
|
||||
- @llamaindex/notion@0.1.18
|
||||
- @llamaindex/ollama@0.1.19
|
||||
- @llamaindex/openai@0.4.14
|
||||
- @llamaindex/perplexity@0.0.27
|
||||
- @llamaindex/portkey-ai@0.0.61
|
||||
- @llamaindex/replicate@0.0.61
|
||||
- @llamaindex/bm25-retriever@0.0.8
|
||||
- @llamaindex/astra@0.0.33
|
||||
- @llamaindex/azure@0.1.31
|
||||
- @llamaindex/chroma@0.0.33
|
||||
- @llamaindex/elastic-search@0.1.19
|
||||
- @llamaindex/firestore@1.0.26
|
||||
- @llamaindex/milvus@0.1.28
|
||||
- @llamaindex/mongodb@0.0.34
|
||||
- @llamaindex/pinecone@0.1.19
|
||||
- @llamaindex/postgres@0.0.62
|
||||
- @llamaindex/qdrant@0.1.29
|
||||
- @llamaindex/supabase@0.1.20
|
||||
- @llamaindex/upstash@0.0.33
|
||||
- @llamaindex/weaviate@0.0.34
|
||||
- @llamaindex/vercel@0.1.19
|
||||
- @llamaindex/voyage-ai@1.0.25
|
||||
- @llamaindex/readers@3.1.18
|
||||
- @llamaindex/tools@0.1.9
|
||||
- @llamaindex/workflow@1.1.20
|
||||
- @llamaindex/deepseek@0.0.31
|
||||
- @llamaindex/fireworks@0.0.30
|
||||
- @llamaindex/groq@0.0.86
|
||||
- @llamaindex/together@0.0.30
|
||||
- @llamaindex/vllm@0.0.56
|
||||
- @llamaindex/xai@0.0.17
|
||||
|
||||
## 0.3.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -20,9 +20,7 @@ const saveFileTool = tool({
|
||||
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",
|
||||
}),
|
||||
content: z.string().describe("The content to save into a file"),
|
||||
}),
|
||||
execute: ({ content }: { content: string }) => {
|
||||
const filePath = os.tmpdir() + "/report.md";
|
||||
|
||||
@@ -17,9 +17,7 @@ const userQuestion = "which are the best comedies after 2010?";
|
||||
description:
|
||||
"Execute python code in a Jupyter notebook cell and return any result, stdout, stderr, display_data, and error.",
|
||||
parameters: z.object({
|
||||
code: z.string({
|
||||
description: "The python code to execute in a single cell.",
|
||||
}),
|
||||
code: z.string().describe("The python code to execute in a single cell."),
|
||||
}),
|
||||
execute: ({ code }) => {
|
||||
console.log(
|
||||
|
||||
@@ -26,9 +26,7 @@ const temperatureConverterTool = tool({
|
||||
description: "Convert a temperature from Fahrenheit to Celsius",
|
||||
name: "fahrenheitToCelsius",
|
||||
parameters: z.object({
|
||||
temperature: z.number({
|
||||
description: "The temperature in Fahrenheit",
|
||||
}),
|
||||
temperature: z.number().describe("The temperature in Fahrenheit"),
|
||||
}),
|
||||
execute: ({ temperature }) => {
|
||||
return ((temperature - 32) * 5) / 9;
|
||||
@@ -39,9 +37,7 @@ const temperatureFetcherTool = tool({
|
||||
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",
|
||||
}),
|
||||
city: z.string().describe("The city to fetch the temperature for"),
|
||||
}),
|
||||
execute: ({ city }) => {
|
||||
const temperature = Math.floor(Math.random() * 58) + 32;
|
||||
|
||||
@@ -14,9 +14,7 @@ const weatherTool = tool({
|
||||
name: "weather",
|
||||
description: "Get the weather",
|
||||
parameters: z.object({
|
||||
location: z.string({
|
||||
description: "The location to get the weather for",
|
||||
}),
|
||||
location: z.string().describe("The location to get the weather for"),
|
||||
}),
|
||||
execute: ({ location }) => {
|
||||
return `The weather in ${location} is sunny`;
|
||||
@@ -27,9 +25,7 @@ const inflationTool = tool({
|
||||
name: "inflation",
|
||||
description: "Get the inflation",
|
||||
parameters: z.object({
|
||||
location: z.string({
|
||||
description: "The location to get the inflation for",
|
||||
}),
|
||||
location: z.string().describe("The location to get the inflation for"),
|
||||
}),
|
||||
execute: ({ location }) => {
|
||||
return `The inflation in ${location} is 2%`;
|
||||
@@ -41,9 +37,7 @@ const saveFileTool = tool({
|
||||
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",
|
||||
}),
|
||||
content: z.string().describe("The content to save into a file"),
|
||||
}),
|
||||
execute: ({ content }) => {
|
||||
const filePath = "./report.md";
|
||||
|
||||
@@ -14,11 +14,8 @@ const writeJokeSchema = z.object({
|
||||
.describe("The topic to write a joke or describe the joke to improve."),
|
||||
writtenJoke: z.optional(z.string()).describe("The written joke."),
|
||||
retriedTimes: z
|
||||
.number()
|
||||
.default(0)
|
||||
.describe(
|
||||
"The retried times for writing the joke. Always increase this from the input retriedTimes.",
|
||||
),
|
||||
.optional(z.number().default(0))
|
||||
.describe("The retried times for writing the joke."),
|
||||
});
|
||||
|
||||
const critiqueSchema = z.object({
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import { Anthropic } from "@llamaindex/anthropic";
|
||||
import { ChatMessage, ToolCall } from "llamaindex";
|
||||
import { z } from "zod";
|
||||
|
||||
const llm = new Anthropic({ model: "claude-4-0-sonnet" });
|
||||
|
||||
const responseSchema = z.object({
|
||||
title: z.string().describe("The title of the book"),
|
||||
author: z.string().describe("The author of the book"),
|
||||
year: z.number().describe("The publication year"),
|
||||
});
|
||||
|
||||
async function main() {
|
||||
const messages: ChatMessage[] = [];
|
||||
let toolCalls: ToolCall[] = [];
|
||||
do {
|
||||
const result = await llm.exec({
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: `You are a book expert. Your task is, given a user message, extract the title, author and publication year of the book and output them in JSON format.`,
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: `I have been reading La Divina Commedia by Dante Alighieri, published in 1321, which tells the story of a guy who goes through Hell, Purgatory and Heaven just to meet his beloved ex-girlfriend.`,
|
||||
},
|
||||
],
|
||||
responseFormat: responseSchema,
|
||||
});
|
||||
console.log(result.newMessages[0].content);
|
||||
messages.push(...result.newMessages);
|
||||
toolCalls = result.toolCalls;
|
||||
} while (toolCalls.length == 0);
|
||||
|
||||
console.log(messages[1].content);
|
||||
console.log(toolCalls);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -22,7 +22,7 @@ const { withState, getContext } = createStatefulMiddleware(() => ({
|
||||
const jokeFlow = withState(createWorkflow());
|
||||
|
||||
// Define handlers for each step
|
||||
jokeFlow.handle([startEvent], async (event) => {
|
||||
jokeFlow.handle([startEvent], async (context, event) => {
|
||||
// Prompt the LLM to write a joke
|
||||
const prompt = `Write your best joke about ${event.data}. Write the joke between <joke> and </joke> tags.`;
|
||||
const response = await llm.complete({ prompt });
|
||||
@@ -34,7 +34,7 @@ jokeFlow.handle([startEvent], async (event) => {
|
||||
return jokeEvent.with({ joke: joke });
|
||||
});
|
||||
|
||||
jokeFlow.handle([jokeEvent], async (event) => {
|
||||
jokeFlow.handle([jokeEvent], async (context, event) => {
|
||||
// Prompt the LLM to critique the joke
|
||||
const prompt = `Give a thorough critique of the following joke. If the joke needs improvement, put "IMPROVE" somewhere in the critique: ${event.data.joke}`;
|
||||
const response = await llm.complete({ prompt });
|
||||
@@ -50,9 +50,9 @@ jokeFlow.handle([jokeEvent], async (event) => {
|
||||
return resultEvent.with({ joke: event.data.joke, critique: response.text });
|
||||
});
|
||||
|
||||
jokeFlow.handle([critiqueEvent], async (event) => {
|
||||
jokeFlow.handle([critiqueEvent], async (context, event) => {
|
||||
// Keep track of the number of iterations
|
||||
const state = getContext().state;
|
||||
const state = context.state;
|
||||
state.numIterations++;
|
||||
|
||||
// Write a new joke based on the previous joke and critique
|
||||
|
||||
@@ -29,9 +29,9 @@ async function callLLM(init: { model: string }) {
|
||||
description:
|
||||
"Execute python code in a Jupyter notebook cell and return any result, stdout, stderr, display_data, and error.",
|
||||
parameters: z.object({
|
||||
code: z.string({
|
||||
description: "The python code to execute in a single cell.",
|
||||
}),
|
||||
code: z
|
||||
.string()
|
||||
.describe("The python code to execute in a single cell."),
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
|
||||
import express, { Request, Response } from "express";
|
||||
import fs from "fs/promises";
|
||||
import { Document, Settings, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
const app = express();
|
||||
const port = 3000;
|
||||
|
||||
app.get("/default", async (req: Request, res: Response) => {
|
||||
const embedModel = new OpenAIEmbedding({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
});
|
||||
const llm = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
||||
|
||||
const llmResponse = await Settings.withEmbedModel(embedModel, async () => {
|
||||
return Settings.withLLM(llm, async () => {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
// Create Document object with essay
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
// Split text and create embeddings. Store them in a VectorStoreIndex
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const { message, sourceNodes } = await queryEngine.query({
|
||||
query: "What did the author do in college?",
|
||||
});
|
||||
// Return response with sources
|
||||
return message.content;
|
||||
});
|
||||
});
|
||||
// res.send(message.content)
|
||||
res.send(llmResponse);
|
||||
});
|
||||
|
||||
app.get("/custom", async (req: Request, res: Response) => {
|
||||
const embedModel = new OpenAIEmbedding({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
model: "text-embedding-3-small",
|
||||
});
|
||||
const llm = new OpenAI({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
model: "gpt-3.5-turbo",
|
||||
});
|
||||
|
||||
const llmResponse = await Settings.withEmbedModel(embedModel, async () => {
|
||||
return Settings.withLLM(llm, async () => {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
// Create Document object with essay
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
// Split text and create embeddings. Store them in a VectorStoreIndex
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const { message, sourceNodes } = await queryEngine.query({
|
||||
query: "What did the author do in college?",
|
||||
});
|
||||
// Return response with sources
|
||||
return message.content;
|
||||
});
|
||||
});
|
||||
// res.send(message.content)
|
||||
res.send(llmResponse);
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Example app listening on port ${port}`);
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "local-settings",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"private": "true",
|
||||
"scripts": {
|
||||
"test": "echo \"No tests for example package\""
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.3",
|
||||
"typescript": "^5.9.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@llamaindex/openai": "^0.4.16",
|
||||
"express": "^5.1.0",
|
||||
"llamaindex": "^0.11.26"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"moduleResolution": "node",
|
||||
"types": ["node", "express"]
|
||||
},
|
||||
"include": ["*.ts"]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { anthropic } from "@llamaindex/anthropic";
|
||||
import { agent } from "@llamaindex/workflow";
|
||||
|
||||
(async function () {
|
||||
const workflow = agent({
|
||||
llm: anthropic({
|
||||
model: "claude-4-1-opus",
|
||||
}),
|
||||
});
|
||||
const result = await workflow.run(
|
||||
"What are three compounds we should consider investigating to advance research into new antibiotics? Why should we consider them?",
|
||||
);
|
||||
console.log(result.data.result);
|
||||
})();
|
||||
@@ -8,9 +8,7 @@ const weatherTool = tool({
|
||||
name: "weather",
|
||||
description: "Get the weather",
|
||||
parameters: z.object({
|
||||
location: z.string({
|
||||
description: "The location to get the weather for",
|
||||
}),
|
||||
location: z.string().describe("The location to get the weather for"),
|
||||
}),
|
||||
execute: ({ location }) => {
|
||||
return `The weather in ${location} is rainy`;
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import { ollama } from "@llamaindex/ollama";
|
||||
|
||||
(async () => {
|
||||
const llm = ollama({
|
||||
model: "gpt-oss:20b",
|
||||
});
|
||||
const response = await llm.complete({ prompt: "How are you?" });
|
||||
console.log("Response:", response.text);
|
||||
})();
|
||||
@@ -7,9 +7,7 @@ async function main() {
|
||||
name: "weather",
|
||||
description: "Get the weather",
|
||||
parameters: z.object({
|
||||
location: z.string({
|
||||
description: "The location to get the weather for",
|
||||
}),
|
||||
location: z.string().describe("The location to get the weather for"),
|
||||
}),
|
||||
execute: ({ location }) => {
|
||||
return `The weather in ${location} is sunny`;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { stepCountIs, streamText } from "ai";
|
||||
import { Document, LlamaCloudIndex } from "llamaindex";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
@@ -28,7 +28,7 @@ async function main() {
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
}),
|
||||
},
|
||||
maxSteps: 5,
|
||||
stopWhen: stepCountIs(5),
|
||||
});
|
||||
|
||||
for await (const textPart of result.textStream) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { stepCountIs, streamText } from "ai";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
import fs from "node:fs/promises";
|
||||
@@ -24,7 +24,7 @@ async function main() {
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
}),
|
||||
},
|
||||
maxSteps: 5,
|
||||
stopWhen: stepCountIs(5),
|
||||
});
|
||||
|
||||
for await (const textPart of result.textStream) {
|
||||
|
||||
+51
-50
@@ -1,77 +1,78 @@
|
||||
{
|
||||
"name": "@llamaindex/examples",
|
||||
"version": "0.3.34",
|
||||
"version": "0.3.41",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
"start": "echo 'To get started, run `npx tsx <path to example>`'"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ai-sdk/openai": "^1.0.5",
|
||||
"@ai-sdk/openai": "^2.0.27",
|
||||
"@azure/cosmos": "^4.1.1",
|
||||
"@azure/identity": "^4.4.1",
|
||||
"@azure/search-documents": "^12.1.0",
|
||||
"@llamaindex/anthropic": "^0.3.20",
|
||||
"@llamaindex/assemblyai": "^0.1.17",
|
||||
"@llamaindex/astra": "^0.0.32",
|
||||
"@llamaindex/azure": "^0.1.30",
|
||||
"@llamaindex/bm25-retriever": "^0.0.7",
|
||||
"@llamaindex/chroma": "^0.0.32",
|
||||
"@llamaindex/clip": "^0.0.69",
|
||||
"@llamaindex/cloud": "^4.0.27",
|
||||
"@llamaindex/cohere": "^0.0.32",
|
||||
"@llamaindex/core": "^0.6.18",
|
||||
"@llamaindex/deepinfra": "^0.0.69",
|
||||
"@llamaindex/deepseek": "^0.0.30",
|
||||
"@llamaindex/discord": "^0.1.17",
|
||||
"@llamaindex/elastic-search": "^0.1.18",
|
||||
"@llamaindex/anthropic": "^0.3.24",
|
||||
"@llamaindex/assemblyai": "^0.1.20",
|
||||
"@llamaindex/astra": "^0.0.35",
|
||||
"@llamaindex/azure": "^0.1.36",
|
||||
"@llamaindex/bm25-retriever": "^0.0.10",
|
||||
"@llamaindex/chroma": "^0.0.35",
|
||||
"@llamaindex/clip": "^0.0.75",
|
||||
"@llamaindex/cloud": "^4.1.3",
|
||||
"@llamaindex/cohere": "^0.0.35",
|
||||
"@llamaindex/core": "^0.6.21",
|
||||
"@llamaindex/deepinfra": "^0.0.75",
|
||||
"@llamaindex/deepseek": "^0.0.37",
|
||||
"@llamaindex/discord": "^0.1.20",
|
||||
"@llamaindex/elastic-search": "^0.1.21",
|
||||
"@llamaindex/env": "^0.1.30",
|
||||
"@llamaindex/firestore": "^1.0.25",
|
||||
"@llamaindex/fireworks": "^0.0.29",
|
||||
"@llamaindex/google": "^0.3.17",
|
||||
"@llamaindex/groq": "^0.0.85",
|
||||
"@llamaindex/huggingface": "^0.1.23",
|
||||
"@llamaindex/jinaai": "^0.0.29",
|
||||
"@llamaindex/milvus": "^0.1.27",
|
||||
"@llamaindex/mistral": "^0.1.18",
|
||||
"@llamaindex/mixedbread": "^0.0.32",
|
||||
"@llamaindex/mongodb": "^0.0.33",
|
||||
"@llamaindex/node-parser": "^2.0.18",
|
||||
"@llamaindex/notion": "^0.1.17",
|
||||
"@llamaindex/ollama": "^0.1.18",
|
||||
"@llamaindex/openai": "^0.4.13",
|
||||
"@llamaindex/perplexity": "^0.0.26",
|
||||
"@llamaindex/pinecone": "^0.1.18",
|
||||
"@llamaindex/portkey-ai": "^0.0.60",
|
||||
"@llamaindex/postgres": "^0.0.61",
|
||||
"@llamaindex/qdrant": "^0.1.28",
|
||||
"@llamaindex/readers": "^3.1.17",
|
||||
"@llamaindex/replicate": "^0.0.60",
|
||||
"@llamaindex/supabase": "^0.1.19",
|
||||
"@llamaindex/together": "^0.0.29",
|
||||
"@llamaindex/tools": "^0.1.8",
|
||||
"@llamaindex/upstash": "^0.0.32",
|
||||
"@llamaindex/vercel": "^0.1.18",
|
||||
"@llamaindex/vllm": "^0.0.55",
|
||||
"@llamaindex/voyage-ai": "^1.0.24",
|
||||
"@llamaindex/weaviate": "^0.0.33",
|
||||
"@llamaindex/workflow": "^1.1.19",
|
||||
"@llamaindex/xai": "^0.0.16",
|
||||
"@llamaindex/firestore": "^1.0.28",
|
||||
"@llamaindex/fireworks": "^0.0.35",
|
||||
"@llamaindex/google": "^0.3.21",
|
||||
"@llamaindex/groq": "^0.0.91",
|
||||
"@llamaindex/huggingface": "^0.1.29",
|
||||
"@llamaindex/jinaai": "^0.0.35",
|
||||
"@llamaindex/milvus": "^0.1.30",
|
||||
"@llamaindex/mistral": "^0.1.21",
|
||||
"@llamaindex/mixedbread": "^0.0.35",
|
||||
"@llamaindex/mongodb": "^0.0.36",
|
||||
"@llamaindex/node-parser": "^2.0.21",
|
||||
"@llamaindex/notion": "^0.1.20",
|
||||
"@llamaindex/ollama": "^0.1.22",
|
||||
"@llamaindex/openai": "^0.4.19",
|
||||
"@llamaindex/perplexity": "^0.0.32",
|
||||
"@llamaindex/pinecone": "^0.1.21",
|
||||
"@llamaindex/portkey-ai": "^0.0.63",
|
||||
"@llamaindex/postgres": "^0.0.64",
|
||||
"@llamaindex/qdrant": "^0.1.31",
|
||||
"@llamaindex/readers": "^3.1.20",
|
||||
"@llamaindex/replicate": "^0.0.63",
|
||||
"@llamaindex/supabase": "^0.1.22",
|
||||
"@llamaindex/together": "^0.0.35",
|
||||
"@llamaindex/tools": "^0.1.11",
|
||||
"@llamaindex/upstash": "^0.0.35",
|
||||
"@llamaindex/vercel": "^0.1.21",
|
||||
"@llamaindex/vllm": "^0.0.61",
|
||||
"@llamaindex/voyage-ai": "^1.0.27",
|
||||
"@llamaindex/weaviate": "^0.0.36",
|
||||
"@llamaindex/workflow": "^1.1.23",
|
||||
"@llamaindex/xai": "^0.0.22",
|
||||
"@notionhq/client": "^4.0.0",
|
||||
"@pinecone-database/pinecone": "^4.0.0",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
"ai": "^4.3.17",
|
||||
"ai": "^5.0.39",
|
||||
"ajv": "^8.17.1",
|
||||
"commander": "^12.1.0",
|
||||
"dotenv": "^17.2.0",
|
||||
"js-tiktoken": "^1.0.14",
|
||||
"llamaindex": "^0.11.23",
|
||||
"llamaindex": "^0.11.29",
|
||||
"mongodb": "6.7.0",
|
||||
"postgres": "^3.4.4",
|
||||
"wikipedia": "^2.1.2",
|
||||
"zod": "^3.25.76"
|
||||
"zod": "^4.1.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.3",
|
||||
"@types/node": "^24.0.13",
|
||||
"tsx": "^4.20.3",
|
||||
"typescript": "^5.8.3"
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/autotool
|
||||
|
||||
## 8.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 8.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 8.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 8.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 8.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 8.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 8.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,5 +1,49 @@
|
||||
# @llamaindex/autotool-01-node-example
|
||||
|
||||
## 0.0.137
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
- @llamaindex/autotool@8.0.29
|
||||
|
||||
## 0.0.136
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
- @llamaindex/autotool@8.0.28
|
||||
|
||||
## 0.0.135
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
- @llamaindex/autotool@8.0.27
|
||||
|
||||
## 0.0.134
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
- @llamaindex/autotool@8.0.26
|
||||
|
||||
## 0.0.133
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
- @llamaindex/autotool@8.0.25
|
||||
|
||||
## 0.0.132
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
- @llamaindex/autotool@8.0.24
|
||||
|
||||
## 0.0.131
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
"scripts": {
|
||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||
},
|
||||
"version": "0.0.131"
|
||||
"version": "0.0.137"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
|
||||
"directory": "packages/autotool"
|
||||
},
|
||||
"version": "8.0.23",
|
||||
"version": "8.0.29",
|
||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||
"files": [
|
||||
"dist",
|
||||
|
||||
@@ -1,5 +1,39 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
## 4.1.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5da1cda]
|
||||
- @llamaindex/core@0.6.21
|
||||
|
||||
## 4.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
|
||||
## 4.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 4b51791: Add deprecation to README
|
||||
|
||||
## 4.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 049471b: Add deprecation warning
|
||||
|
||||
## 4.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- c3bf3c7: Adding support for citations to beta agent data schema
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/core@0.6.19
|
||||
|
||||
## 4.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
> LlamaCloud is a new generation of managed parsing, ingestion, and retrieval services, designed to bring production-grade context-augmentation to your LLM and RAG applications.
|
||||
|
||||
For more information, see the [API documentation](https://docs.cloud.llamaindex.ai/).
|
||||
> [!WARNING]
|
||||
> This package has been deprecated since version 4.1.0.
|
||||
> Please migrate to [llama-cloud-services](https://www.npmjs.com/package/llama-cloud-services).
|
||||
> See the documentation: https://docs.cloud.llamaindex.ai
|
||||
|
||||
## License
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "4.0.27",
|
||||
"version": "4.1.3",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
// Deprecation warning
|
||||
console.warn(`
|
||||
The package @llamaindex/cloud has been deprecated since version 4.1.0
|
||||
* Please migrate to llama-cloud-services.
|
||||
* See the documentation: https://docs.cloud.llamaindex.ai
|
||||
`);
|
||||
|
||||
import { client } from "./client/client.gen";
|
||||
|
||||
client.setConfig({
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
// Deprecation warning
|
||||
console.warn(`
|
||||
The package @llamaindex/cloud has been deprecated since version 4.1.0
|
||||
* Please migrate to llama-cloud-services.
|
||||
* See the documentation: https://docs.cloud.llamaindex.ai
|
||||
`);
|
||||
|
||||
export { AgentClient, createAgentDataClient } from "./client";
|
||||
|
||||
export type {
|
||||
|
||||
@@ -28,6 +28,29 @@ export type ComparisonOperator =
|
||||
*/
|
||||
export type FilterOperation = RawFilterOperation;
|
||||
|
||||
/**
|
||||
* Metadata for an extracted field, including confidence and citation information
|
||||
*/
|
||||
export interface ExtractedFieldMetadata {
|
||||
/** The confidence score for the field, combined with parsing confidence if applicable */
|
||||
confidence?: number;
|
||||
/** The confidence score for the field based on the extracted text only */
|
||||
extracted_confidence?: number;
|
||||
/** The page number that the field occurred on */
|
||||
page_number?: number;
|
||||
/** The original text this field's value was derived from */
|
||||
matching_text?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dictionary mapping field names to their metadata
|
||||
* Values can be ExtractedFieldMetadata objects, nested dictionaries, or arrays
|
||||
*/
|
||||
export type ExtractedFieldMetadataDict = Record<
|
||||
string,
|
||||
ExtractedFieldMetadata | Record<string, unknown> | unknown[]
|
||||
>;
|
||||
|
||||
/**
|
||||
* Base extracted data interface
|
||||
*/
|
||||
@@ -35,11 +58,13 @@ export interface ExtractedData<T = unknown> {
|
||||
/** The original data that was extracted from the document. For tracking changes. Should not be updated. */
|
||||
original_data: T;
|
||||
/** The latest state of the data. Will differ if data has been updated. */
|
||||
data?: T;
|
||||
data: T;
|
||||
/** The status of the extracted data. Prefer to use the StatusType values, but any string is allowed. */
|
||||
status: StatusType | string;
|
||||
/** Confidence scores, if any, for each primitive field in the original_data data. */
|
||||
confidence?: Record<string, unknown>;
|
||||
/** The overall confidence score for the extracted data. */
|
||||
overall_confidence?: number;
|
||||
/** Page links, and perhaps eventually bounding boxes, for individual fields in the extracted data. */
|
||||
field_metadata?: ExtractedFieldMetadataDict;
|
||||
/** The ID of the file that was used to extract the data. */
|
||||
file_id?: string;
|
||||
/** The name of the file that was used to extract the data. */
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
// Deprecation warning
|
||||
console.warn(`
|
||||
The package @llamaindex/cloud has been deprecated since version 4.1.0
|
||||
* Please migrate to llama-cloud-services.
|
||||
* See the documentation: https://docs.cloud.llamaindex.ai
|
||||
`);
|
||||
|
||||
import { createClient, createConfig } from "@hey-api/client-fetch";
|
||||
import { createWorkflow, type InferWorkflowEventData } from "@llama-flow/core";
|
||||
import { createStatefulMiddleware } from "@llama-flow/core/middleware/state";
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/community
|
||||
|
||||
## 0.0.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5da1cda]
|
||||
- @llamaindex/core@0.6.21
|
||||
|
||||
## 0.0.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6ebd7c2: fix: invoke complete command using the actual modelId
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
|
||||
## 0.0.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/core@0.6.19
|
||||
|
||||
## 0.0.100
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/community",
|
||||
"description": "Community package for LlamaIndexTS",
|
||||
"version": "0.0.100",
|
||||
"version": "0.0.103",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -493,6 +493,8 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
|
||||
if (params.stream) {
|
||||
const command = new InvokeModelWithResponseStreamCommand(input);
|
||||
command.input.modelId = this.actualModel;
|
||||
|
||||
const response = await this.client.send(command);
|
||||
if (response.body)
|
||||
return streamConverter(response.body, (response) => {
|
||||
@@ -504,6 +506,8 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
}
|
||||
|
||||
const command = new InvokeModelCommand(input);
|
||||
command.input.modelId = this.actualModel;
|
||||
|
||||
const response = await this.client.send(command);
|
||||
return {
|
||||
text: this.provider.getTextFromResponse(response),
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @llamaindex/core
|
||||
|
||||
## 0.6.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 5da1cda: feat: support zod v4 & v3
|
||||
|
||||
## 0.6.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 0267bb0: Added responseFormat to llm.exec
|
||||
|
||||
## 0.6.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f9f1de9: Use logger interface instead of directly hardcoding console.log
|
||||
|
||||
## 0.6.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/core",
|
||||
"type": "module",
|
||||
"version": "0.6.18",
|
||||
"version": "0.6.21",
|
||||
"description": "LlamaIndex Core Module",
|
||||
"exports": {
|
||||
"./agent": {
|
||||
@@ -278,6 +278,17 @@
|
||||
"default": "./postprocessor/dist/index.js"
|
||||
},
|
||||
"default": "./postprocessor/dist/index.js"
|
||||
},
|
||||
"./zod": {
|
||||
"require": {
|
||||
"types": "./zod/dist/index.d.cts",
|
||||
"default": "./zod/dist/index.cjs"
|
||||
},
|
||||
"import": {
|
||||
"types": "./zod/dist/index.d.ts",
|
||||
"default": "./zod/dist/index.js"
|
||||
},
|
||||
"default": "./zod/dist/index.js"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
@@ -302,7 +313,8 @@
|
||||
"./vector-store",
|
||||
"./tools",
|
||||
"./data-structs",
|
||||
"./postprocessor"
|
||||
"./postprocessor",
|
||||
"./zod"
|
||||
],
|
||||
"scripts": {
|
||||
"dev": "bunchee --watch",
|
||||
@@ -321,9 +333,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"@finom/zod-to-json-schema": "3.24.11",
|
||||
"@types/node": "^24.0.13",
|
||||
"magic-bytes.js": "^1.10.0",
|
||||
"zod": "^3.25.76",
|
||||
"zod-to-json-schema": "^3.24.6"
|
||||
"zod": "^4.1.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import type { Logger } from "@llamaindex/env";
|
||||
import { z } from "zod";
|
||||
import { type JSONObject, type JSONValue, Settings } from "../global";
|
||||
import type {
|
||||
BaseTool,
|
||||
@@ -13,7 +12,7 @@ import type {
|
||||
ToolCallLLMMessageOptions,
|
||||
ToolOutput,
|
||||
} from "../llms";
|
||||
import { baseToolWithCallSchema } from "../schema";
|
||||
import { agentParamsSchema } from "../schema";
|
||||
import {
|
||||
assertIsJSONValue,
|
||||
isAsyncIterable,
|
||||
@@ -305,7 +304,7 @@ export function validateAgentParams<AI extends LLM>(
|
||||
params: AgentParamsBase<AI>,
|
||||
) {
|
||||
if ("tools" in params) {
|
||||
z.array(baseToolWithCallSchema).parse(params.tools);
|
||||
agentParamsSchema.parse(params.tools);
|
||||
} else {
|
||||
// todo: check `params.toolRetriever` when migrate to @llamaindex/core
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { consoleLogger, emptyLogger, type Logger } from "@llamaindex/env";
|
||||
import type { Tokenizers } from "@llamaindex/env/tokenizers";
|
||||
import type { MessageContentDetail } from "../llms";
|
||||
import { BaseNode, MetadataMode, TransformComponent } from "../schema";
|
||||
@@ -18,6 +19,7 @@ export type EmbeddingInfo = {
|
||||
export type BaseEmbeddingOptions = {
|
||||
logProgress?: boolean;
|
||||
progressCallback?: (current: number, total: number) => void;
|
||||
logger?: Logger;
|
||||
};
|
||||
|
||||
export abstract class BaseEmbedding extends TransformComponent<
|
||||
@@ -133,6 +135,9 @@ export async function batchEmbeddings<T>(
|
||||
|
||||
const curBatch: T[] = [];
|
||||
|
||||
const logger =
|
||||
options?.logger ?? (options?.logProgress ? consoleLogger : emptyLogger);
|
||||
|
||||
for (let i = 0; i < queue.length; i++) {
|
||||
curBatch.push(queue[i]!);
|
||||
if (i == queue.length - 1 || curBatch.length == chunkSize) {
|
||||
@@ -143,7 +148,7 @@ export async function batchEmbeddings<T>(
|
||||
options?.progressCallback?.(i + 1, queue.length);
|
||||
}
|
||||
if (options?.logProgress) {
|
||||
console.log(`getting embedding progress: ${i + 1} / ${queue.length}`);
|
||||
logger.log(`getting embedding progress: ${i + 1} / ${queue.length}`);
|
||||
}
|
||||
|
||||
curBatch.length = 0;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { emptyLogger } from "@llamaindex/env";
|
||||
import type { JSONObject } from "../global";
|
||||
import { tool } from "../tools/";
|
||||
import { extractText } from "../utils/llms";
|
||||
import { streamConverter } from "../utils/stream";
|
||||
import { isZodSchema, safeParseSchema } from "../zod";
|
||||
import { callToolToMessage, getToolCallsFromResponse } from "./tool-call";
|
||||
import type {
|
||||
ChatMessage,
|
||||
@@ -97,6 +100,31 @@ export abstract class BaseLLM<
|
||||
| ExecResponse<AdditionalMessageOptions>
|
||||
| ExecStreamResponse<AdditionalMessageOptions>
|
||||
> {
|
||||
const responseFormat = params.responseFormat;
|
||||
if (typeof responseFormat != "undefined" && isZodSchema(responseFormat)) {
|
||||
const structuredTool = tool({
|
||||
name: "format_output",
|
||||
description: "Respond with a JSON object",
|
||||
parameters: responseFormat,
|
||||
execute: (args) => {
|
||||
const result = safeParseSchema(responseFormat, args);
|
||||
if (!result.success) {
|
||||
console.error("Invalid input from LLM:", result.error);
|
||||
return JSON.stringify({
|
||||
error: "Invalid schema",
|
||||
details: result.error,
|
||||
});
|
||||
}
|
||||
return result.data as JSONObject;
|
||||
},
|
||||
});
|
||||
if (Array.isArray(params.tools)) {
|
||||
params.tools.push(structuredTool);
|
||||
} else {
|
||||
params.tools = [structuredTool];
|
||||
}
|
||||
params.responseFormat = undefined;
|
||||
}
|
||||
if (params.stream) {
|
||||
return this.streamExec(params);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import type { Logger } from "@llamaindex/env";
|
||||
import type { Tokenizers } from "@llamaindex/env/tokenizers";
|
||||
import type { JSONSchemaType } from "ajv";
|
||||
import { z } from "zod";
|
||||
import type { JSONObject, JSONValue } from "../global";
|
||||
import type { ModalityType } from "../schema";
|
||||
import type { ZodSchema } from "../zod";
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@@ -139,7 +140,7 @@ export interface LLMChatParamsBase<
|
||||
messages: ChatMessage<AdditionalMessageOptions>[];
|
||||
additionalChatOptions?: AdditionalChatOptions | undefined;
|
||||
tools?: BaseTool[] | undefined;
|
||||
responseFormat?: z.ZodType | object | undefined;
|
||||
responseFormat?: ZodSchema | object | undefined;
|
||||
logger?: Logger | undefined;
|
||||
}
|
||||
|
||||
@@ -159,7 +160,7 @@ export interface LLMChatParamsNonStreaming<
|
||||
|
||||
export interface LLMCompletionParamsBase {
|
||||
prompt: MessageContent;
|
||||
responseFormat?: z.ZodType | object;
|
||||
responseFormat?: ZodSchema | object;
|
||||
}
|
||||
|
||||
export interface LLMCompletionParamsStreaming extends LLMCompletionParamsBase {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { consoleLogger, type Logger } from "@llamaindex/env";
|
||||
import { Settings } from "../global";
|
||||
import type { ChatMessage, LLM } from "../llms";
|
||||
import { extractText } from "../utils";
|
||||
@@ -38,6 +39,11 @@ export type MemoryOptions<TMessageOptions extends object = object> = {
|
||||
* This default LLM can be overridden by the LLM passed in the `getLLM` method.
|
||||
*/
|
||||
llm?: LLM | undefined;
|
||||
|
||||
/**
|
||||
* Logger for memory operations
|
||||
*/
|
||||
logger?: Logger;
|
||||
};
|
||||
|
||||
export class Memory<
|
||||
@@ -76,6 +82,10 @@ export class Memory<
|
||||
* The default LLM to use for memory retrieval.
|
||||
*/
|
||||
private llm: LLM | undefined;
|
||||
/**
|
||||
* Logger for memory operations
|
||||
*/
|
||||
private logger: Logger;
|
||||
|
||||
constructor(
|
||||
messages: MemoryMessage<TMessageOptions>[] = [],
|
||||
@@ -87,6 +97,7 @@ export class Memory<
|
||||
options.shortTermTokenLimitRatio ?? DEFAULT_SHORT_TERM_TOKEN_LIMIT_RATIO;
|
||||
this.memoryBlocks = options.memoryBlocks ?? [];
|
||||
this.memoryCursor = options.memoryCursor ?? 0;
|
||||
this.logger = options.logger ?? consoleLogger;
|
||||
this.initLLM(options.llm);
|
||||
|
||||
this.adapters = {
|
||||
@@ -309,7 +320,7 @@ export class Memory<
|
||||
addedTokenCount += messageTokenCount;
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
this.logger.warn(
|
||||
`Failed to get content from memory block ${block.id}:`,
|
||||
error,
|
||||
);
|
||||
@@ -371,7 +382,7 @@ export class Memory<
|
||||
try {
|
||||
await block.put(newMessages);
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
this.logger.warn(
|
||||
`Failed to process messages into memory block ${block.id}:`,
|
||||
error,
|
||||
);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { consoleLogger, type Logger } from "@llamaindex/env";
|
||||
import type { Tokenizer } from "@llamaindex/env/tokenizers";
|
||||
import { z } from "zod";
|
||||
import { Settings } from "../global";
|
||||
import { sentenceSplitterSchema } from "../schema";
|
||||
import { sentenceSplitterSchema, type SentenceSplitterParams } from "../schema";
|
||||
import { MetadataAwareTextSplitter } from "./base";
|
||||
import type { SplitterParams } from "./type";
|
||||
import type { PartialWithUndefined, SplitterParams } from "./type";
|
||||
import {
|
||||
splitByChar,
|
||||
splitByRegex,
|
||||
@@ -48,9 +48,11 @@ export class SentenceSplitter extends MetadataAwareTextSplitter {
|
||||
#splitFns: Set<TextSplitterFn> = new Set();
|
||||
#subSentenceSplitFns: Set<TextSplitterFn> = new Set();
|
||||
#tokenizer: Tokenizer;
|
||||
#logger: Logger;
|
||||
|
||||
constructor(
|
||||
params?: z.input<typeof sentenceSplitterSchema> & SplitterParams,
|
||||
params?: PartialWithUndefined<SentenceSplitterParams> &
|
||||
SplitterParams & { logger?: Logger },
|
||||
) {
|
||||
super();
|
||||
if (params) {
|
||||
@@ -66,6 +68,7 @@ export class SentenceSplitter extends MetadataAwareTextSplitter {
|
||||
this.extraAbbreviations,
|
||||
);
|
||||
this.#tokenizer = params?.tokenizer ?? Settings.tokenizer;
|
||||
this.#logger = params?.logger ?? consoleLogger;
|
||||
this.#splitFns.add(splitBySep(this.paragraphSeparator));
|
||||
this.#splitFns.add(this.#chunkingTokenizerFn);
|
||||
|
||||
@@ -82,7 +85,7 @@ export class SentenceSplitter extends MetadataAwareTextSplitter {
|
||||
`Metadata length (${metadataLength}) is longer than chunk size (${this.chunkSize}). Consider increasing the chunk size or decreasing the size of your metadata to avoid this.`,
|
||||
);
|
||||
} else if (effectiveChunkSize < 50) {
|
||||
console.log(
|
||||
this.#logger.log(
|
||||
`Metadata length (${metadataLength}) is close to chunk size (${this.chunkSize}). Resulting chunks are less than 50 tokens. Consider increasing the chunk size or decreasing the size of your metadata to avoid this.`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
import { randomUUID } from "@llamaindex/env";
|
||||
import { z } from "zod";
|
||||
import {
|
||||
buildNodeFromSplits,
|
||||
Document,
|
||||
sentenceWindowNodeParserSchema,
|
||||
TextNode,
|
||||
type SentenceWindowNodeParserParams,
|
||||
} from "../schema";
|
||||
import { NodeParser } from "./base";
|
||||
import type { PartialWithUndefined } from "./type";
|
||||
import { splitBySentenceTokenizer, type TextSplitterFn } from "./utils";
|
||||
|
||||
export class SentenceWindowNodeParser extends NodeParser<TextNode[]> {
|
||||
@@ -20,7 +21,7 @@ export class SentenceWindowNodeParser extends NodeParser<TextNode[]> {
|
||||
sentenceSplitter: TextSplitterFn = splitBySentenceTokenizer([], true);
|
||||
idGenerator: () => string = () => randomUUID();
|
||||
|
||||
constructor(params?: z.input<typeof sentenceWindowNodeParserSchema>) {
|
||||
constructor(params?: PartialWithUndefined<SentenceWindowNodeParserParams>) {
|
||||
super();
|
||||
if (params) {
|
||||
const parsedParams = sentenceWindowNodeParserSchema.parse(params);
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
import { consoleLogger, type Logger } from "@llamaindex/env";
|
||||
import type { Tokenizer } from "@llamaindex/env/tokenizers";
|
||||
import { z } from "zod";
|
||||
import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, Settings } from "../global";
|
||||
import {
|
||||
tokenTextSplitterSchema,
|
||||
type TokenTextSplitterParams,
|
||||
} from "../schema";
|
||||
import { MetadataAwareTextSplitter } from "./base";
|
||||
import type { SplitterParams } from "./type";
|
||||
import type { PartialWithUndefined, SplitterParams } from "./type";
|
||||
import { splitByChar, splitBySep } from "./utils";
|
||||
|
||||
const DEFAULT_METADATA_FORMAT_LEN = 2;
|
||||
|
||||
const tokenTextSplitterSchema = z.object({
|
||||
chunkSize: z.number().positive().default(DEFAULT_CHUNK_SIZE),
|
||||
chunkOverlap: z.number().nonnegative().default(DEFAULT_CHUNK_OVERLAP),
|
||||
separator: z.string().default(" "),
|
||||
backupSeparators: z.array(z.string()).default(["\n"]),
|
||||
});
|
||||
|
||||
export class TokenTextSplitter extends MetadataAwareTextSplitter {
|
||||
chunkSize: number = DEFAULT_CHUNK_SIZE;
|
||||
chunkOverlap: number = DEFAULT_CHUNK_OVERLAP;
|
||||
@@ -21,9 +18,11 @@ export class TokenTextSplitter extends MetadataAwareTextSplitter {
|
||||
backupSeparators: string[] = ["\n"];
|
||||
#tokenizer: Tokenizer;
|
||||
#splitFns: Array<(text: string) => string[]> = [];
|
||||
#logger: Logger;
|
||||
|
||||
constructor(
|
||||
params?: SplitterParams & Partial<z.infer<typeof tokenTextSplitterSchema>>,
|
||||
params?: SplitterParams &
|
||||
PartialWithUndefined<TokenTextSplitterParams> & { logger?: Logger },
|
||||
) {
|
||||
super();
|
||||
|
||||
@@ -42,6 +41,7 @@ export class TokenTextSplitter extends MetadataAwareTextSplitter {
|
||||
}
|
||||
|
||||
this.#tokenizer = params?.tokenizer ?? Settings.tokenizer;
|
||||
this.#logger = params?.logger ?? consoleLogger;
|
||||
|
||||
const allSeparators = [this.separator, ...this.backupSeparators];
|
||||
this.#splitFns = allSeparators.map((sep) => splitBySep(sep));
|
||||
@@ -65,7 +65,7 @@ export class TokenTextSplitter extends MetadataAwareTextSplitter {
|
||||
`Consider increasing the chunk size or decreasing the size of your metadata to avoid this.`,
|
||||
);
|
||||
} else if (effectiveChunkSize < 50) {
|
||||
console.warn(
|
||||
this.#logger.warn(
|
||||
`Metadata length (${metadataLength}) is close to chunk size (${this.chunkSize}). ` +
|
||||
`Resulting chunks are less than 50 tokens. Consider increasing the chunk size or decreasing the size of your metadata to avoid this.`,
|
||||
);
|
||||
@@ -148,7 +148,7 @@ export class TokenTextSplitter extends MetadataAwareTextSplitter {
|
||||
const splitLength = this.tokenSize(split);
|
||||
|
||||
if (splitLength > chunkSize) {
|
||||
console.warn(
|
||||
this.#logger.warn(
|
||||
`Got a split of size ${splitLength}, larger than chunk size ${chunkSize}.`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -3,3 +3,7 @@ import type { Tokenizer } from "@llamaindex/env/tokenizers";
|
||||
export type SplitterParams = {
|
||||
tokenizer?: Tokenizer;
|
||||
};
|
||||
|
||||
export type PartialWithUndefined<T> = {
|
||||
[P in keyof T]?: T[P] | undefined;
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { z } from "zod";
|
||||
import { Settings } from "../global";
|
||||
import { z } from "zod/v3"; // use zod v3 to keep schemas as it is
|
||||
import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, Settings } from "../global";
|
||||
|
||||
export const anyFunctionSchema = z.function(z.tuple([]).rest(z.any()), z.any());
|
||||
|
||||
@@ -18,6 +18,8 @@ export const baseToolWithCallSchema = baseToolSchema.extend({
|
||||
call: z.function(),
|
||||
});
|
||||
|
||||
export const agentParamsSchema = z.array(baseToolWithCallSchema);
|
||||
|
||||
export const sentenceSplitterSchema = z
|
||||
.object({
|
||||
chunkSize: z
|
||||
@@ -83,3 +85,16 @@ export const sentenceWindowNodeParserSchema = z.object({
|
||||
})
|
||||
.default("originalText"),
|
||||
});
|
||||
|
||||
export const tokenTextSplitterSchema = z.object({
|
||||
chunkSize: z.number().positive().default(DEFAULT_CHUNK_SIZE),
|
||||
chunkOverlap: z.number().nonnegative().default(DEFAULT_CHUNK_OVERLAP),
|
||||
separator: z.string().default(" "),
|
||||
backupSeparators: z.array(z.string()).default(["\n"]),
|
||||
});
|
||||
|
||||
export type SentenceSplitterParams = z.infer<typeof sentenceSplitterSchema>;
|
||||
export type TokenTextSplitterParams = z.infer<typeof tokenTextSplitterSchema>;
|
||||
export type SentenceWindowNodeParserParams = z.infer<
|
||||
typeof sentenceWindowNodeParserSchema
|
||||
>;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { consoleLogger, type Logger } from "@llamaindex/env";
|
||||
import { DEFAULT_NAMESPACE } from "../../global";
|
||||
import { BaseNode, ObjectType, type StoredValue } from "../../schema";
|
||||
import type { BaseKVStore } from "../kv-store";
|
||||
@@ -16,13 +17,19 @@ export class KVDocumentStore extends BaseDocumentStore {
|
||||
private nodeCollection: string;
|
||||
private refDocCollection: string;
|
||||
private metadataCollection: string;
|
||||
private logger: Logger;
|
||||
|
||||
constructor(kvstore: BaseKVStore, namespace: string = DEFAULT_NAMESPACE) {
|
||||
constructor(
|
||||
kvstore: BaseKVStore,
|
||||
namespace: string = DEFAULT_NAMESPACE,
|
||||
options?: { logger?: Logger },
|
||||
) {
|
||||
super();
|
||||
this.kvstore = kvstore;
|
||||
this.nodeCollection = `${namespace}/data`;
|
||||
this.refDocCollection = `${namespace}/ref_doc_info`;
|
||||
this.metadataCollection = `${namespace}/metadata`;
|
||||
this.logger = options?.logger ?? consoleLogger;
|
||||
}
|
||||
|
||||
async docs(): Promise<Record<string, BaseNode>> {
|
||||
@@ -33,7 +40,7 @@ export class KVDocumentStore extends BaseDocumentStore {
|
||||
if (isValidDocJson(value)) {
|
||||
docs[key] = jsonToDoc(value, this.serializer);
|
||||
} else {
|
||||
console.warn(`Invalid JSON for docId ${key}`);
|
||||
this.logger.warn(`Invalid JSON for docId ${key}`);
|
||||
}
|
||||
}
|
||||
return docs;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { path } from "@llamaindex/env";
|
||||
import { path, type Logger } from "@llamaindex/env";
|
||||
import { IndexStruct, jsonToIndexStruct } from "../../data-structs";
|
||||
import {
|
||||
DEFAULT_INDEX_STORE_PERSIST_FILENAME,
|
||||
@@ -8,8 +8,8 @@ import {
|
||||
import {
|
||||
BaseInMemoryKVStore,
|
||||
BaseKVStore,
|
||||
type DataType,
|
||||
SimpleKVStore,
|
||||
type DataType,
|
||||
} from "../kv-store";
|
||||
|
||||
export const DEFAULT_PERSIST_PATH = path.join(
|
||||
@@ -84,16 +84,23 @@ export class SimpleIndexStore extends KVIndexStore {
|
||||
|
||||
static async fromPersistDir(
|
||||
persistDir: string = DEFAULT_PERSIST_DIR,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleIndexStore> {
|
||||
const persistPath = path.join(
|
||||
persistDir,
|
||||
DEFAULT_INDEX_STORE_PERSIST_FILENAME,
|
||||
);
|
||||
return this.fromPersistPath(persistPath);
|
||||
return this.fromPersistPath(persistPath, options);
|
||||
}
|
||||
|
||||
static async fromPersistPath(persistPath: string): Promise<SimpleIndexStore> {
|
||||
const simpleKVStore = await SimpleKVStore.fromPersistPath(persistPath);
|
||||
static async fromPersistPath(
|
||||
persistPath: string,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleIndexStore> {
|
||||
const simpleKVStore = await SimpleKVStore.fromPersistPath(
|
||||
persistPath,
|
||||
options,
|
||||
);
|
||||
return new SimpleIndexStore(simpleKVStore);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { fs, path } from "@llamaindex/env";
|
||||
import { consoleLogger, fs, path, type Logger } from "@llamaindex/env";
|
||||
|
||||
import { DEFAULT_COLLECTION } from "../../global";
|
||||
import type { StoredValue } from "../../schema";
|
||||
@@ -98,7 +98,11 @@ export class SimpleKVStore extends BaseKVStore {
|
||||
await fs.writeFile(persistPath, JSON.stringify(this.data));
|
||||
}
|
||||
|
||||
static async fromPersistPath(persistPath: string): Promise<SimpleKVStore> {
|
||||
static async fromPersistPath(
|
||||
persistPath: string,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleKVStore> {
|
||||
const logger = options?.logger ?? consoleLogger;
|
||||
const dirPath = path.dirname(persistPath);
|
||||
if (!(await exists(dirPath))) {
|
||||
await fs.mkdir(dirPath, { recursive: true });
|
||||
@@ -106,7 +110,7 @@ export class SimpleKVStore extends BaseKVStore {
|
||||
|
||||
let data: DataType = {};
|
||||
if (!(await exists(persistPath))) {
|
||||
console.info(`Starting new store from path: ${persistPath}`);
|
||||
logger.log(`Starting new store from path: ${persistPath}`);
|
||||
} else {
|
||||
try {
|
||||
const fileData = await fs.readFile(persistPath);
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
import { consoleLogger, type Logger } from "@llamaindex/env";
|
||||
import type { JSONSchemaType } from "ajv";
|
||||
import { z } from "zod";
|
||||
import { zodToJsonSchema } from "zod-to-json-schema";
|
||||
import type * as z3 from "zod/v3";
|
||||
import type * as z4 from "zod/v4/core";
|
||||
import type { JSONValue } from "../global";
|
||||
import type { BaseTool, ToolMetadata } from "../llms";
|
||||
import {
|
||||
isZodSchema,
|
||||
safeParseSchema,
|
||||
type ZodSchema,
|
||||
zodToJsonSchema,
|
||||
} from "../zod";
|
||||
|
||||
export class FunctionTool<
|
||||
T,
|
||||
@@ -13,12 +20,15 @@ export class FunctionTool<
|
||||
#fn: (input: T, additionalArg?: AdditionalToolArgument) => R;
|
||||
#additionalArg: AdditionalToolArgument | undefined;
|
||||
readonly #metadata: ToolMetadata<JSONSchemaType<T>>;
|
||||
readonly #zodType: z.ZodType<T> | null = null;
|
||||
readonly #zodType: ZodSchema<T> | null = null;
|
||||
readonly #logger: Logger;
|
||||
|
||||
constructor(
|
||||
fn: (input: T, additionalArg?: AdditionalToolArgument) => R,
|
||||
metadata: ToolMetadata<JSONSchemaType<T>>,
|
||||
zodType?: z.ZodType<T>,
|
||||
zodType?: ZodSchema<T>,
|
||||
additionalArg?: AdditionalToolArgument,
|
||||
logger?: Logger,
|
||||
) {
|
||||
this.#fn = fn;
|
||||
this.#metadata = metadata;
|
||||
@@ -26,8 +36,12 @@ export class FunctionTool<
|
||||
this.#zodType = zodType;
|
||||
}
|
||||
this.#additionalArg = additionalArg;
|
||||
this.#logger = logger ?? consoleLogger;
|
||||
}
|
||||
|
||||
// ----------------- OVERLOAD -----------------
|
||||
|
||||
// Plain JSON schema
|
||||
static from<T, AdditionalToolArgument extends object = object>(
|
||||
fn: (
|
||||
input: T,
|
||||
@@ -35,54 +49,74 @@ export class FunctionTool<
|
||||
) => JSONValue | Promise<JSONValue>,
|
||||
schema: ToolMetadata<JSONSchemaType<T>>,
|
||||
): FunctionTool<T, JSONValue | Promise<JSONValue>, AdditionalToolArgument>;
|
||||
static from<
|
||||
R extends z.ZodType,
|
||||
AdditionalToolArgument extends object = object,
|
||||
>(
|
||||
|
||||
// Function + Object configs + Zod v3 schema
|
||||
static from<R, AdditionalToolArgument extends object = object>(
|
||||
fn: (
|
||||
input: z.infer<R>,
|
||||
// @ts-expect-error <R> should extend z3.ZodTypeAny
|
||||
// but we remove that to fix type instantiation is excessively deep and possibly infinite
|
||||
input: z3.infer<R>,
|
||||
additionalArg?: AdditionalToolArgument,
|
||||
) => JSONValue | Promise<JSONValue>,
|
||||
schema: Omit<ToolMetadata, "parameters"> & {
|
||||
parameters: R;
|
||||
},
|
||||
schema: Omit<ToolMetadata, "parameters"> & { parameters: R },
|
||||
): FunctionTool<
|
||||
z.infer<R>,
|
||||
// @ts-expect-error <R> should extend z3.ZodTypeAny
|
||||
// but we remove that to fix type instantiation is excessively deep and possibly infinite
|
||||
z3.infer<R>,
|
||||
JSONValue | Promise<JSONValue>,
|
||||
AdditionalToolArgument
|
||||
>;
|
||||
static from<
|
||||
T,
|
||||
R extends z.ZodType<T>,
|
||||
AdditionalToolArgument extends object = object,
|
||||
>(
|
||||
|
||||
// Function + Object configs + Zod v4 schema
|
||||
static from<R, AdditionalToolArgument extends object = object>(
|
||||
fn: (
|
||||
input: T,
|
||||
input: z4.infer<R>,
|
||||
additionalArg?: AdditionalToolArgument,
|
||||
) => JSONValue | Promise<JSONValue>,
|
||||
schema: Omit<ToolMetadata, "parameters"> & {
|
||||
parameters: R;
|
||||
},
|
||||
): FunctionTool<T, JSONValue, AdditionalToolArgument>;
|
||||
static from<
|
||||
R extends z.ZodType,
|
||||
AdditionalToolArgument extends object = object,
|
||||
>(
|
||||
schema: Omit<ToolMetadata, "parameters"> & { parameters: R },
|
||||
): FunctionTool<
|
||||
z4.infer<R>,
|
||||
JSONValue | Promise<JSONValue>,
|
||||
AdditionalToolArgument
|
||||
>;
|
||||
|
||||
// Object configs + Zod v3 schema
|
||||
static from<R, AdditionalToolArgument extends object = object>(
|
||||
config: Omit<ToolMetadata, "parameters"> & {
|
||||
parameters: R;
|
||||
execute: (
|
||||
input: z.infer<R>,
|
||||
// @ts-expect-error <R> should extend z3.ZodTypeAny
|
||||
// but we remove that to fix type instantiation is excessively deep and possibly infinite
|
||||
input: z3.infer<R>,
|
||||
additionalArg?: AdditionalToolArgument,
|
||||
) => JSONValue | Promise<JSONValue>;
|
||||
},
|
||||
): FunctionTool<
|
||||
z.infer<R>,
|
||||
// @ts-expect-error <R> should extend z3.ZodTypeAny
|
||||
// but we remove that to fix type instantiation is excessively deep and possibly infinite
|
||||
z3.infer<R>,
|
||||
JSONValue | Promise<JSONValue>,
|
||||
AdditionalToolArgument
|
||||
>;
|
||||
|
||||
// Object configs + Zod v4 schema
|
||||
static from<R, AdditionalToolArgument extends object = object>(
|
||||
config: Omit<ToolMetadata, "parameters"> & {
|
||||
parameters: R;
|
||||
execute: (
|
||||
input: z4.infer<R>,
|
||||
additionalArg?: AdditionalToolArgument,
|
||||
) => JSONValue | Promise<JSONValue>;
|
||||
},
|
||||
): FunctionTool<
|
||||
z4.infer<R>,
|
||||
JSONValue | Promise<JSONValue>,
|
||||
AdditionalToolArgument
|
||||
>;
|
||||
|
||||
// ----------------- IMPLEMENTATION -----------------
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
static from(fnOrConfig: any, schema?: any): any {
|
||||
// Handle the case where an object with execute function is passed
|
||||
if (
|
||||
typeof schema === "undefined" &&
|
||||
typeof fnOrConfig === "object" &&
|
||||
@@ -90,7 +124,7 @@ export class FunctionTool<
|
||||
) {
|
||||
const { execute, parameters, ...restConfig } = fnOrConfig;
|
||||
|
||||
if (parameters instanceof z.ZodSchema) {
|
||||
if (isZodSchema(parameters)) {
|
||||
const jsonSchema = zodToJsonSchema(parameters);
|
||||
return new FunctionTool(
|
||||
execute,
|
||||
@@ -101,12 +135,10 @@ export class FunctionTool<
|
||||
parameters,
|
||||
);
|
||||
}
|
||||
|
||||
return new FunctionTool(execute, fnOrConfig);
|
||||
}
|
||||
|
||||
// Handle the original cases
|
||||
if (schema && schema.parameters instanceof z.ZodSchema) {
|
||||
if (schema && isZodSchema(schema.parameters)) {
|
||||
const jsonSchema = zodToJsonSchema(schema.parameters);
|
||||
return new FunctionTool(
|
||||
fnOrConfig,
|
||||
@@ -136,11 +168,11 @@ export class FunctionTool<
|
||||
call = (input: T) => {
|
||||
let params = input;
|
||||
if (this.#zodType) {
|
||||
const result = this.#zodType.safeParse(input);
|
||||
const result = safeParseSchema(this.#zodType, input);
|
||||
if (result.success) {
|
||||
params = result.data;
|
||||
} else {
|
||||
console.warn(result.error.errors);
|
||||
this.#logger.warn(result.error);
|
||||
}
|
||||
}
|
||||
return this.#fn.call(null, params, this.#additionalArg);
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
import { zodToJsonSchema as zodToJsonSchemaV3 } from "@finom/zod-to-json-schema";
|
||||
import * as z from "zod";
|
||||
import * as z3 from "zod/v3";
|
||||
import * as z4 from "zod/v4/core";
|
||||
|
||||
export type ZodSchema<T = any> = z3.ZodType<T> | z4.$ZodType<T>;
|
||||
|
||||
export type ZodInfer<T extends ZodSchema> =
|
||||
T extends z3.ZodType<any>
|
||||
? z3.infer<T>
|
||||
: T extends z4.$ZodType<any>
|
||||
? z4.infer<T>
|
||||
: never;
|
||||
|
||||
// support parsing both Zod 3 schemas and Zod 4 schemas
|
||||
export function parseSchema<T>(schema: ZodSchema<T>, data: unknown): T {
|
||||
if ("_zod" in schema) {
|
||||
// Zod 4 schema
|
||||
return z4.parse(schema as z4.$ZodType<T>, data);
|
||||
} else {
|
||||
// Zod 3 schema
|
||||
return (schema as z3.ZodType<T>).parse(data);
|
||||
}
|
||||
}
|
||||
|
||||
// safe parse schema
|
||||
export function safeParseSchema<T>(schema: ZodSchema<T>, data: unknown) {
|
||||
if ("_zod" in schema) {
|
||||
// Zod 4 schema
|
||||
return z4.safeParse(schema as z4.$ZodType<T>, data);
|
||||
} else {
|
||||
// Zod 3 schema
|
||||
return (schema as z3.ZodType<T>).safeParse(data);
|
||||
}
|
||||
}
|
||||
|
||||
export function isZodSchema(obj: unknown): obj is ZodSchema {
|
||||
return (
|
||||
obj !== null &&
|
||||
typeof obj === "object" &&
|
||||
"parse" in obj &&
|
||||
typeof (obj as { parse: unknown }).parse === "function" &&
|
||||
"safeParse" in obj &&
|
||||
typeof (obj as { safeParse: unknown }).safeParse === "function"
|
||||
);
|
||||
}
|
||||
|
||||
// zod 3 schema does not have _zod property
|
||||
export function isZodV3Schema(obj: unknown): obj is z3.ZodTypeAny {
|
||||
return isZodSchema(obj) && !("_zod" in obj);
|
||||
}
|
||||
|
||||
// zod 4 schema has _zod property
|
||||
export function isZodV4Schema(obj: unknown): obj is z4.$ZodType {
|
||||
return isZodSchema(obj) && "_zod" in obj;
|
||||
}
|
||||
|
||||
export function zodToJsonSchema(obj: ZodSchema) {
|
||||
if (isZodV4Schema(obj)) {
|
||||
// if schema is created from zod v4, use native toJSONSchema
|
||||
return z4.toJSONSchema(obj);
|
||||
}
|
||||
|
||||
// otherwise, use zod-to-json-schema
|
||||
return zodToJsonSchemaV3(obj as any); // FIXME: use any to avoid type instantiation excessively
|
||||
}
|
||||
|
||||
// re-export zod
|
||||
export { z, z3, z4 };
|
||||
@@ -1,7 +1,7 @@
|
||||
import { LLMAgent, validateAgentParams } from "@llamaindex/core/agent";
|
||||
import { MockLLM } from "@llamaindex/core/llms/mock";
|
||||
import { expect, test } from "vitest";
|
||||
import { ZodError } from "zod";
|
||||
import { ZodError } from "zod/v3";
|
||||
|
||||
test("validate agent params", () => {
|
||||
validateAgentParams({
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"vitest": "^2.1.5"
|
||||
"vitest": "^2.1.5",
|
||||
"zod": "^4.1.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { FunctionTool, tool } from "@llamaindex/core/tools";
|
||||
import { describe, expect, test, vi } from "vitest";
|
||||
import { z } from "zod";
|
||||
import { z } from "zod/v3";
|
||||
import { z as z4 } from "zod/v4";
|
||||
|
||||
describe("FunctionTool", () => {
|
||||
test("type system", () => {
|
||||
@@ -95,4 +96,67 @@ describe("FunctionTool", () => {
|
||||
expect(hello).to.toHaveBeenCalledOnce();
|
||||
expect(hello).to.toHaveBeenCalledWith("Bob", additionalArg);
|
||||
});
|
||||
|
||||
test("works with Zod v4 schema", async () => {
|
||||
const mockFn = vi.fn().mockImplementation(({ age }: { age: number }) => {
|
||||
return `Age is ${age}`;
|
||||
});
|
||||
|
||||
const schema = z4.object({
|
||||
age: z4.number().int().min(0),
|
||||
});
|
||||
|
||||
const toolV4 = FunctionTool.from(mockFn, {
|
||||
name: "checkAge",
|
||||
description: "Checks age",
|
||||
parameters: schema,
|
||||
});
|
||||
|
||||
const result = await toolV4.call({ age: 25 });
|
||||
expect(result).toBe("Age is 25");
|
||||
expect(mockFn).toHaveBeenCalledWith({ age: 25 }, undefined);
|
||||
});
|
||||
|
||||
test("validates input with safeParseSchema (valid + invalid)", async () => {
|
||||
const mockFn = vi.fn().mockImplementation(({ num }: { num: number }) => {
|
||||
return num * 2;
|
||||
});
|
||||
|
||||
const schema = z.object({
|
||||
num: z.number(),
|
||||
});
|
||||
|
||||
const toolWithValidation = FunctionTool.from(mockFn, {
|
||||
name: "double",
|
||||
description: "Doubles a number",
|
||||
parameters: schema,
|
||||
});
|
||||
|
||||
// valid input
|
||||
const result = await toolWithValidation.call({ num: 10 });
|
||||
expect(result).toBe(20);
|
||||
|
||||
// invalid input (string instead of number)
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
await toolWithValidation.call({ num: "oops" } as any);
|
||||
});
|
||||
|
||||
test("works with plain JSON schema", async () => {
|
||||
const mockFn = vi.fn().mockImplementation(({ msg }: { msg: string }) => {
|
||||
return msg.toUpperCase();
|
||||
});
|
||||
|
||||
const toolWithJson = FunctionTool.from(mockFn, {
|
||||
name: "shout",
|
||||
description: "Shouts the message",
|
||||
parameters: {
|
||||
type: "object",
|
||||
properties: { msg: { type: "string" } },
|
||||
required: ["msg"],
|
||||
},
|
||||
});
|
||||
|
||||
const result = await toolWithJson.call({ msg: "hi" });
|
||||
expect(result).toBe("HI");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
import {
|
||||
isZodSchema,
|
||||
isZodV3Schema,
|
||||
isZodV4Schema,
|
||||
parseSchema,
|
||||
safeParseSchema,
|
||||
zodToJsonSchema,
|
||||
} from "@llamaindex/core/zod";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { z as z3 } from "zod/v3";
|
||||
import { z as z4 } from "zod/v4";
|
||||
|
||||
describe("Zod schema utils", () => {
|
||||
describe("parseSchema / safeParseSchema", () => {
|
||||
it("parses valid data with Zod v3 schema", () => {
|
||||
const schema = z3.object({ name: z3.string() });
|
||||
const result = parseSchema(schema, { name: "Alice" });
|
||||
expect(result).toEqual({ name: "Alice" });
|
||||
});
|
||||
|
||||
it("parses valid data with Zod v4 schema", () => {
|
||||
const schema = z4.object({ age: z4.number() });
|
||||
const result = parseSchema(schema, { age: 42 });
|
||||
expect(result).toEqual({ age: 42 });
|
||||
});
|
||||
|
||||
it("safeParse works with invalid data (v3)", () => {
|
||||
const schema = z3.object({ name: z3.string() });
|
||||
const res = safeParseSchema(schema, { name: 123 });
|
||||
expect(res.success).toBe(false);
|
||||
});
|
||||
|
||||
it("safeParse works with invalid data (v4)", () => {
|
||||
const schema = z4.object({ age: z4.number() });
|
||||
const res = safeParseSchema(schema, { age: "oops" });
|
||||
expect(res.success).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("isZodV3Schema / isZodV4Schema / isZodSchema", () => {
|
||||
it("detects a v3 schema", () => {
|
||||
const schema = z3.string();
|
||||
expect(isZodV3Schema(schema)).toBe(true);
|
||||
expect(isZodSchema(schema)).toBe(true);
|
||||
expect(isZodV4Schema(schema)).toBe(false);
|
||||
});
|
||||
|
||||
it("detects a v4 schema", () => {
|
||||
const schema = z4.string();
|
||||
expect(isZodV4Schema(schema)).toBe(true);
|
||||
expect(isZodSchema(schema)).toBe(true);
|
||||
expect(isZodV3Schema(schema)).toBe(false);
|
||||
});
|
||||
|
||||
it("returns false for non-schemas", () => {
|
||||
expect(isZodSchema(123)).toBe(false);
|
||||
expect(isZodSchema({})).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("zodToJsonSchema", () => {
|
||||
it("converts v3 string schema", () => {
|
||||
const schema = z3.string().min(2).max(5).describe("A short string");
|
||||
const json = zodToJsonSchema(schema);
|
||||
expect(json).toMatchObject({
|
||||
type: "string",
|
||||
minLength: 2,
|
||||
maxLength: 5,
|
||||
description: "A short string",
|
||||
});
|
||||
});
|
||||
|
||||
it("converts v3 object schema", () => {
|
||||
const schema = z3.object({
|
||||
id: z3.number(),
|
||||
name: z3.string().optional(),
|
||||
});
|
||||
const json = zodToJsonSchema(schema);
|
||||
expect(json).toMatchObject({
|
||||
type: "object",
|
||||
properties: {
|
||||
id: { type: "number" },
|
||||
name: { type: "string" },
|
||||
},
|
||||
required: ["id"],
|
||||
});
|
||||
});
|
||||
|
||||
it("converts v4 array schema", () => {
|
||||
const schema = z4.array(z4.boolean());
|
||||
const json = zodToJsonSchema(schema);
|
||||
expect(json).toMatchObject({
|
||||
type: "array",
|
||||
items: { type: "boolean" },
|
||||
});
|
||||
});
|
||||
|
||||
it("converts v4 enum schema", () => {
|
||||
const schema = z4.enum(["red", "green", "blue"]);
|
||||
const json = zodToJsonSchema(schema);
|
||||
expect(json).toMatchObject({
|
||||
type: "string",
|
||||
enum: ["red", "green", "blue"],
|
||||
});
|
||||
});
|
||||
|
||||
it("handles nested v3 objects", () => {
|
||||
const schema = z3.object({
|
||||
user: z3.object({
|
||||
id: z3.number(),
|
||||
tags: z3.array(z3.string()),
|
||||
}),
|
||||
});
|
||||
const json = zodToJsonSchema(schema);
|
||||
expect(json).toMatchObject({
|
||||
type: "object",
|
||||
properties: {
|
||||
user: {
|
||||
type: "object",
|
||||
properties: {
|
||||
id: { type: "number" },
|
||||
tags: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
},
|
||||
},
|
||||
required: ["id", "tags"],
|
||||
},
|
||||
},
|
||||
required: ["user"],
|
||||
});
|
||||
});
|
||||
|
||||
it("handles nested v4 objects", () => {
|
||||
const schema = z4.object({
|
||||
profile: z4.object({
|
||||
email: z4.string(),
|
||||
active: z4.boolean(),
|
||||
}),
|
||||
});
|
||||
const json = zodToJsonSchema(schema);
|
||||
expect(json).toMatchObject({
|
||||
type: "object",
|
||||
properties: {
|
||||
profile: {
|
||||
type: "object",
|
||||
properties: {
|
||||
email: { type: "string" },
|
||||
active: { type: "boolean" },
|
||||
},
|
||||
required: ["email", "active"],
|
||||
additionalProperties: false,
|
||||
},
|
||||
},
|
||||
required: ["profile"],
|
||||
additionalProperties: false,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"exports": "./dist/index.js",
|
||||
"private": true
|
||||
}
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/experimental
|
||||
|
||||
## 0.0.206
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8929dcf]
|
||||
- llamaindex@0.11.29
|
||||
|
||||
## 0.0.205
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.28
|
||||
|
||||
## 0.0.204
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.27
|
||||
|
||||
## 0.0.203
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.26
|
||||
|
||||
## 0.0.202
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [049471b]
|
||||
- llamaindex@0.11.25
|
||||
|
||||
## 0.0.201
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.24
|
||||
|
||||
## 0.0.200
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/experimental",
|
||||
"description": "Experimental package for LlamaIndexTS",
|
||||
"version": "0.0.200",
|
||||
"version": "0.0.206",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -1,5 +1,59 @@
|
||||
# llamaindex
|
||||
|
||||
## 0.11.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8929dcf: feat: vectorStoreIndex has new option progressCallback
|
||||
- Updated dependencies [5da1cda]
|
||||
- @llamaindex/core@0.6.21
|
||||
- @llamaindex/workflow@1.1.23
|
||||
- @llamaindex/cloud@4.1.3
|
||||
- @llamaindex/node-parser@2.0.21
|
||||
|
||||
## 0.11.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1995b38]
|
||||
- @llamaindex/workflow@1.1.22
|
||||
|
||||
## 0.11.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
- @llamaindex/cloud@4.1.2
|
||||
- @llamaindex/node-parser@2.0.20
|
||||
- @llamaindex/workflow@1.1.21
|
||||
|
||||
## 0.11.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4b51791]
|
||||
- @llamaindex/cloud@4.1.1
|
||||
|
||||
## 0.11.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 049471b: Moved LlamaCloudFileService, LlamaCloudIndex and LlamaCloudRetriever to llama-cloud-services
|
||||
- Updated dependencies [049471b]
|
||||
- @llamaindex/cloud@4.1.0
|
||||
|
||||
## 0.11.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c3bf3c7]
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/cloud@4.0.28
|
||||
- @llamaindex/core@0.6.19
|
||||
- @llamaindex/node-parser@2.0.19
|
||||
- @llamaindex/workflow@1.1.20
|
||||
|
||||
## 0.11.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "llamaindex",
|
||||
"version": "0.11.23",
|
||||
"version": "0.11.29",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"keywords": [
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
console.warn(`
|
||||
The classes LlamaCloudFileService, LlamaCloudIndex and LlamaCloudRetriever have been moved to the package llama-cloud-services.
|
||||
* Please migrate your imports to llama-cloud-services, e.g. import { LlamaCloudIndex } from "llama-cloud-services";
|
||||
* See the documentation: https://docs.cloud.llamaindex.ai
|
||||
`);
|
||||
|
||||
export { LLamaCloudFileService } from "./LLamaCloudFileService.js";
|
||||
export { LlamaCloudIndex } from "./LlamaCloudIndex.js";
|
||||
export {
|
||||
|
||||
@@ -54,6 +54,7 @@ export interface VectorIndexOptions extends IndexStructOptions {
|
||||
storageContext?: StorageContext | undefined;
|
||||
vectorStores?: VectorStoreByType | undefined;
|
||||
logProgress?: boolean | undefined;
|
||||
progressCallback?: ((progress: number, total: number) => void) | undefined;
|
||||
}
|
||||
|
||||
export interface VectorIndexConstructorProps extends BaseIndexInit<IndexDict> {
|
||||
@@ -121,6 +122,7 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
|
||||
// If nodes are passed in, then we need to update the index
|
||||
await index.buildIndexFromNodes(options.nodes, {
|
||||
logProgress: options.logProgress,
|
||||
progressCallback: options.progressCallback,
|
||||
});
|
||||
}
|
||||
return index;
|
||||
@@ -170,7 +172,12 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
|
||||
*/
|
||||
async getNodeEmbeddingResults(
|
||||
nodes: BaseNode[],
|
||||
options?: { logProgress?: boolean | undefined },
|
||||
options?: {
|
||||
logProgress?: boolean | undefined;
|
||||
progressCallback?:
|
||||
| ((progress: number, total: number) => void)
|
||||
| undefined;
|
||||
},
|
||||
): Promise<BaseNode[]> {
|
||||
const nodeMap = splitNodesByType(nodes);
|
||||
for (const type in nodeMap) {
|
||||
@@ -180,6 +187,7 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
|
||||
if (embedModel && nodes) {
|
||||
await embedModel(nodes, {
|
||||
logProgress: options?.logProgress,
|
||||
progressCallback: options?.progressCallback,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -193,7 +201,12 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
|
||||
*/
|
||||
async buildIndexFromNodes(
|
||||
nodes: BaseNode[],
|
||||
options?: { logProgress?: boolean | undefined },
|
||||
options?: {
|
||||
logProgress?: boolean | undefined;
|
||||
progressCallback?:
|
||||
| ((progress: number, total: number) => void)
|
||||
| undefined;
|
||||
},
|
||||
) {
|
||||
await this.insertNodes(nodes, options);
|
||||
}
|
||||
@@ -361,7 +374,12 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
|
||||
|
||||
async insertNodes(
|
||||
nodes: BaseNode[],
|
||||
options?: { logProgress?: boolean | undefined },
|
||||
options?: {
|
||||
logProgress?: boolean | undefined;
|
||||
progressCallback?:
|
||||
| ((progress: number, total: number) => void)
|
||||
| undefined;
|
||||
},
|
||||
): Promise<void> {
|
||||
if (!nodes || nodes.length === 0) {
|
||||
return;
|
||||
|
||||
@@ -8,7 +8,7 @@ import {
|
||||
BaseInMemoryKVStore,
|
||||
SimpleKVStore,
|
||||
} from "@llamaindex/core/storage/kv-store";
|
||||
import { path } from "@llamaindex/env";
|
||||
import { path, type Logger } from "@llamaindex/env";
|
||||
import _ from "lodash";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
@@ -27,19 +27,28 @@ export class SimpleDocumentStore extends KVDocumentStore {
|
||||
static async fromPersistDir(
|
||||
persistDir: string = DEFAULT_PERSIST_DIR,
|
||||
namespace?: string,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleDocumentStore> {
|
||||
const persistPath = path.join(
|
||||
persistDir,
|
||||
DEFAULT_DOC_STORE_PERSIST_FILENAME,
|
||||
);
|
||||
return await SimpleDocumentStore.fromPersistPath(persistPath, namespace);
|
||||
return await SimpleDocumentStore.fromPersistPath(
|
||||
persistPath,
|
||||
namespace,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
static async fromPersistPath(
|
||||
persistPath: string,
|
||||
namespace?: string,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleDocumentStore> {
|
||||
const simpleKVStore = await SimpleKVStore.fromPersistPath(persistPath);
|
||||
const simpleKVStore = await SimpleKVStore.fromPersistPath(
|
||||
persistPath,
|
||||
options,
|
||||
);
|
||||
return new SimpleDocumentStore(simpleKVStore, namespace);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
type VectorStoreQuery,
|
||||
type VectorStoreQueryResult,
|
||||
} from "@llamaindex/core/vector-store";
|
||||
import { fs, path } from "@llamaindex/env";
|
||||
import { consoleLogger, fs, path, type Logger } from "@llamaindex/env";
|
||||
import { exists } from "../storage/FileSystem.js";
|
||||
|
||||
const LEARNER_MODES = new Set<VectorStoreQueryMode>([
|
||||
@@ -139,9 +139,14 @@ export class SimpleVectorStore extends BaseVectorStore {
|
||||
static async fromPersistDir(
|
||||
persistDir: string = DEFAULT_PERSIST_DIR,
|
||||
embedModel?: BaseEmbedding,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleVectorStore> {
|
||||
const persistPath = path.join(persistDir, "vector_store.json");
|
||||
return await SimpleVectorStore.fromPersistPath(persistPath, embedModel);
|
||||
return await SimpleVectorStore.fromPersistPath(
|
||||
persistPath,
|
||||
embedModel,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
client() {
|
||||
@@ -273,7 +278,9 @@ export class SimpleVectorStore extends BaseVectorStore {
|
||||
static async fromPersistPath(
|
||||
persistPath: string,
|
||||
embedModel?: BaseEmbedding,
|
||||
options?: { logger?: Logger },
|
||||
): Promise<SimpleVectorStore> {
|
||||
const logger = options?.logger ?? consoleLogger;
|
||||
const dirPath = path.dirname(persistPath);
|
||||
if (!(await exists(dirPath))) {
|
||||
await fs.mkdir(dirPath, { recursive: true });
|
||||
@@ -281,7 +288,7 @@ export class SimpleVectorStore extends BaseVectorStore {
|
||||
|
||||
let dataDict: Record<string, unknown> = {};
|
||||
if (!(await exists(persistPath))) {
|
||||
console.info(`Starting new store from path: ${persistPath}`);
|
||||
logger.log(`Starting new store from path: ${persistPath}`);
|
||||
} else {
|
||||
try {
|
||||
const fileData = await fs.readFile(persistPath);
|
||||
|
||||
@@ -1,5 +1,47 @@
|
||||
# @llamaindex/core-test
|
||||
|
||||
## 0.1.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8929dcf: feat: vectorStoreIndex has new option progressCallback
|
||||
- Updated dependencies [5da1cda]
|
||||
- @llamaindex/openai@0.4.19
|
||||
|
||||
## 0.1.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [001a515]
|
||||
- Updated dependencies [9d7d205]
|
||||
- @llamaindex/openai@0.4.18
|
||||
|
||||
## 0.1.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/openai@0.4.17
|
||||
|
||||
## 0.1.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4c70376]
|
||||
- @llamaindex/openai@0.4.16
|
||||
|
||||
## 0.1.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b6409b6]
|
||||
- @llamaindex/openai@0.4.15
|
||||
|
||||
## 0.1.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/openai@0.4.14
|
||||
|
||||
## 0.1.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -89,4 +89,42 @@ describe("[VectorStoreIndex] use embedding model", () => {
|
||||
expect(customSpy).toHaveBeenCalled();
|
||||
expect(settingsSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
describe("[VectorStoreIndex] call progressCallback", () => {
|
||||
it("should call progressCallback with correct values", async () => {
|
||||
const documents = Array.from(
|
||||
{ length: 20 },
|
||||
(_, i) => new Document({ text: `This is document ${i + 1}` }),
|
||||
);
|
||||
|
||||
const progressCalls: Array<{ current: number; total: number }> = [];
|
||||
const progressCallback = (current: number, total: number) => {
|
||||
progressCalls.push({ current, total });
|
||||
};
|
||||
|
||||
const embedModel = new OpenAIEmbedding();
|
||||
mockEmbeddingModel(embedModel);
|
||||
const embedSpy = vi.spyOn(embedModel, "getTextEmbeddingsBatch");
|
||||
|
||||
Settings.embedModel = embedModel;
|
||||
const storageContext = await mockStorageContext(testDir, embedModel);
|
||||
|
||||
await VectorStoreIndex.fromDocuments(documents, {
|
||||
storageContext,
|
||||
logProgress: true,
|
||||
progressCallback,
|
||||
});
|
||||
|
||||
// Expect the embedding model to be called
|
||||
expect(embedSpy).toHaveBeenCalled();
|
||||
|
||||
// Verify that progressCallback was called with correct values
|
||||
expect(progressCalls.length).toBeGreaterThan(0);
|
||||
expect(progressCalls[0]).toEqual({ current: 10, total: 20 });
|
||||
expect(progressCalls[progressCalls.length - 1]).toEqual({
|
||||
current: 20,
|
||||
total: 20,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llamaindex-test",
|
||||
"private": true,
|
||||
"version": "0.1.14",
|
||||
"version": "0.1.20",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "vitest run"
|
||||
|
||||
@@ -47,22 +47,31 @@ describe("StorageContext", () => {
|
||||
|
||||
test("persists and loads", async () => {
|
||||
const doc = new Document({ text: "test document" });
|
||||
const consoleInfoSpy = vi
|
||||
.spyOn(console, "info")
|
||||
.mockImplementation(() => {});
|
||||
// Create a Logger that spies on log (info) calls
|
||||
const spyLogger = {
|
||||
log: vi.fn(),
|
||||
error: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
};
|
||||
|
||||
// storage context from individual stores
|
||||
const storageContext = await storageContextFromDefaults({
|
||||
docStore: await SimpleDocumentStore.fromPersistDir(testDir),
|
||||
vectorStore: await SimpleVectorStore.fromPersistDir(testDir),
|
||||
indexStore: await SimpleIndexStore.fromPersistDir(testDir),
|
||||
docStore: await SimpleDocumentStore.fromPersistDir(testDir, undefined, {
|
||||
logger: spyLogger,
|
||||
}),
|
||||
vectorStore: await SimpleVectorStore.fromPersistDir(testDir, undefined, {
|
||||
logger: spyLogger,
|
||||
}),
|
||||
indexStore: await SimpleIndexStore.fromPersistDir(testDir, {
|
||||
logger: spyLogger,
|
||||
}),
|
||||
});
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([doc], {
|
||||
storageContext,
|
||||
});
|
||||
expect(consoleInfoSpy).toHaveBeenCalledTimes(3);
|
||||
expect(consoleInfoSpy).toHaveBeenCalledWith(
|
||||
expect(spyLogger.log).toHaveBeenCalledTimes(3);
|
||||
expect(spyLogger.log).toHaveBeenCalledWith(
|
||||
expect.stringContaining("Starting new store"),
|
||||
);
|
||||
expect(index).toBeDefined();
|
||||
@@ -75,13 +84,19 @@ describe("StorageContext", () => {
|
||||
// Check that the test data files exist
|
||||
await expectTestDataFilesExist(testDir);
|
||||
|
||||
consoleInfoSpy.mockClear();
|
||||
spyLogger.log.mockClear();
|
||||
|
||||
// Now, load it again. Since data was persisted, we should not see the error.
|
||||
const newStorageContext = await storageContextFromDefaults({
|
||||
docStore: await SimpleDocumentStore.fromPersistDir(testDir),
|
||||
vectorStore: await SimpleVectorStore.fromPersistDir(testDir),
|
||||
indexStore: await SimpleIndexStore.fromPersistDir(testDir),
|
||||
docStore: await SimpleDocumentStore.fromPersistDir(testDir, undefined, {
|
||||
logger: spyLogger,
|
||||
}),
|
||||
vectorStore: await SimpleVectorStore.fromPersistDir(testDir, undefined, {
|
||||
logger: spyLogger,
|
||||
}),
|
||||
indexStore: await SimpleIndexStore.fromPersistDir(testDir, {
|
||||
logger: spyLogger,
|
||||
}),
|
||||
});
|
||||
|
||||
const loadedIndex = await VectorStoreIndex.init({
|
||||
@@ -94,9 +109,7 @@ describe("StorageContext", () => {
|
||||
|
||||
await expectTestDataFilesExist(testDir);
|
||||
|
||||
expect(consoleInfoSpy).not.toHaveBeenCalled();
|
||||
|
||||
consoleInfoSpy.mockRestore();
|
||||
expect(spyLogger.log).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("throws error on corrupted data", async () => {
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @llamaindex/node-parser
|
||||
|
||||
## 2.0.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5da1cda]
|
||||
- @llamaindex/core@0.6.21
|
||||
|
||||
## 2.0.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
|
||||
## 2.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/core@0.6.19
|
||||
|
||||
## 2.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/node-parser",
|
||||
"version": "2.0.18",
|
||||
"version": "2.0.21",
|
||||
"description": "Node parser for LlamaIndex",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
# @llamaindex/anthropic
|
||||
|
||||
## 0.3.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 5d5cd44: fix: anthropic temperature parameter not respecting value 0
|
||||
- Updated dependencies [5da1cda]
|
||||
- @llamaindex/core@0.6.21
|
||||
|
||||
## 0.3.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0267bb0]
|
||||
- @llamaindex/core@0.6.20
|
||||
|
||||
## 0.3.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b80f33e: Fix: prompt caching (moved from beta)
|
||||
- b80f33e: Feat: add claude opus 4.1
|
||||
|
||||
## 0.3.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f9f1de9]
|
||||
- @llamaindex/core@0.6.19
|
||||
|
||||
## 0.3.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/anthropic",
|
||||
"description": "Anthropic Adapter for LlamaIndex",
|
||||
"version": "0.3.20",
|
||||
"version": "0.3.24",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
@@ -28,19 +28,20 @@
|
||||
"scripts": {
|
||||
"build": "bunchee",
|
||||
"dev": "bunchee --watch",
|
||||
"test": "vitest run"
|
||||
"test": "vitest run",
|
||||
"type-check": "tsc -b --diagnostics"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitest": "^2.1.5",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*"
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"vitest": "^2.1.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@anthropic-ai/sdk": "0.37.0",
|
||||
"@anthropic-ai/sdk": "0.58.0",
|
||||
"remeda": "^2.17.3"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user