Compare commits

...

31 Commits

Author SHA1 Message Date
github-actions[bot] f369d3de4f Release 0.8.27 (#1545)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-12-11 12:18:21 +07:00
Parham Saidi c1850ee370 feat: Amazon Nova support via Bedrock (#1548) 2024-12-10 18:56:35 -08:00
Marcus Schiesser 086a65141d Add adapter to use Vercel model providers (#1558)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-12-09 21:02:57 -08:00
Qwertic d99d598491 Update typescript.mdx (#1557) 2024-12-09 19:52:15 -08:00
Gunnar Holwerda a0e6f57d9b Pass options through to userWebpack in withLlamaIndex (#1550) 2024-12-09 19:51:52 -08:00
Gunnar Holwerda e0f6cc3be1 fix: return actual source nodes with compact and refine response synt… (#1554) 2024-12-09 11:00:12 -08:00
Jingyi Zhao 8386510d86 chore: add e2e working example for ingestion (#1543) 2024-12-04 17:36:00 -08:00
Marcus Schiesser b504303c66 fix: allow Node 18 again to make Stackblitz work (#1544) 2024-12-03 20:57:20 -08:00
Marcus Schiesser cf9a9356e0 fix: discord link (#1542) 2024-12-03 11:16:02 +07:00
github-actions[bot] 335020e242 Release 0.8.26 (#1541)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-12-02 12:23:57 -08:00
Alex Yang 3d1808b5d2 chore: bump version (#1540) 2024-12-02 12:18:51 -08:00
Alex Yang a19cbc7fe0 ci: fix (#1539) 2024-12-02 10:33:44 -08:00
github-actions[bot] b8f0cbc4e0 Release 0.8.25 (#1536)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <marcusschiesser@users.noreply.github.com>
2024-12-02 03:02:36 -08:00
Marcus Schiesser 7e8230b056 fix: release missing readers package (#1537) 2024-12-02 17:54:22 +07:00
Alex Yang 8be45899a7 chore: bump version 2024-12-02 02:21:13 -08:00
github-actions[bot] c4800bcf82 Release @llamaindex/vercel@0.0.2 (#1535) 2024-12-02 14:19:40 +07:00
Thuc Pham fd38a253b7 feat: add vercel chat example (#1532)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2024-12-02 13:56:28 +07:00
github-actions[bot] 510191cb5d Release 0.8.24 (#1531)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-30 06:05:47 -08:00
Jingyi Zhao 7934ade092 fix: add obsidian reader to index (#1533) 2024-11-30 01:29:45 -08:00
Jingyi Zhao a6c1eab762 feat: data connector for obsidian note taking app (#1529) 2024-11-29 22:39:59 -08:00
crisjy 515f2c1e3d feat: add AzureCosmosDBMongoVectorStore (#1528) 2024-11-28 17:53:09 -08:00
github-actions[bot] dc85649ead Release 0.8.23 (#1526)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-26 17:41:29 -08:00
Alex Yang d2b2722a30 fix: switch tokenizer in cloudflare (#1525) 2024-11-26 15:42:20 -08:00
github-actions[bot] a2bbd62399 Release 0.8.22 (#1520)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-21 23:17:45 -08:00
Alex Yang 969365ca0a feat: add cloudflare worker full example (#1521) 2024-11-21 23:05:40 -08:00
fatmelon 819af453d6 feat: add Azure CosmosDB Mongo vCore Chat store (#1516)
Co-authored-by: root <root@CPC-yangq-FRSGK>
2024-11-21 21:25:41 -08:00
github-actions[bot] 9db36f7384 Release 0.8.21 (#1513)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-19 18:18:35 -08:00
fatmelon efa221116f feat: integrate with azure cosmos db mongo vCore (#1500)
Co-authored-by: root <root@CPC-yangq-FRSGK>
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-19 17:58:25 -08:00
Alex Yang 83c3897539 fix: pinecone vector store (#1512) 2024-11-19 17:51:45 -08:00
github-actions[bot] e1cbce1f80 Release 0.8.20 (#1511)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-19 10:01:18 -08:00
Madarco 02b22da384 fix: supports vercel bundling (#1509)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-19 09:52:56 -08:00
130 changed files with 4876 additions and 194 deletions
+2 -2
View File
@@ -23,7 +23,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [20.x, 22.x, 23.x]
node-version: [18.x, 20.x, 22.x, 23.x]
name: E2E on Node.js ${{ matrix.node-version }}
runs-on: ubuntu-latest
steps:
@@ -53,7 +53,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [20.x, 22.x, 23.x]
node-version: [18.x, 20.x, 22.x, 23.x]
name: Test on Node.js ${{ matrix.node-version }}
runs-on: ubuntu-latest
steps:
+67
View File
@@ -1,5 +1,72 @@
# docs
## 0.0.133
### Patch Changes
- c1850ee: feat: Amazon Nova support via Bedrock
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
- @llamaindex/examples@0.0.20
## 0.0.132
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
- @llamaindex/examples@0.0.19
## 0.0.131
### Patch Changes
- llamaindex@0.8.25
- @llamaindex/examples@0.0.18
## 0.0.130
### Patch Changes
- Updated dependencies [fd38a25]
- @llamaindex/examples@0.0.17
## 0.0.129
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.0.128
### Patch Changes
- llamaindex@0.8.23
## 0.0.127
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.0.126
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.0.125
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.0.124
### Patch Changes
@@ -37,6 +37,9 @@ META_LLAMA3_2_1B_INSTRUCT = "meta.llama3-2-1b-instruct-v1:0"; // only available
META_LLAMA3_2_3B_INSTRUCT = "meta.llama3-2-3b-instruct-v1:0"; // only available via inference endpoints (see below)
META_LLAMA3_2_11B_INSTRUCT = "meta.llama3-2-11b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
META_LLAMA3_2_90B_INSTRUCT = "meta.llama3-2-90b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
AMAZON_NOVA_PRO_1 = "amazon.nova-pro-v1:0";
AMAZON_NOVA_LITE_1 = "amazon.nova-lite-v1:0";
AMAZON_NOVA_MICRO_1 = "amazon.nova-micro-v1:0";
```
You can also use Bedrock's Inference endpoints by using the model names:
@@ -53,6 +56,9 @@ US_META_LLAMA_3_2_1B_INSTRUCT = "us.meta.llama3-2-1b-instruct-v1:0";
US_META_LLAMA_3_2_3B_INSTRUCT = "us.meta.llama3-2-3b-instruct-v1:0";
US_META_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0";
US_META_LLAMA_3_2_90B_INSTRUCT = "us.meta.llama3-2-90b-instruct-v1:0";
US_AMAZON_NOVA_PRO_1 = "us.amazon.nova-pro-v1:0";
US_AMAZON_NOVA_LITE_1 = "us.amazon.nova-lite-v1:0";
US_AMAZON_NOVA_MICRO_1 = "us.amazon.nova-micro-v1:0";
// EU
EU_ANTHROPIC_CLAUDE_3_HAIKU = "eu.anthropic.claude-3-haiku-20240307-v1:0";
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.124",
"version": "0.0.133",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
+92
View File
@@ -1,5 +1,97 @@
# @llamaindex/doc
## 0.0.31
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
- @llamaindex/core@0.4.18
- @llamaindex/cloud@2.0.18
- @llamaindex/node-parser@0.0.19
- @llamaindex/openai@0.1.43
- @llamaindex/readers@1.0.20
- @llamaindex/workflow@0.0.8
## 0.0.30
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
- llamaindex@0.8.26
- @llamaindex/openai@0.1.42
- @llamaindex/cloud@2.0.17
- @llamaindex/node-parser@0.0.18
- @llamaindex/readers@1.0.19
## 0.0.29
### Patch Changes
- Updated dependencies [7e8230b]
- Updated dependencies [8be4589]
- @llamaindex/readers@1.0.18
- @llamaindex/cloud@2.0.16
- @llamaindex/core@0.4.16
- @llamaindex/node-parser@0.0.17
- @llamaindex/openai@0.1.41
- @llamaindex/workflow@0.0.7
- llamaindex@0.8.25
## 0.0.28
### Patch Changes
- fd38a25: Add vercel tool adapter to use query engine tool
## 0.0.27
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.0.26
### Patch Changes
- @llamaindex/cloud@2.0.15
- @llamaindex/core@0.4.15
- llamaindex@0.8.23
- @llamaindex/node-parser@0.0.16
- @llamaindex/openai@0.1.40
- @llamaindex/readers@1.0.17
## 0.0.25
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
- @llamaindex/cloud@2.0.14
- @llamaindex/core@0.4.14
- @llamaindex/node-parser@0.0.15
- @llamaindex/openai@0.1.39
- @llamaindex/readers@1.0.16
## 0.0.24
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.0.23
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.0.22
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.0.22",
"version": "0.0.31",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
@@ -1,5 +1,5 @@
{
"title": "Integration",
"description": "See our integrations",
"pages": ["open-llm-metry", "lang-trace"]
"pages": ["open-llm-metry", "lang-trace", "vercel"]
}
@@ -0,0 +1,101 @@
---
title: Vercel
description: Integrate LlamaIndex with Vercel's AI SDK
---
LlamaIndex provides integration with Vercel's AI SDK, allowing you to create powerful search and retrieval applications. You can:
- Use any of Vercel AI's [model providers](https://sdk.vercel.ai/docs/foundations/providers-and-models) as LLMs in LlamaIndex
- Use indexes (e.g. VectorStoreIndex, LlamaCloudIndex) from LlamaIndexTS in your Vercel AI applications
## Setup
First, install the required dependencies:
```bash
npm install @llamaindex/vercel ai
```
## Using Vercel AI's Model Providers
Using the `VercelLLM` adapter, it's easy to use any of Vercel AI's [model providers](https://sdk.vercel.ai/docs/foundations/providers-and-models) as LLMs in LlamaIndex. Here's an example of how to use OpenAI's GPT-4o model:
```typescript
const llm = new VercelLLM({ model: openai("gpt-4o") });
const result = await llm.complete({
prompt: "What is the capital of France?",
stream: false, // Set to true if you want streaming responses
});
console.log(result.text);
```
## Use Indexes
### Using VectorStoreIndex
Here's how to create a simple vector store index and query it using Vercel's AI SDK:
```typescript
import { openai } from "@ai-sdk/openai";
import { llamaindex } from "@llamaindex/vercel";
import { streamText } from "ai";
import { Document, VectorStoreIndex } from "llamaindex";
// Create an index from your documents
const document = new Document({ text: yourText, id_: "unique-id" });
const index = await VectorStoreIndex.fromDocuments([document]);
// Create a query tool
const queryTool = llamaindex({
model: openai("gpt-4"),
index,
description: "Search through the documents", // optional
});
// Use the tool with Vercel's AI SDK
streamText({
model: openai("gpt-4"),
prompt: "Your question here",
tools: { queryTool },
onFinish({ response }) {
console.log("Response:", response.messages); // log the response
},
}).toDataStream();
```
> Note: the Vercel AI model referenced in the `llamaindex` function is used by the response synthesizer to generate a response for the tool call.
### Using LlamaCloud
For production deployments, you can use LlamaCloud to store and manage your documents:
```typescript
import { LlamaCloudIndex } from "llamaindex";
// Create a LlamaCloud index
const index = await LlamaCloudIndex.fromDocuments({
documents: [document],
name: "your-index-name",
projectName: "your-project",
apiKey: process.env.LLAMA_CLOUD_API_KEY,
});
// Use it the same way as VectorStoreIndex
const queryTool = llamaindex({
model: openai("gpt-4"),
index,
description: "Search through the documents",
});
// Use the tool with Vercel's AI SDK
streamText({
model: openai("gpt-4"),
prompt: "Your question here",
tools: { queryTool },
}).toDataStream();
```
## Next Steps
1. Explore [LlamaCloud](https://cloud.llamaindex.ai/) for managed document storage and retrieval
2. Join our [Discord community](https://discord.gg/dGcwcsnxhU) for support and discussions
@@ -37,6 +37,33 @@ Then, you need create `.dev.vars` and add LLM api keys for the local development
<Callout type="warn">Do not commit the api key to git repository.</Callout>
## Integrating with Hono
```ts
import { Hono } from "hono";
type Bindings = {
OPENAI_API_KEY: string;
};
const app = new Hono<{
Bindings: Bindings;
}>();
app.post("/llm", async (c) => {
const { setEnvs } = await import("@llamaindex/env");
setEnvs(c.env);
// ...
return new Response('Hello, world!');
})
export default {
fetch: app.fetch,
};
```
## Difference between Node.js and Cloudflare Worker
In Cloudflare Worker and similar serverless JS environment, you need to be aware of the following differences:
@@ -46,3 +73,7 @@ In Cloudflare Worker and similar serverless JS environment, you need to be aware
- Some of LlamaIndex.TS modules are not available in Cloudflare Worker, for example `SimpleDirectoryReader` (requires `node:fs`), Some multimodal API that relies on [`onnxruntime-node`](https://www.npmjs.com/package/onnxruntime-node)(we might port to HTTP based module in the future).
- `@llamaindex/core` is designed to work in all JavaScript environment, including Cloudflare Worker. If you find any issue, please report to us.
- `@llamaindex/env` is a JS environment binding module, which polyfill some Node.js/Modern Web API (for example, we have a memory based `fs` module, and Crypto API polyfill). It is designed to work in all JavaScript environment, including Cloudflare Worker.
## Known issues
- `llamaindex` not work perfectly in Cloudflare Worker, bundle size will be larger than 1MB, which is the limit of Cloudflare Worker. You will need import submodule instead of the whole `llamaindex` module.
@@ -84,7 +84,7 @@ Imaging you put output file into `/dist/openai.js` but you are importing `llamai
}
```
In old module resolution, TypeScript will not be able to find the module because it is not follow the file structure, even you run `node index.js` successfully. (on Node.js >=16)
In old module resolution, TypeScript will not be able to find the module because it is not following the file structure, even you run `node index.js` successfully. (on Node.js >=16)
See more about [moduleResolution](https://www.typescriptlang.org/docs/handbook/modules/theory.html#module-resolution) or
[TypeScript 5.0 blog](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#--moduleresolution-bundler7).
+3
View File
@@ -1 +1,4 @@
POSTGRES_USER=runner
PINECONE_API_KEY=
PINECONE_INDEX_NAME=
PINECONE_NAMESPACE=
+172
View File
@@ -0,0 +1,172 @@
# Logs
logs
_.log
npm-debug.log_
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
# Runtime data
pids
_.pid
_.seed
\*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
\*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
\*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
\*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.\*
# wrangler project
.dev.vars
.wrangler/
+20
View File
@@ -0,0 +1,20 @@
{
"name": "@llamaindex/cloudflare-hono",
"version": "0.0.0",
"private": true,
"scripts": {
"deploy": "wrangler deploy",
"build": "wrangler deploy --dry-run --outdir dist",
"dev": "wrangler dev",
"start": "wrangler dev",
"cf-typegen": "wrangler types"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20241112.0",
"typescript": "^5.5.2",
"wrangler": "^3.89.0"
},
"dependencies": {
"hono": "^4.6.11"
}
}
+91
View File
@@ -0,0 +1,91 @@
import { Hono } from "hono";
type Bindings = {
OPENAI_API_KEY: string;
PINECONE_API_KEY: string;
};
const app = new Hono<{
Bindings: Bindings;
}>();
app.post("/llm", async (c) => {
//#region init envs
const { setEnvs } = await import("@llamaindex/env");
setEnvs(c.env);
//#endregion
const { message } = await c.req.json();
const { extractText } = await import("@llamaindex/core/utils");
const {
QueryEngineTool,
serviceContextFromDefaults,
VectorStoreIndex,
OpenAIAgent,
Settings,
OpenAI,
OpenAIEmbedding,
} = await import("llamaindex");
const { PineconeVectorStore } = await import(
"llamaindex/vector-store/PineconeVectorStore"
);
const llm = new OpenAI({
model: "gpt-4o-mini",
apiKey: c.env.OPENAI_API_KEY,
});
Settings.embedModel = new OpenAIEmbedding({
model: "text-embedding-3-small",
apiKey: c.env.OPENAI_API_KEY,
});
const serviceContext = serviceContextFromDefaults({
llm,
chunkSize: 8191,
chunkOverlap: 0,
});
const store = new PineconeVectorStore({
namespace: "8xolsn4ulEQGdhnhP76yCzfLHdOZ",
});
const index = await VectorStoreIndex.fromVectorStore(store, serviceContext);
const retriever = index.asRetriever({
similarityTopK: 3,
});
// Create a query engine
const queryEngine = index.asQueryEngine({
retriever,
});
const tools = [
new QueryEngineTool({
queryEngine: queryEngine,
metadata: {
name: "business_info_tool",
description:
"This tool can answer questions based " +
"on business information. Return not found if you" +
" can't find the answer in the documents.",
},
}),
];
const agent = new OpenAIAgent({ tools });
const response = await agent.chat({
message: message,
});
return new Response(extractText(response.message.content));
});
export default {
fetch: app.fetch,
};
@@ -0,0 +1,39 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"target": "es2021",
/* Specify a set of bundled library declaration files that describe the target runtime environment. */
"lib": ["es2021", "DOM.AsyncIterable"],
/* Specify what JSX code is generated. */
"jsx": "react-jsx",
/* Specify what module code is generated. */
"module": "es2022",
/* Specify how TypeScript looks up a file from a given module specifier. */
"moduleResolution": "Bundler",
/* Specify type package names to be included without being referenced in a source file. */
"types": ["@cloudflare/workers-types/2023-07-01"],
/* Enable importing .json files */
"resolveJsonModule": true,
/* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
"allowJs": true,
/* Enable error reporting in type-checked JavaScript files. */
"checkJs": false,
/* Disable emitting files from a compilation. */
"noEmit": true,
/* Ensure that each file can be safely transpiled without relying on other imports. */
"isolatedModules": true,
/* Allow 'import x from y' when a module doesn't have a default export. */
"allowSyntheticDefaultImports": true,
/* Ensure that casing is correct in imports. */
"forceConsistentCasingInFileNames": true,
/* Enable all strict type-checking options. */
"strict": true,
/* Skip type checking all .d.ts files. */
"skipLibCheck": true
},
"exclude": ["test"],
"include": ["vitest.config.mts", "worker-configuration.d.ts", "src/**/*.ts"]
}
@@ -0,0 +1,4 @@
// Generated by Wrangler by running `wrangler types`
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
interface Env {}
@@ -0,0 +1,7 @@
name = "llamaindex-cloudflare-hono-example"
main = "src/index.ts"
compatibility_date = "2024-11-12"
compatibility_flags = ["nodejs_als"]
[observability]
enabled = true
@@ -1,5 +1,61 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.123
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 0.0.122
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 0.0.121
### Patch Changes
- llamaindex@0.8.25
## 0.0.120
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.0.119
### Patch Changes
- llamaindex@0.8.23
## 0.0.118
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.0.117
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.0.116
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.0.115
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.115",
"version": "0.0.123",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,36 @@
# @llamaindex/llama-parse-browser-test
## 0.0.38
### Patch Changes
- @llamaindex/cloud@2.0.18
## 0.0.37
### Patch Changes
- @llamaindex/cloud@2.0.17
## 0.0.36
### Patch Changes
- Updated dependencies [8be4589]
- @llamaindex/cloud@2.0.16
## 0.0.35
### Patch Changes
- @llamaindex/cloud@2.0.15
## 0.0.34
### Patch Changes
- @llamaindex/cloud@2.0.14
## 0.0.33
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.33",
"version": "0.0.38",
"type": "module",
"scripts": {
"dev": "vite",
+56
View File
@@ -1,5 +1,61 @@
# @llamaindex/next-agent-test
## 0.1.123
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 0.1.122
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 0.1.121
### Patch Changes
- llamaindex@0.8.25
## 0.1.120
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.1.119
### Patch Changes
- llamaindex@0.8.23
## 0.1.118
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.1.117
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.1.116
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.1.115
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.115",
"version": "0.1.123",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,61 @@
# test-edge-runtime
## 0.1.122
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 0.1.121
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 0.1.120
### Patch Changes
- llamaindex@0.8.25
## 0.1.119
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.1.118
### Patch Changes
- llamaindex@0.8.23
## 0.1.117
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.1.116
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.1.115
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.1.114
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.114",
"version": "0.1.122",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,61 @@
# @llamaindex/next-node-runtime
## 0.0.104
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 0.0.103
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 0.0.102
### Patch Changes
- llamaindex@0.8.25
## 0.0.101
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.0.100
### Patch Changes
- llamaindex@0.8.23
## 0.0.99
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.0.98
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.0.97
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.0.96
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.96",
"version": "0.0.104",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,61 @@
# @llamaindex/waku-query-engine-test
## 0.0.123
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 0.0.122
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 0.0.121
### Patch Changes
- llamaindex@0.8.25
## 0.0.120
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.0.119
### Patch Changes
- llamaindex@0.8.23
## 0.0.118
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.0.117
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.0.116
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.0.115
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.115",
"version": "0.0.123",
"type": "module",
"private": true,
"scripts": {
+5
View File
@@ -21,6 +21,11 @@ test.beforeEach(() => {
});
await test("clip embedding", async (t) => {
const major = parseInt(process.versions.node.split(".")[0] ?? "0", 10);
if (major < 20) {
t.skip("Skip CLIP tests on Node.js < 20");
return;
}
await t.test("should trigger load transformer event", async () => {
const nodes = [
new ImageNode({
+66
View File
@@ -0,0 +1,66 @@
import { Document, MetadataMode } from "@llamaindex/core/schema";
import { config } from "dotenv";
import {
OpenAIEmbedding,
PineconeVectorStore,
VectorStoreIndex,
} from "llamaindex";
import assert from "node:assert";
import { test } from "node:test";
config({ path: [".env.local", ".env", ".env.ci"] });
await test("pinecone", async (t) => {
if (
!process.env.PINECONE_API_KEY ||
!process.env.PINECONE_NAMESPACE ||
!process.env.PINECONE_INDEX_NAME
) {
return t.skip(
"PINECONE_API_KEY, PINECONE_NAMESPACE, and PINECONE_INDEX_NAME must be set to run this test",
);
}
const openaiEmbedding = new OpenAIEmbedding({
model: "text-embedding-3-large",
});
const vectorStore = new PineconeVectorStore({
embeddingModel: openaiEmbedding,
});
t.after(async () => {
await vectorStore.clearIndex();
});
const index = await VectorStoreIndex.fromVectorStore(vectorStore);
const retriever = index.asRetriever({
similarityTopK: 3,
});
const text = "We are open from 9am to 5pm";
await vectorStore.add([
new Document({
text,
embedding: await openaiEmbedding.getTextEmbedding(text),
}),
]);
const results = await retriever.retrieve({
query: "When are you open?",
});
results.every((result) => {
assert.ok(result.node.embedding instanceof Array);
result.node.embedding.every((embedding, idx) =>
assert.ok(
typeof embedding === "number",
`Embedding at index ${idx} should be a number`,
),
);
assert.ok(typeof result.score === "number", "Score should be a number");
assert.ok(
result.node.getContent(MetadataMode.NONE).length > 0,
"Content should not be empty",
);
});
});
+44
View File
@@ -1,5 +1,49 @@
# examples
## 0.0.20
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [086a651]
- Updated dependencies [e0f6cc3]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
- @llamaindex/vercel@0.0.5
- @llamaindex/core@0.4.18
- @llamaindex/readers@1.0.20
- @llamaindex/workflow@0.0.8
## 0.0.19
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
- llamaindex@0.8.26
- @llamaindex/vercel@0.0.4
- @llamaindex/readers@1.0.19
## 0.0.18
### Patch Changes
- Updated dependencies [7e8230b]
- Updated dependencies [8be4589]
- @llamaindex/readers@1.0.18
- @llamaindex/core@0.4.16
- @llamaindex/vercel@0.0.3
- @llamaindex/workflow@0.0.7
- llamaindex@0.8.25
## 0.0.17
### Patch Changes
- fd38a25: Add vercel tool adapter to use query engine tool
- Updated dependencies [fd38a25]
- @llamaindex/vercel@0.0.2
## 0.0.16
### Patch Changes
@@ -1,16 +1,15 @@
import fs from "node:fs/promises";
import {
Document,
IngestionPipeline,
MetadataMode,
OpenAIEmbedding,
SentenceSplitter,
VectorStoreIndex,
} from "llamaindex";
import fs from "node:fs/promises";
async function main() {
// Load essay from abramov.txt in Node
const path = "node_modules/llamaindex/examples/abramov.txt";
const path = "../node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
@@ -22,14 +21,23 @@ async function main() {
new OpenAIEmbedding(),
],
});
console.time("Pipeline Run Time");
// run the pipeline
const nodes = await pipeline.run({ documents: [document] });
// print out the result of the pipeline run
for (const node of nodes) {
console.log(node.getContent(MetadataMode.NONE));
}
console.timeEnd("Pipeline Run Time");
// initialize the VectorStoreIndex from nodes
const index = await VectorStoreIndex.init({ nodes });
// Query the index
const queryEngine = index.asQueryEngine();
const { message } = await queryEngine.query({
query: "summarize the article in three sentence",
});
console.log(message);
}
main().catch(console.error);
+8 -5
View File
@@ -1,24 +1,27 @@
{
"name": "@llamaindex/examples",
"private": true,
"version": "0.0.16",
"version": "0.0.20",
"dependencies": {
"@ai-sdk/openai": "^1.0.5",
"@aws-crypto/sha256-js": "^5.2.0",
"@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1",
"@datastax/astra-db-ts": "^1.4.1",
"@llamaindex/core": "^0.4.10",
"@llamaindex/readers": "^1.0.11",
"@llamaindex/workflow": "^0.0.6",
"@llamaindex/core": "^0.4.18",
"@llamaindex/readers": "^1.0.20",
"@llamaindex/workflow": "^0.0.8",
"@llamaindex/vercel": "^0.0.5",
"@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^4.0.0",
"@vercel/postgres": "^0.10.0",
"@zilliz/milvus2-sdk-node": "^2.4.6",
"ai": "^4.0.0",
"chromadb": "^1.8.1",
"commander": "^12.1.0",
"dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.8.13",
"llamaindex": "^0.8.27",
"mongodb": "^6.7.0",
"pathe": "^1.1.2",
"postgres": "^3.4.4"
+2 -1
View File
@@ -15,7 +15,8 @@
"start:llamaparse-dir": "node --import tsx ./src/simple-directory-reader-with-llamaparse.ts",
"start:llamaparse-json": "node --import tsx ./src/llamaparse-json.ts",
"start:discord": "node --import tsx ./src/discord.ts",
"start:json": "node --import tsx ./src/json.ts"
"start:json": "node --import tsx ./src/json.ts",
"start:obsidian": "node --import tsx ./src/obsidian.ts"
},
"dependencies": {
"@llamaindex/readers": "*",
+12
View File
@@ -0,0 +1,12 @@
import { ObsidianReader } from "@llamaindex/readers/obsidian";
const obsidianReader = new ObsidianReader(
"/Users/jingyi/Documents/jingyi-vault",
);
obsidianReader.loadData().then((documents) => {
console.log("documents:", documents.length);
documents.forEach((doc) => {
console.log(`document (${doc.id_}):`, doc.getText());
});
});
+60
View File
@@ -0,0 +1,60 @@
# Vercel Examples
These examples demonstrate how to integrate LlamaIndexTS with Vercel's AI SDK. The examples show how to use LlamaIndex for search and retrieval in both local vector store and LlamaCloud environments.
## Setup
To run these examples, first install the required dependencies from the parent folder `examples`:
```bash
npm i
```
## Running the Examples
Make sure to run the examples from the parent folder called `examples`. The following examples are available:
### Vercel LLM Example
Run the Vercel LLM example with:
```bash
npx tsx vercel/llm.ts
```
This example demonstrates using the `VercelLLM` adapter with Vercel's OpenAI model provider
### Vector Store Example
Run the local vector store example with:
```bash
npx tsx vercel/vector-store.ts
```
This example demonstrates:
- Creating a vector store index from one document
- Using Vercel's AI SDK with LlamaIndex for streaming responses
### LlamaCloud Example
To run the LlamaCloud example:
```bash
npx tsx vercel/llamacloud.ts
```
This example requires a LlamaCloud API key set in your environment and an embedding model set in the `EMBEDDING_MODEL` environment variable:
```bash
export LLAMA_CLOUD_API_KEY=your_api_key_here
export EMBEDDING_MODEL="text-embedding-3-small"
```
The example demonstrates:
- Creating a LlamaCloud index from one document
- Streaming responses using Vercel's AI SDK
For more detailed information about the Vercel integration, check out [the documentation](https://ts.llamaindex.ai/docs/llamaindex/integration/vercel).
+39
View File
@@ -0,0 +1,39 @@
import { openai } from "@ai-sdk/openai";
import { llamaindex } from "@llamaindex/vercel";
import { streamText } from "ai";
import { Document, LlamaCloudIndex } from "llamaindex";
import fs from "node:fs/promises";
async function main() {
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
const document = new Document({ text: essay, id_: path });
const index = await LlamaCloudIndex.fromDocuments({
documents: [document],
name: "test-pipeline",
projectName: "Default",
apiKey: process.env.LLAMA_CLOUD_API_KEY,
});
console.log("Successfully created index");
const result = streamText({
model: openai("gpt-4o"),
prompt: "Cost of moving cat from Russia to UK?",
tools: {
queryTool: llamaindex({
model: openai("gpt-4o"),
index,
description:
"get information from your knowledge base to answer questions.", // optional description
}),
},
maxSteps: 5,
});
for await (const textPart of result.textStream) {
process.stdout.write(textPart);
}
}
main().catch(console.error);
+45
View File
@@ -0,0 +1,45 @@
import { openai } from "@ai-sdk/openai";
import { VercelLLM } from "@llamaindex/vercel";
import { LLMAgent, WikipediaTool } from "llamaindex";
async function main() {
// Create an instance of VercelLLM with the OpenAI model
const vercelLLM = new VercelLLM({ model: openai("gpt-4o") });
console.log("\n=== Test 1: Using complete() for single response ===");
const result = await vercelLLM.complete({
prompt: "What is the capital of France?",
stream: false, // Set to true if you want streaming responses
});
console.log(result.text);
console.log("\n=== Test 2: Using chat() for streaming response ===");
const stream = await vercelLLM.chat({
messages: [
{ content: "You want to talk in rhymes.", role: "system" },
{
content:
"How much wood would a woodchuck chuck if a woodchuck could chuck wood?",
role: "user",
},
],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.delta);
}
console.log("\n=== Test 3: Using LLMAgent with WikipediaTool ===");
const agent = new LLMAgent({
llm: vercelLLM,
tools: [new WikipediaTool()],
});
const { message } = await agent.chat({
message: "What's the history of New York from Wikipedia in 3 sentences?",
});
console.log(message);
}
main().catch(console.error);
+35
View File
@@ -0,0 +1,35 @@
import { openai } from "@ai-sdk/openai";
import { llamaindex } from "@llamaindex/vercel";
import { streamText } from "ai";
import { Document, VectorStoreIndex } from "llamaindex";
import fs from "node:fs/promises";
async function main() {
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
const document = new Document({ text: essay, id_: path });
const index = await VectorStoreIndex.fromDocuments([document]);
console.log("Successfully created index");
const result = streamText({
model: openai("gpt-4o"),
prompt: "Cost of moving cat from Russia to UK?",
tools: {
queryTool: llamaindex({
model: openai("gpt-4o"),
index,
description:
"get information from your knowledge base to answer questions.", // optional description
}),
},
maxSteps: 5,
});
for await (const textPart of result.textStream) {
process.stdout.write(textPart);
}
}
main().catch(console.error);
+2 -2
View File
@@ -2,8 +2,8 @@
"name": "@llamaindex/monorepo",
"private": true,
"scripts": {
"build": "turbo run build --filter=\"./packages/*\"",
"dev": "turbo run dev --filter=\"./packages/*\"",
"build": "turbo run build --filter=\"./packages/*\" --filter=\"./packages/providers/*\"",
"dev": "turbo run dev --filter=\"./packages/*\" --filter=\"./packages/providers/*\"",
"format": "prettier --ignore-unknown --cache --check .",
"format:write": "prettier --ignore-unknown --write .",
"lint": "turbo run lint",
+58
View File
@@ -1,5 +1,63 @@
# @llamaindex/autotool
## 5.0.27
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 5.0.26
### Patch Changes
- 3d1808b: chore: bump version
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 5.0.25
### Patch Changes
- 8be4589: chore: bump version
- llamaindex@0.8.25
## 5.0.24
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 5.0.23
### Patch Changes
- llamaindex@0.8.23
## 5.0.22
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 5.0.21
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 5.0.20
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 5.0.19
### Patch Changes
@@ -1,5 +1,70 @@
# @llamaindex/autotool-01-node-example
## 0.0.70
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
- @llamaindex/autotool@5.0.27
## 0.0.69
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/autotool@5.0.26
- llamaindex@0.8.26
## 0.0.68
### Patch Changes
- Updated dependencies [8be4589]
- @llamaindex/autotool@5.0.25
- llamaindex@0.8.25
## 0.0.67
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
- @llamaindex/autotool@5.0.24
## 0.0.66
### Patch Changes
- llamaindex@0.8.23
- @llamaindex/autotool@5.0.23
## 0.0.65
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
- @llamaindex/autotool@5.0.22
## 0.0.64
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
- @llamaindex/autotool@5.0.21
## 0.0.63
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
- @llamaindex/autotool@5.0.20
## 0.0.62
### Patch Changes
@@ -5,7 +5,7 @@
"dependencies": {
"@llamaindex/autotool": "workspace:*",
"llamaindex": "workspace:*",
"openai": "^4.72.0"
"openai": "^4.73.1"
},
"devDependencies": {
"tsx": "^4.19.0"
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.62"
"version": "0.0.70"
}
@@ -1,5 +1,70 @@
# @llamaindex/autotool-02-next-example
## 0.1.114
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
- @llamaindex/autotool@5.0.27
## 0.1.113
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/autotool@5.0.26
- llamaindex@0.8.26
## 0.1.112
### Patch Changes
- Updated dependencies [8be4589]
- @llamaindex/autotool@5.0.25
- llamaindex@0.8.25
## 0.1.111
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
- @llamaindex/autotool@5.0.24
## 0.1.110
### Patch Changes
- llamaindex@0.8.23
- @llamaindex/autotool@5.0.23
## 0.1.109
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
- @llamaindex/autotool@5.0.22
## 0.1.108
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
- @llamaindex/autotool@5.0.21
## 0.1.107
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
- @llamaindex/autotool@5.0.20
## 0.1.106
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.106",
"version": "0.1.114",
"scripts": {
"dev": "next dev",
"build": "next build",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "5.0.19",
"version": "5.0.27",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+41
View File
@@ -1,5 +1,46 @@
# @llamaindex/cloud
## 2.0.18
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
## 2.0.17
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
## 2.0.16
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 2.0.15
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 2.0.14
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 2.0.13
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "2.0.13",
"version": "2.0.18",
"type": "module",
"license": "MIT",
"scripts": {
+42
View File
@@ -1,5 +1,47 @@
# @llamaindex/community
## 0.0.76
### Patch Changes
- c1850ee: feat: Amazon Nova support via Bedrock
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
## 0.0.75
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
## 0.0.74
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 0.0.73
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 0.0.72
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 0.0.71
### Patch Changes
+1
View File
@@ -4,6 +4,7 @@
## Current Features:
- Bedrock support for Amazon Nova models Pro, Lite and Micro
- Bedrock support for the Anthropic Claude Models [usage](https://ts.llamaindex.ai/modules/llms/available_llms/bedrock) including the latest Sonnet 3.5 v2 and Haiku 3.5
- Bedrock support for the Meta LLama 2, 3, 3.1 and 3.2 Models [usage](https://ts.llamaindex.ai/modules/llms/available_llms/bedrock)
- Meta LLama3.1 405b and Llama3.2 tool call support
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.71",
"version": "0.0.76",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
@@ -46,8 +46,8 @@
"bunchee": "5.6.1"
},
"dependencies": {
"@aws-sdk/client-bedrock-agent-runtime": "^3.693.0",
"@aws-sdk/client-bedrock-runtime": "^3.693.0",
"@aws-sdk/client-bedrock-agent-runtime": "^3.706.0",
"@aws-sdk/client-bedrock-runtime": "^3.706.0",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
}
@@ -0,0 +1,133 @@
import type {
ContentBlockDelta,
ConverseOutput,
ConverseRequest,
ConverseResponse,
ConverseStreamOutput,
InvokeModelCommandInput,
InvokeModelWithResponseStreamCommandInput,
ResponseStream,
} from "@aws-sdk/client-bedrock-runtime";
import type {
BaseTool,
ChatMessage,
LLMMetadata,
ToolCall,
ToolCallLLMMessageOptions,
} from "@llamaindex/core/llms";
import { toUtf8 } from "../utils";
import { Provider, type BedrockChatStreamResponse } from "../provider";
import {
mapBaseToolsToAmazonTools,
mapChatMessagesToAmazonMessages,
} from "./utils";
export class AmazonProvider extends Provider<ConverseStreamOutput> {
getResultFromResponse(response: Record<string, any>): ConverseResponse {
return JSON.parse(toUtf8(response.body));
}
getToolsFromResponse<ToolContent>(response: ConverseOutput): ToolContent[] {
return (
response.message?.content
?.filter((item) => item.toolUse)
.map(
(item) =>
({
id: item.toolUse!.toolUseId,
name: item.toolUse!.name,
input: item.toolUse!.input
? JSON.parse(item.toolUse!.input as string)
: "",
}) as ToolContent,
) ?? []
);
}
getTextFromResponse(response: ConverseResponse): string {
const result = this.getResultFromResponse(response);
const content = result.output?.message?.content ?? [];
return content.map((item) => item.text).join(" ");
}
getTextFromStreamResponse(response: ResponseStream): string {
let event: ConverseStreamOutput | undefined =
this.getStreamingEventResponse(response);
if (!event || !event.contentBlockDelta) return "";
const delta: ContentBlockDelta | undefined = event.contentBlockDelta.delta;
return delta?.text || "";
}
async *reduceStream(
stream: AsyncIterable<ResponseStream>,
): BedrockChatStreamResponse {
let toolId: string | undefined = undefined;
let toolName: string | undefined = undefined;
for await (const response of stream) {
const event = this.getStreamingEventResponse(response);
const delta = this.getTextFromStreamResponse(response);
let options: undefined | ToolCallLLMMessageOptions = undefined;
if (event?.contentBlockStart && event.contentBlockStart.start?.toolUse) {
toolId = event.contentBlockStart.start?.toolUse.toolUseId;
toolName = event.contentBlockStart.start?.toolUse.name;
continue;
}
if (
toolId &&
toolName &&
event?.contentBlockDelta?.delta?.toolUse?.input
) {
options = {
toolCall: [
{
id: toolId,
name: toolName,
input: JSON.parse(event?.contentBlockDelta?.delta?.toolUse.input),
} as ToolCall,
],
};
toolId = undefined;
toolName = undefined;
}
if (!delta && !options) continue;
yield {
delta: options ? "" : delta,
options,
raw: response,
};
}
}
getRequestBody<T extends ChatMessage>(
metadata: LLMMetadata,
messages: T[],
tools: BaseTool[] = [],
options: Omit<ConverseRequest, "modelId" | "messages" | "inferenceConfig">,
): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput {
const request: Omit<ConverseRequest, "modelId"> = {
...options,
messages: mapChatMessagesToAmazonMessages(messages),
inferenceConfig: {
maxTokens: metadata.maxTokens,
temperature: metadata.temperature,
topP: metadata.topP,
},
};
if (tools.length) {
request.toolConfig = {
tools: mapBaseToolsToAmazonTools(tools),
};
}
return {
modelId: metadata.model,
contentType: "application/json",
accept: "application/json",
body: JSON.stringify(request),
};
}
}
@@ -0,0 +1,5 @@
import type { ConverseRequest, Message } from "@aws-sdk/client-bedrock-runtime";
export type AmazonMessages = ConverseRequest["messages"];
export type AmazonMessage = Message;
@@ -0,0 +1,141 @@
import type {
ImageBlock,
ImageFormat,
Message,
Tool,
} from "@aws-sdk/client-bedrock-runtime";
import type {
BaseTool,
ChatMessage,
MessageContentDetail,
ToolCallLLMMessageOptions,
} from "@llamaindex/core/llms";
import {
extractDataUrlComponents,
mapMessageContentToMessageContentDetails,
} from "../utils";
import type { JSONObject } from "@llamaindex/core/global";
import type { AmazonMessage, AmazonMessages } from "./types";
const ACCEPTED_IMAGE_MIME_TYPES = [
"image/jpeg",
"image/png",
"image/webp",
"image/gif",
] as const;
const ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP: Record<
(typeof ACCEPTED_IMAGE_MIME_TYPES)[number],
ImageFormat
> = {
"image/jpeg": "jpeg",
"image/png": "png",
"image/webp": "webp",
"image/gif": "gif",
};
export const mapImageContent = (imageUrl: string): ImageBlock => {
if (!imageUrl.startsWith("data:"))
throw new Error(
"For Amazon please only use base64 data url, e.g.: data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==",
);
const { mimeType, base64: data } = extractDataUrlComponents(imageUrl);
if (
!ACCEPTED_IMAGE_MIME_TYPES.includes(
mimeType as keyof typeof ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP,
)
)
throw new Error(
`Amazon only accepts the following mimeTypes: ${ACCEPTED_IMAGE_MIME_TYPES.join("\n")}`,
);
return {
format:
ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP[
mimeType as keyof typeof ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP
],
// @ts-ignore: there's a mistake in the "@aws-sdk/client-bedrock-runtime" compared to the actual api
source: { bytes: data },
};
};
export const mapMessageContentDetailToAmazonContent = <
T extends MessageContentDetail,
>(
detail: T,
): Message["content"] => {
let content: Message["content"] = [];
if (detail.type === "text") {
content = [{ text: detail.text }];
} else if (detail.type === "image_url") {
content = [{ image: mapImageContent(detail.image_url.url) }];
} else {
throw new Error("Unsupported content detail type");
}
return content;
};
export const mapChatMessagesToAmazonMessages = <
T extends ChatMessage<ToolCallLLMMessageOptions>,
>(
messages: T[],
): AmazonMessages => {
return messages.flatMap((msg: T): AmazonMessage[] => {
return mapMessageContentToMessageContentDetails(msg.content).map(
(detail: MessageContentDetail): AmazonMessage => {
if (msg.options && "toolCall" in msg.options) {
return {
role: "assistant",
content: msg.options.toolCall.map((call) => ({
toolUse: {
toolUseId: call.id,
name: call.name,
input: call.input as JSONObject,
},
})),
};
}
if (msg.options && "toolResult" in msg.options) {
return {
role: "user",
content: [
{
toolResult: {
toolUseId: msg.options.toolResult.id,
content: [
{
text: msg.options.toolResult.result,
},
],
},
},
],
};
}
return {
role: msg.role === "assistant" ? "assistant" : "user",
content: mapMessageContentDetailToAmazonContent(detail),
};
},
);
});
};
export const mapBaseToolsToAmazonTools = (tools?: BaseTool[]): Tool[] => {
if (!tools) return [];
return tools.map((tool: BaseTool) => {
const {
metadata: { parameters, ...options },
} = tool;
return {
toolSpec: {
...options,
inputSchema: parameters,
},
} as Tool;
});
};
@@ -11,13 +11,10 @@ import type {
ToolCall,
ToolCallLLMMessageOptions,
} from "@llamaindex/core/llms";
import {
type BedrockAdditionalChatOptions,
type BedrockChatStreamResponse,
Provider,
} from "../provider";
import { type BedrockChatStreamResponse, Provider } from "../provider";
import { toUtf8 } from "../utils";
import type {
AnthropicAdditionalChatOptions,
AnthropicNoneStreamingResponse,
AnthropicStreamEvent,
AnthropicTextContent,
@@ -134,7 +131,7 @@ export class AnthropicProvider extends Provider<AnthropicStreamEvent> {
metadata: LLMMetadata,
messages: T[],
tools?: BaseTool[],
options?: BedrockAdditionalChatOptions,
options?: AnthropicAdditionalChatOptions,
): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput {
const extra: Record<string, unknown> = {};
if (options?.toolChoice) {
@@ -1,6 +1,13 @@
import type { ToolMetadata } from "@llamaindex/core/llms";
import type { InvocationMetrics } from "../types";
export type ToolChoice =
| { type: "any" }
| { type: "auto" }
| { type: "tool"; name: string };
export type AnthropicAdditionalChatOptions = { toolChoice: ToolChoice };
type Usage = {
input_tokens: number;
output_tokens: number;
+25 -5
View File
@@ -25,6 +25,7 @@ import {
import { mapMessageContentToMessageContentDetails } from "./utils";
import { wrapLLMEvent } from "@llamaindex/core/decorator";
import { AmazonProvider } from "./amazon/provider";
import { AnthropicProvider } from "./anthropic/provider";
import { MetaProvider } from "./meta/provider";
@@ -32,6 +33,7 @@ import { MetaProvider } from "./meta/provider";
export const PROVIDERS: { [key: string]: Provider } = {
anthropic: new AnthropicProvider(),
meta: new MetaProvider(),
amazon: new AmazonProvider(),
};
export type BedrockChatParamsStreaming = LLMChatParamsStreaming<
@@ -81,7 +83,11 @@ export const BEDROCK_MODELS = {
MISTRAL_7B_INSTRUCT: "mistral.mistral-7b-instruct-v0:2",
MISTRAL_MIXTRAL_7B_INSTRUCT: "mistral.mixtral-8x7b-instruct-v0:1",
MISTRAL_MIXTRAL_LARGE_2402: "mistral.mistral-large-2402-v1:0",
AMAZON_NOVA_PRO_1: "amazon.nova-pro-v1:0",
AMAZON_NOVA_LITE_1: "amazon.nova-lite-v1:0",
AMAZON_NOVA_MICRO_1: "amazon.nova-micro-v1:0",
};
export type BEDROCK_MODELS =
(typeof BEDROCK_MODELS)[keyof typeof BEDROCK_MODELS];
@@ -98,6 +104,9 @@ export const INFERENCE_BEDROCK_MODELS = {
US_META_LLAMA_3_2_3B_INSTRUCT: "us.meta.llama3-2-3b-instruct-v1:0",
US_META_LLAMA_3_2_11B_INSTRUCT: "us.meta.llama3-2-11b-instruct-v1:0",
US_META_LLAMA_3_2_90B_INSTRUCT: "us.meta.llama3-2-90b-instruct-v1:0",
US_AMAZON_NOVA_PRO_1: "us.amazon.nova-pro-v1:0",
US_AMAZON_NOVA_LITE_1: "us.amazon.nova-lite-v1:0",
US_AMAZON_NOVA_MICRO_1: "us.amazon.nova-micro-v1:0",
EU_ANTHROPIC_CLAUDE_3_HAIKU: "eu.anthropic.claude-3-haiku-20240307-v1:0",
EU_ANTHROPIC_CLAUDE_3_5_HAIKU: "eu.anthropic.claude-3-5-haiku-20240307-v1:0",
@@ -189,6 +198,9 @@ const CHAT_ONLY_MODELS = {
[BEDROCK_MODELS.MISTRAL_7B_INSTRUCT]: 32000,
[BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT]: 32000,
[BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402]: 32000,
[BEDROCK_MODELS.AMAZON_NOVA_PRO_1]: 300000,
[BEDROCK_MODELS.AMAZON_NOVA_LITE_1]: 300000,
[BEDROCK_MODELS.AMAZON_NOVA_MICRO_1]: 130000,
};
const BEDROCK_FOUNDATION_LLMS = { ...COMPLETION_MODELS, ...CHAT_ONLY_MODELS };
@@ -225,6 +237,9 @@ export const STREAMING_MODELS = new Set([
BEDROCK_MODELS.MISTRAL_7B_INSTRUCT,
BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT,
BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402,
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
]);
export const TOOL_CALL_MODELS: BEDROCK_MODELS[] = [
@@ -239,6 +254,9 @@ export const TOOL_CALL_MODELS: BEDROCK_MODELS[] = [
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
];
const getProvider = (model: string): Provider => {
@@ -320,10 +338,6 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
this.temperature = temperature ?? DEFAULT_BEDROCK_PARAMS.temperature;
this.topP = topP ?? DEFAULT_BEDROCK_PARAMS.topP;
this.client = new BedrockRuntimeClient(params);
if (!this.supportToolCall) {
console.warn(`The model "${this.model}" doesn't support ToolCall`);
}
}
get supportToolCall(): boolean {
@@ -345,6 +359,9 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
protected async nonStreamChat(
params: BedrockChatParamsNonStreaming,
): Promise<BedrockChatNonStreamResponse> {
if (!this.supportToolCall && params.tools?.length) {
console.warn(`The model "${this.model}" doesn't support ToolCall`);
}
const input = this.provider.getRequestBody(
this.metadata,
params.messages,
@@ -378,6 +395,10 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
if (!STREAMING_MODELS.has(this.model))
throw new Error(`The model: ${this.model} does not support streaming`);
if (!this.supportToolCall && params.tools?.length) {
console.warn(`The model "${this.model}" doesn't support ToolCall`);
}
const input = this.provider.getRequestBody(
this.metadata,
params.messages,
@@ -388,7 +409,6 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
command.input.modelId = this.actualModel;
const response = await this.client.send(command);
if (response.body) yield* this.provider.reduceStream(response.body);
}
@@ -11,10 +11,9 @@ import {
type ToolCallLLMMessageOptions,
} from "@llamaindex/core/llms";
import { streamConverter } from "@llamaindex/core/utils";
import type { ToolChoice } from "./types";
import { toUtf8 } from "./utils";
export type BedrockAdditionalChatOptions = { toolChoice: ToolChoice };
export type BedrockAdditionalChatOptions = Record<string, unknown>;
export type BedrockChatStreamResponse = AsyncIterable<
ChatResponseChunk<ToolCallLLMMessageOptions>
@@ -4,8 +4,3 @@ export type InvocationMetrics = {
invocationLatency: number;
firstByteLatency: number;
};
export type ToolChoice =
| { type: "any" }
| { type: "auto" }
| { type: "tool"; name: string };
+36
View File
@@ -1,5 +1,41 @@
# @llamaindex/core
## 0.4.18
### Patch Changes
- e0f6cc3: The compact and refine response synthesizer (retrieved by using `getResponseSynthesizer('compact')`) has been fixed to return the original source nodes that were provided to it in its response. Previous to this it was returning the compacted text chunk documents.
- Updated dependencies [b504303]
- @llamaindex/env@0.1.25
## 0.4.17
### Patch Changes
- 3d1808b: chore: bump version
## 0.4.16
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/env@0.1.24
## 0.4.15
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
## 0.4.14
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
## 0.4.13
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.4.13",
"version": "0.4.18",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
+5 -8
View File
@@ -369,7 +369,9 @@ export abstract class AgentRunner<
verbose: boolean | undefined = undefined,
chatHistory?: ChatMessage<AdditionalMessageOptions>[],
additionalChatOptions?: AdditionalChatOptions,
) {
): ReadableStream<
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
> {
const initialMessages = [...(chatHistory ?? this.#chatHistory)];
if (this.#systemPrompt !== null) {
const systemPrompt = this.#systemPrompt;
@@ -453,14 +455,9 @@ export abstract class AgentRunner<
const { output } = stepOutput;
if (output instanceof ReadableStream) {
return output.pipeThrough(
new TransformStream<EngineResponse>({
new TransformStream({
transform(chunk, controller) {
controller.enqueue(
EngineResponse.fromChatResponseChunk(
chunk,
chunk.sourceNodes,
),
);
controller.enqueue(EngineResponse.fromChatResponseChunk(chunk));
},
}),
);
@@ -77,6 +77,16 @@ class Refine extends BaseSynthesizer {
}
}
async getResponse(
query: MessageContent,
nodes: NodeWithScore[],
stream: true,
): Promise<AsyncIterable<EngineResponse>>;
async getResponse(
query: MessageContent,
nodes: NodeWithScore[],
stream: false,
): Promise<EngineResponse>;
async getResponse(
query: MessageContent,
nodes: NodeWithScore[],
@@ -197,6 +207,16 @@ class Refine extends BaseSynthesizer {
* CompactAndRefine is a slight variation of Refine that first compacts the text chunks into the smallest possible number of chunks.
*/
class CompactAndRefine extends Refine {
async getResponse(
query: MessageContent,
nodes: NodeWithScore[],
stream: true,
): Promise<AsyncIterable<EngineResponse>>;
async getResponse(
query: MessageContent,
nodes: NodeWithScore[],
stream: false,
): Promise<EngineResponse>;
async getResponse(
query: MessageContent,
nodes: NodeWithScore[],
@@ -216,17 +236,24 @@ class CompactAndRefine extends Refine {
const newTexts = this.promptHelper.repack(maxPrompt, textChunks);
const newNodes = newTexts.map((text) => new TextNode({ text }));
if (stream) {
return super.getResponse(
const streamResponse = await super.getResponse(
query,
newNodes.map((node) => ({ node })),
true,
);
return streamConverter(streamResponse, (chunk) => {
chunk.sourceNodes = nodes;
return chunk;
});
}
return super.getResponse(
const originalResponse = await super.getResponse(
query,
newNodes.map((node) => ({ node })),
false,
);
originalResponse.sourceNodes = nodes;
return originalResponse;
}
}
@@ -0,0 +1,66 @@
import { describe, expect, test, vi } from "vitest";
import type { LLMMetadata } from "../../llms/dist/index.js";
import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js";
import { Document } from "../../schema/dist/index.js";
const mockLllm = () => ({
complete: vi.fn().mockImplementation(({ stream }) => {
const response = { text: "unimportant" };
if (!stream) {
return response;
}
function* gen() {
// yield a few times to make sure each chunk has the sourceNodes
yield response;
yield response;
yield response;
}
return gen();
}),
chat: vi.fn(),
metadata: {} as unknown as LLMMetadata,
});
describe("compact and refine response synthesizer", () => {
describe("synthesize", () => {
test("should return original sourceNodes with response when stream = false", async () => {
const synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
const sourceNode = { node: new Document({}), score: 1 };
const response = await synthesizer.synthesize(
{
query: "test",
nodes: [sourceNode],
},
false,
);
expect(response.sourceNodes).toEqual([sourceNode]);
});
test("should return original sourceNodes with response when stream = true", async () => {
const synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
const sourceNode = { node: new Document({}), score: 1 };
const response = await synthesizer.synthesize(
{
query: "test",
nodes: [sourceNode],
},
true,
);
for await (const chunk of response) {
expect(chunk.sourceNodes).toEqual([sourceNode]);
}
});
});
});
+24
View File
@@ -1,5 +1,29 @@
# @llamaindex/env
## 0.1.25
### Patch Changes
- b504303: Allow Node 18 again (throw run-time error if not possible) to make Stackblitz work
## 0.1.24
### Patch Changes
- 8be4589: chore: bump version
## 0.1.23
### Patch Changes
- d2b2722: fix: switch tokenizer in cloudflare
## 0.1.22
### Patch Changes
- 969365c: fix: async local storage on cloudflare worker
## 0.1.21
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/env",
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
"version": "0.1.21",
"version": "0.1.25",
"type": "module",
"types": "dist/index.d.ts",
"module": "dist/index.js",
+1
View File
@@ -0,0 +1 @@
export { AsyncLocalStorage } from "node:async_hooks";
+1 -1
View File
@@ -7,7 +7,7 @@
*/
import { INTERNAL_ENV } from "./utils/index.js";
export * from "./als/index.non-node.js";
export * from "./als/index.workerd.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export * from "./node-polyfill.js";
+7
View File
@@ -7,6 +7,13 @@ export {
} from "./shared.js";
export async function loadTransformers(onLoad: OnLoad) {
const nodeVersions = process.versions.node.split(".");
if (nodeVersions[0] && parseInt(nodeVersions[0], 10) < 20) {
throw new Error(
"@huggingface/transformers is not supported on Node.js versions below 20",
);
}
if (getTransformers() === null) {
setTransformers(await import("@huggingface/transformers"));
} else {
+1 -1
View File
@@ -2,4 +2,4 @@ export {
Tokenizers,
tokenizers,
type Tokenizer,
} from "./internal/tokenizers/js.js";
} from "./internal/tokenizers/node.js";
+57
View File
@@ -1,5 +1,62 @@
# @llamaindex/experimental
## 0.0.139
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [a0e6f57]
- llamaindex@0.8.27
## 0.0.138
### Patch Changes
- Updated dependencies [3d1808b]
- llamaindex@0.8.26
## 0.0.137
### Patch Changes
- 8be4589: chore: bump version
- llamaindex@0.8.25
## 0.0.136
### Patch Changes
- Updated dependencies [515f2c1]
- llamaindex@0.8.24
## 0.0.135
### Patch Changes
- llamaindex@0.8.23
## 0.0.134
### Patch Changes
- Updated dependencies [819af45]
- llamaindex@0.8.22
## 0.0.133
### Patch Changes
- Updated dependencies [83c3897]
- Updated dependencies [efa2211]
- llamaindex@0.8.21
## 0.0.132
### Patch Changes
- Updated dependencies [02b22da]
- llamaindex@0.8.20
## 0.0.131
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.131",
"version": "0.0.139",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+129
View File
@@ -1,5 +1,134 @@
# llamaindex
## 0.8.27
### Patch Changes
- b504303: Allow Node 18 again (throw run-time error if not possible) to make Stackblitz work
- a0e6f57: withLlamaIndex now passes through webpack options to the passed in customized NextJS webpack config. Before it was only passing through the config.
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
- @llamaindex/cloud@2.0.18
- @llamaindex/node-parser@0.0.19
- @llamaindex/anthropic@0.0.27
- @llamaindex/clip@0.0.27
- @llamaindex/deepinfra@0.0.27
- @llamaindex/groq@0.0.42
- @llamaindex/huggingface@0.0.27
- @llamaindex/ollama@0.0.34
- @llamaindex/openai@0.1.43
- @llamaindex/portkey-ai@0.0.27
- @llamaindex/replicate@0.0.27
- @llamaindex/readers@1.0.20
- @llamaindex/vllm@0.0.13
## 0.8.26
### Patch Changes
- 3d1808b: chore: bump version
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
- @llamaindex/openai@0.1.42
- @llamaindex/cloud@2.0.17
- @llamaindex/node-parser@0.0.18
- @llamaindex/anthropic@0.0.26
- @llamaindex/clip@0.0.26
- @llamaindex/deepinfra@0.0.26
- @llamaindex/huggingface@0.0.26
- @llamaindex/ollama@0.0.33
- @llamaindex/portkey-ai@0.0.26
- @llamaindex/replicate@0.0.26
- @llamaindex/readers@1.0.19
- @llamaindex/groq@0.0.41
- @llamaindex/vllm@0.0.12
## 0.8.25
### Patch Changes
- Updated dependencies [7e8230b]
- Updated dependencies [8be4589]
- @llamaindex/readers@1.0.18
- @llamaindex/cloud@2.0.16
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
- @llamaindex/node-parser@0.0.17
- @llamaindex/anthropic@0.0.25
- @llamaindex/clip@0.0.25
- @llamaindex/deepinfra@0.0.25
- @llamaindex/groq@0.0.40
- @llamaindex/huggingface@0.0.25
- @llamaindex/ollama@0.0.32
- @llamaindex/openai@0.1.41
- @llamaindex/portkey-ai@0.0.25
- @llamaindex/replicate@0.0.25
- @llamaindex/vllm@0.0.11
## 0.8.24
### Patch Changes
- 515f2c1: Add vector store for CosmosDB
## 0.8.23
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/cloud@2.0.15
- @llamaindex/core@0.4.15
- @llamaindex/node-parser@0.0.16
- @llamaindex/anthropic@0.0.24
- @llamaindex/clip@0.0.24
- @llamaindex/deepinfra@0.0.24
- @llamaindex/groq@0.0.39
- @llamaindex/huggingface@0.0.24
- @llamaindex/ollama@0.0.31
- @llamaindex/openai@0.1.40
- @llamaindex/portkey-ai@0.0.24
- @llamaindex/replicate@0.0.24
- @llamaindex/readers@1.0.17
- @llamaindex/vllm@0.0.10
## 0.8.22
### Patch Changes
- 819af45: feat: add Azure Cosmos DB Mongo vCore ChatStore
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/cloud@2.0.14
- @llamaindex/core@0.4.14
- @llamaindex/node-parser@0.0.15
- @llamaindex/anthropic@0.0.23
- @llamaindex/clip@0.0.23
- @llamaindex/deepinfra@0.0.23
- @llamaindex/groq@0.0.38
- @llamaindex/huggingface@0.0.23
- @llamaindex/ollama@0.0.30
- @llamaindex/openai@0.1.39
- @llamaindex/portkey-ai@0.0.23
- @llamaindex/replicate@0.0.23
- @llamaindex/readers@1.0.16
- @llamaindex/vllm@0.0.9
## 0.8.21
### Patch Changes
- 83c3897: fix: pinecone vector store search
- efa2211: feat: add Azure Cosmos DB mongo vCore DocumentStore, IndexStore, KVStore
## 0.8.20
### Patch Changes
- 02b22da: fix: supports Vercel bundling
## 0.8.19
### Patch Changes
+3 -4
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.8.19",
"version": "0.8.27",
"license": "MIT",
"type": "module",
"keywords": [
@@ -65,7 +65,7 @@
"lodash": "^4.17.21",
"magic-bytes.js": "^1.10.0",
"mongodb": "^6.7.0",
"openai": "^4.72.0",
"openai": "^4.73.1",
"pathe": "^1.1.2",
"rake-modified": "^1.0.8",
"weaviate-client": "^3.2.3",
@@ -86,7 +86,6 @@
}
},
"devDependencies": {
"@huggingface/transformers": "^3.0.2",
"@swc/cli": "^0.5.0",
"@swc/core": "^1.9.2",
"@vercel/postgres": "^0.10.0",
@@ -98,7 +97,7 @@
"typescript": "^5.6.3"
},
"engines": {
"node": ">=20.0.0"
"node": ">=18.0.0"
},
"types": "./dist/type/index.d.ts",
"main": "./dist/cjs/index.js",
+1 -1
View File
@@ -41,7 +41,7 @@ export default function withLlamaIndex(config: any) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
config.webpack = function (webpackConfig: any, options: any) {
if (userWebpack) {
webpackConfig = userWebpack(webpackConfig);
webpackConfig = userWebpack(webpackConfig, options);
}
webpackConfig.resolve.alias = {
...webpackConfig.resolve.alias,
+1
View File
@@ -15,5 +15,6 @@ export * from "@llamaindex/readers/json";
export * from "@llamaindex/readers/markdown";
export * from "@llamaindex/readers/mongo";
export * from "@llamaindex/readers/notion";
export * from "@llamaindex/readers/obsidian";
export * from "@llamaindex/readers/pdf";
export * from "@llamaindex/readers/text";
@@ -0,0 +1,186 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import type {
ChatMessage,
MessageContent,
MessageType,
} from "@llamaindex/core/llms";
import { BaseChatStore } from "@llamaindex/core/storage/chat-store";
import type { Collection } from "mongodb";
import { MongoClient } from "mongodb";
const DEFAULT_CHAT_DATABASE = "ChatStoreDB";
const DEFAULT_CHAT_Collection = "ChatStoreCollection";
export interface AzureCosmosVCoreChatStoreConfig {
mongoClient?: MongoClient;
dbName?: string;
collectionName?: string;
}
export class AzureCosmosVCoreChatStore<
AdditionalMessageOptions extends object = object,
> extends BaseChatStore<AdditionalMessageOptions> {
private mongoClient: MongoClient;
private dbName: string;
private collectionName: string;
private collection?: Collection;
/**
* Create a new AzureCosmosVCoreChatStore instance.
*/
constructor({
mongoClient,
dbName = DEFAULT_CHAT_DATABASE,
collectionName = DEFAULT_CHAT_Collection,
}: AzureCosmosVCoreChatStoreConfig) {
super();
if (!mongoClient) {
throw new Error(
"MongoClient is required for AzureCosmosVCoreChatStore initialization",
);
}
this.mongoClient = mongoClient;
this.dbName = dbName;
this.collectionName = collectionName;
}
static fromMongoClient(
mongoClient: MongoClient,
dbName: string = DEFAULT_CHAT_DATABASE,
collectionName: string = DEFAULT_CHAT_Collection,
) {
return new AzureCosmosVCoreChatStore({
mongoClient,
dbName,
collectionName,
});
}
client(): MongoClient {
return this.mongoClient;
}
private convertToChatMessage(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
message: any,
): ChatMessage<AdditionalMessageOptions> {
return {
content: message.content as MessageContent,
role: message.role as MessageType,
options: message.options as AdditionalMessageOptions,
} as ChatMessage<AdditionalMessageOptions>;
}
private convertTovCoreMessage(
message: ChatMessage<AdditionalMessageOptions>,
): // eslint-disable-next-line @typescript-eslint/no-explicit-any
any {
return {
content: message.content,
role: message.role,
options: message.options,
};
}
private async ensureCollection(): Promise<Collection> {
if (!this.collection) {
this.collection = this.mongoClient
.db(this.dbName)
.collection(this.collectionName);
}
return this.collection;
}
/**
* Set messages for a given key.
*/
async setMessages(
key: string,
messages: ChatMessage<AdditionalMessageOptions>[],
): Promise<void> {
const collection = await this.ensureCollection();
const inputMessages = messages.map(this.convertTovCoreMessage);
await collection.updateOne(
{ id: key },
{ $set: { messages: inputMessages } },
{ upsert: true },
);
}
/**
* Get messages for a given key.
*/
async getMessages(
key: string,
): Promise<ChatMessage<AdditionalMessageOptions>[]> {
const collection = await this.ensureCollection();
const res = await collection.findOne({
id: key,
});
const messageHistory = res?.messages ?? [];
const result = messageHistory.map(this.convertToChatMessage);
return result;
}
/**
* Add a message for a given key.
*/
async addMessage(
key: string,
message: ChatMessage<AdditionalMessageOptions>,
idx?: number,
): Promise<void> {
const collection = await this.ensureCollection();
const res = await this.getMessages(key);
const messageHistory = res.map(this.convertTovCoreMessage) ?? [];
messageHistory.splice(
idx ?? messageHistory.length,
0,
this.convertTovCoreMessage(message),
);
await collection.updateOne(
{ id: key },
{ $set: { messages: messageHistory } },
{ upsert: true },
);
}
/**
* Deletes all messages for a given key.
*/
async deleteMessages(key: string): Promise<void> {
const collection = await this.ensureCollection();
try {
await collection.deleteOne({ id: key });
// eslint-disable-next-line no-empty
} catch (e) {}
}
/**
* Deletes one message at idx index for a given key.
*/
async deleteMessage(key: string, idx: number): Promise<void> {
// const collection = await this.ensureCollection();
const messageHistory = await this.getMessages(key);
if (idx >= 0 && idx < messageHistory.length) {
messageHistory.splice(idx, 1);
await this.setMessages(key, messageHistory);
}
}
/**
* Get all keys.
*/
async getKeys(): Promise<IterableIterator<string>> {
const collection = await this.ensureCollection();
const keys = await collection.distinct("id");
function* keyGenerator(): IterableIterator<string> {
for (const key of keys) {
yield key;
}
}
return keyGenerator();
}
}
@@ -0,0 +1,49 @@
import { MongoClient } from "mongodb";
import { AzureCosmosVCoreKVStore } from "../kvStore/AzureCosmosMongovCoreKVStore.js";
import { KVDocumentStore } from "./KVDocumentStore.js";
const DEFAULT_DATABASE = "DocumentStoreDB";
const DEFAULT_COLLECTION = "DocumentStoreCollection";
export interface AzureCosmosVCoreDocumentStoreArgs {
azureCosmosVCoreKVStore: AzureCosmosVCoreKVStore;
namespace?: string;
}
export class AzureCosmosVCoreDocumentStore extends KVDocumentStore {
constructor({
azureCosmosVCoreKVStore,
namespace,
}: AzureCosmosVCoreDocumentStoreArgs) {
super(azureCosmosVCoreKVStore, namespace);
}
/**
* Static method for creating an instance using a MongoClient.
* @returns Instance of AzureCosmosVCoreDocumentStore
* @param mongoClient - MongoClient instance
* @param dbName - Database name
* @param collectionName - Collection name
* @example
* ```ts
* const mongoClient = new MongoClient("mongodb://localhost:27017");
* const indexStore = AzureCosmosVCoreDocumentStore.fromMongoClient(mongoClient, "my_db", "my_collection");
* ```
*/
static fromMongoClient(
mongoClient: MongoClient,
dbName: string = DEFAULT_DATABASE,
collectionName: string = DEFAULT_COLLECTION,
) {
const azureCosmosVCoreKVStore = new AzureCosmosVCoreKVStore({
mongoClient,
dbName,
collectionName,
});
const namespace = `${dbName}.${collectionName}`;
return new AzureCosmosVCoreDocumentStore({
azureCosmosVCoreKVStore,
namespace,
});
}
}
+4
View File
@@ -2,13 +2,17 @@ export * from "@llamaindex/core/storage/chat-store";
export * from "@llamaindex/core/storage/doc-store";
export * from "@llamaindex/core/storage/index-store";
export * from "@llamaindex/core/storage/kv-store";
export * from "./chatStore/AzureCosmosMongovCoreChatStore.js";
export * from "./chatStore/AzureCosmosNoSqlChatStore.js";
export * from "./docStore/AzureCosmosMongovCoreDocumentStore.js";
export * from "./docStore/AzureCosmosNoSqlDocumentStore.js";
export { PostgresDocumentStore } from "./docStore/PostgresDocumentStore.js";
export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
export * from "./FileSystem.js";
export * from "./indexStore/AzureCosmosMongovCoreIndexStore.js";
export * from "./indexStore/AzureCosmosNoSqlIndexStore.js";
export { PostgresIndexStore } from "./indexStore/PostgresIndexStore.js";
export * from "./kvStore/AzureCosmosMongovCoreKVStore.js";
export * from "./kvStore/AzureCosmosNoSqlKVStore.js";
export { PostgresKVStore } from "./kvStore/PostgresKVStore.js";
export * from "./StorageContext.js";
@@ -0,0 +1,49 @@
import { MongoClient } from "mongodb";
import { AzureCosmosVCoreKVStore } from "../kvStore/AzureCosmosMongovCoreKVStore.js";
import { KVIndexStore } from "./KVIndexStore.js";
const DEFAULT_DATABASE = "IndexStoreDB";
const DEFAULT_COLLECTION = "IndexStoreCollection";
export interface AzureCosmosVCoreIndexStoreArgs {
azureCosmosVCoreKVStore: AzureCosmosVCoreKVStore;
namespace?: string;
}
export class AzureCosmosVCoreIndexStore extends KVIndexStore {
constructor({
azureCosmosVCoreKVStore,
namespace,
}: AzureCosmosVCoreIndexStoreArgs) {
super(azureCosmosVCoreKVStore, namespace);
}
/**
* Static method for creating an instance using a MongoClient.
* @returns Instance of AzureCosmosVCoreIndexStore
* @param mongoClient - MongoClient instance
* @param dbName - Database name
* @param collectionName - Collection name
* @example
* ```ts
* const mongoClient = new MongoClient("mongodb://localhost:27017");
* const indexStore = AzureCosmosVCoreIndexStore.fromMongoClient(mongoClient, "my_db", "my_collection");
* ```
*/
static fromMongoClient(
mongoClient: MongoClient,
dbName: string = DEFAULT_DATABASE,
collectionName: string = DEFAULT_COLLECTION,
) {
const azureCosmosVCoreKVStore = new AzureCosmosVCoreKVStore({
mongoClient,
dbName,
collectionName,
});
const namespace = `${dbName}.${collectionName}`;
return new AzureCosmosVCoreIndexStore({
azureCosmosVCoreKVStore,
namespace,
});
}
}
@@ -0,0 +1,88 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { BaseKVStore } from "@llamaindex/core/storage/kv-store";
import type { Collection } from "mongodb";
import { MongoClient } from "mongodb";
const DEFAULT_CHAT_DATABASE = "KVStoreDB";
const DEFAULT_CHAT_Collection = "KVStoreCollection";
export interface VcoreConnectionStringOptions
extends AzureCosmosVCoreKVStoreConfig {
connectionString?: string;
}
export interface AzureCosmosVCoreKVStoreConfig {
mongoClient?: MongoClient;
dbName?: string;
collectionName?: string;
}
export class AzureCosmosVCoreKVStore extends BaseKVStore {
private mongoClient: MongoClient;
private dbName: string;
private collectionName: string;
private collection?: Collection;
/**
* Create a new AzureCosmosDBNoSQLVectorStore instance.
*/
constructor({
mongoClient,
dbName = DEFAULT_CHAT_DATABASE,
collectionName = DEFAULT_CHAT_Collection,
}: AzureCosmosVCoreKVStoreConfig) {
super();
if (!mongoClient) {
throw new Error(
"MongoClient is required for AzureCosmosDBNoSQLVectorStore initialization",
);
}
this.mongoClient = mongoClient;
this.dbName = dbName;
this.collectionName = collectionName;
}
client(): MongoClient {
return this.mongoClient;
}
private async ensureCollection(): Promise<Collection> {
if (!this.collection) {
this.collection = this.mongoClient
.db(this.dbName)
.collection(this.collectionName);
}
return this.collection;
}
async put(key: string, val: Record<string, any>): Promise<void> {
const collection = await this.ensureCollection();
const insertResult = await collection.insertOne({
id: key,
messages: val,
});
}
async get(key: string): Promise<Record<string, any> | null> {
const collection = await this.ensureCollection();
const result = await collection.findOne({ id: key });
return result || null;
}
async getAll(): Promise<Record<string, Record<string, any>>> {
const collection = await this.ensureCollection();
const cursor = collection.find();
const output: Record<string, Record<string, any>> = {};
await cursor.forEach((item) => {
output[item.id] = item.messages;
});
return output;
}
async delete(key: string): Promise<boolean> {
const collection = await this.ensureCollection();
await collection.deleteOne({ id: key });
return true;
}
}
@@ -0,0 +1,328 @@
import type { BaseNode } from "@llamaindex/core/schema";
import { MetadataMode } from "@llamaindex/core/schema";
import { getEnv } from "@llamaindex/env";
import { Collection, Db, MongoClient } from "mongodb";
import {
BaseVectorStore,
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
import { metadataDictToNode, nodeToMetadata } from "./utils.js";
/** Azure Cosmos DB for MongoDB vCore Similarity type. */
export const AzureCosmosDBMongoDBSimilarityType = {
/** Cosine similarity */
COS: "COS",
/** Inner - product */
IP: "IP",
/** Euclidian distance */
L2: "L2",
} as const;
/** Azure Cosmos DB for MongoDB vCore Similarity type. */
export type AzureCosmosDBMongoDBSimilarityType =
(typeof AzureCosmosDBMongoDBSimilarityType)[keyof typeof AzureCosmosDBMongoDBSimilarityType];
/** Azure Cosmos DB for MongoDB vCore Index Options. */
export type AzureCosmosDBMongoDBIndexOptions = {
readonly indexType?: "ivf" | "hnsw" | "diskann" | undefined;
/** Number of clusters that the inverted file (IVF) index uses to group the vector data. */
readonly numLists?: number | undefined;
/** Number of dimensions for vector similarity. */
readonly dimensions?: number | undefined;
/** Similarity metric to use with the IVF index. */
readonly similarity?: AzureCosmosDBMongoDBSimilarityType | undefined;
/** The max number of connections per layer with the HNSW index. */
readonly m?: number | undefined;
/** The size of the dynamic candidate list for constructing the graph with the HNSW index. */
readonly efConstruction?: number | undefined;
/** Max number of neighbors withe the Diskann idnex */
readonly maxDegree?: number | undefined;
/** L value for index building withe the Diskann idnex */
readonly lBuild?: number | undefined;
/** L value for index searching withe the Diskann idnex */
readonly lSearch?: number | undefined;
};
/**
* Azure Cosmos DB for MongoDB vCore vector store.
* To use this, you should have both:
* - the `mongodb` NPM package installed
* - a connection string associated with a MongoDB VCore Cluster
*
* You do not need to create a database or collection, it will be created
* automatically.
*
* You also need an index on the collection, which is by default be created
* automatically using the `createIndex` method.
*/
export class AzureCosmosDBMongoDBVectorStore extends BaseVectorStore {
storesText: boolean = true;
flatMetadata: boolean = true;
dbName: string;
collectionName: string;
indexedMetadataFields: string[];
/**
* The used MongoClient. If not given, a new MongoClient is created based on the MONGODB_URI env variable.
*/
mongodbClient: MongoClient;
indexName: string;
embeddingKey: string;
idKey: string;
textKey: string;
metadataKey: string;
indexOptions: AzureCosmosDBMongoDBIndexOptions;
private collection?: Collection;
private database: Db;
constructor(
init: Partial<AzureCosmosDBMongoDBVectorStore> & {
dbName: string;
collectionName: string;
indexedMetadataFields?: string[];
} & VectorStoreBaseParams,
) {
super(init);
if (init.mongodbClient) {
this.mongodbClient = init.mongodbClient;
} else {
const mongoUri = getEnv("AZURE_COSMOSDB_MONGODB_CONNECTION_STRING");
if (!mongoUri) {
throw new Error(
"AzureCosmosDBMongoDBVectorStore client or connection string must be set.",
);
}
this.mongodbClient = new MongoClient(mongoUri);
}
this.dbName = init.dbName ?? "documentsDB";
this.collectionName = init.collectionName ?? "documents";
this.indexedMetadataFields = init.indexedMetadataFields ?? [];
this.indexName = init.indexName ?? "vectorSearchIndex";
this.embeddingKey = init.embeddingKey ?? "vectorContent";
this.idKey = init.idKey ?? "id";
this.textKey = init.textKey ?? "text";
this.metadataKey = init.metadataKey ?? "metadata";
this.indexOptions = init.indexOptions ?? {};
this.database = this.mongodbClient.db(this.dbName);
}
client() {
return this.mongodbClient;
}
async ensureCollection() {
if (!this.collection) {
const collection = await this.mongodbClient
.db(this.dbName)
.createCollection(this.collectionName);
this.collection = collection;
}
return this.collection;
}
async add(nodes: BaseNode[]): Promise<string[]> {
if (!nodes || nodes.length === 0) {
return [];
}
const dataToInsert = nodes.map((node) => {
const metadata = nodeToMetadata(
node,
true,
this.textKey,
this.flatMetadata,
);
// Include the specified metadata fields in the top level of the document (to help filter)
const populatedMetadata: Record<string, unknown> = {};
for (const field of this.indexedMetadataFields) {
populatedMetadata[field] = metadata[field];
}
return {
[this.idKey]: node.id_,
[this.embeddingKey]: node.getEmbedding(),
[this.textKey]: node.getContent(MetadataMode.NONE) || "",
[this.metadataKey]: metadata,
...populatedMetadata,
};
});
const collection = await this.ensureCollection();
const insertResult = await collection.insertMany(dataToInsert);
return Object.values(insertResult.insertedIds).map((id) => String(id));
}
/**
* Removes specified documents from the AzureCosmosDBMongoDBVectorStore.
* @param params Parameters for the delete operation.
* @returns A promise that resolves when the documents have been removed.
*/
async delete(id: string, deleteOptions?: object): Promise<void> {
const collection = await this.ensureCollection();
await collection.deleteMany(
{
id: id,
},
deleteOptions,
);
}
async query(
query: VectorStoreQuery,
options?: object,
): Promise<VectorStoreQueryResult> {
const pipeline = [
{
$search: {
cosmosSearch: {
vector: query.queryEmbedding,
path: this.embeddingKey,
k: query.similarityTopK ?? 4,
},
returnStoredSource: true,
},
},
];
const collection = await this.ensureCollection();
const cursor = await collection.aggregate(pipeline);
const nodes: BaseNode[] = [];
const ids: string[] = [];
const similarities: number[] = [];
for await (const res of await cursor) {
const text = res[this.textKey];
const score = res.score;
const id = res[this.idKey];
const metadata = res[this.metadataKey];
const node = metadataDictToNode(metadata);
node.setContent(text);
ids.push(id);
nodes.push(node);
similarities.push(score);
}
const result = {
nodes,
similarities,
ids,
};
return result;
}
/**
* Creates an index on the collection with the specified index name during
* instance construction.
*
* Setting the numLists parameter correctly is important for achieving good
* accuracy and performance.
* Since the vector store uses IVF as the indexing strategy, you should
* create the index only after you have loaded a large enough sample
* documents to ensure that the centroids for the respective buckets are
* faily distributed.
*
* @param indexType Index Type for Mongo vCore index.
* @param dimensions Number of dimensions for vector similarity.
* The maximum number of supported dimensions is 2000.
* If no number is provided, it will be determined automatically by
* embedding a short text.
* @param similarity Similarity metric to use with the IVF index.
* Possible options are:
* - CosmosDBSimilarityType.COS (cosine distance)
* - CosmosDBSimilarityType.L2 (Euclidean distance)
* - CosmosDBSimilarityType.IP (inner product)
* @returns A promise that resolves when the index has been created.
*/
async createIndex(
dimensions: number | undefined = undefined,
indexType: "ivf" | "hnsw" | "diskann" = "ivf",
similarity: AzureCosmosDBMongoDBSimilarityType = AzureCosmosDBMongoDBSimilarityType.COS,
): Promise<void> {
let vectorLength = dimensions;
if (vectorLength === undefined) {
vectorLength = 1536;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const cosmosSearchOptions: any = {
kind: "",
similarity,
dimensions: vectorLength,
};
if (indexType === "hnsw") {
cosmosSearchOptions.kind = "vector-hnsw";
cosmosSearchOptions.m = this.indexOptions.m ?? 16;
cosmosSearchOptions.efConstruction =
this.indexOptions.efConstruction ?? 200;
} else if (indexType === "diskann") {
cosmosSearchOptions.kind = "vector-diskann";
cosmosSearchOptions.maxDegree = this.indexOptions.maxDegree ?? 40;
cosmosSearchOptions.lBuild = this.indexOptions.lBuild ?? 50;
cosmosSearchOptions.lSearch = this.indexOptions.lSearch ?? 40;
/** Default to IVF index */
} else {
cosmosSearchOptions.kind = "vector-ivf";
cosmosSearchOptions.numLists = this.indexOptions.numLists ?? 100;
}
const createIndexCommands = {
createIndexes: this.collection?.collectionName,
indexes: [
{
name: this.indexName,
key: { [this.embeddingKey]: "cosmosSearch" },
cosmosSearchOptions,
},
],
};
await this.database.command(createIndexCommands);
}
/**
* Checks if the specified index name during instance construction exists
* on the collection.
* @returns A promise that resolves to a boolean indicating if the index exists.
*/
async checkIndexExists(): Promise<boolean> {
const collection = await this.ensureCollection();
const indexes = await collection.listIndexes().toArray();
return indexes.some((index) => index.name === this.indexName);
}
/**
* Deletes the index specified during instance construction if it exists.
* @returns A promise that resolves when the index has been deleted.
*/
async deleteIndex(indexName: string): Promise<void> {
const collection = await this.ensureCollection();
const indexes = await collection.listIndexes().toArray();
const indexToDelete = indexes.find((index) => index.name === indexName);
if (indexToDelete) {
await collection.dropIndex(indexName);
}
}
}
@@ -176,7 +176,12 @@ export class PGVectorStore extends BaseVectorStore {
if ("clientConfig" in config) {
this.clientConfig = config.clientConfig;
} else {
if (config.client.constructor.name.includes("Vercel")) {
if (
config.client.constructor.name.includes("Vercel") ||
(!!(config.client as VercelPool).connect &&
!!(config.client as VercelPool).query &&
!(config.client as Sql).unsafe)
) {
this.isDBConnected = true;
this.db = fromVercelPool(config.client as unknown as VercelPool);
} else if (typeof config.client === "function") {
@@ -26,6 +26,7 @@ type PineconeParams = {
chunkSize?: number;
namespace?: string;
textKey?: string;
apiKey?: string;
} & VectorStoreBaseParams;
/**
@@ -48,6 +49,8 @@ export class PineconeVectorStore extends BaseVectorStore {
chunkSize: number;
textKey: string;
apiKey: string;
constructor(params?: PineconeParams) {
super(params);
this.indexName =
@@ -57,12 +60,19 @@ export class PineconeVectorStore extends BaseVectorStore {
params?.chunkSize ??
Number.parseInt(getEnv("PINECONE_CHUNK_SIZE") ?? "100");
this.textKey = params?.textKey ?? "text";
const apiKey = params?.apiKey ?? getEnv("PINECONE_API_KEY");
if (!apiKey) {
throw new Error("PINECONE_API_KEY is required");
}
this.apiKey = apiKey;
}
private async getDb(): Promise<Pinecone> {
if (!this.db) {
const { Pinecone } = await import("@pinecone-database/pinecone");
this.db = await new Pinecone();
this.db = new Pinecone({
apiKey: this.apiKey,
});
}
return Promise.resolve(this.db);
@@ -100,7 +110,7 @@ export class PineconeVectorStore extends BaseVectorStore {
*/
async add(embeddingResults: BaseNode<Metadata>[]): Promise<string[]> {
if (embeddingResults.length == 0) {
return Promise.resolve([]);
return [];
}
const idx: Index = await this.index();
@@ -110,10 +120,10 @@ export class PineconeVectorStore extends BaseVectorStore {
const chunk = nodes.slice(i, i + this.chunkSize);
const result = await this.saveChunk(idx, chunk);
if (!result) {
return Promise.reject(new Error("Failed to save chunk"));
throw new Error("Failed to save chunk");
}
}
return Promise.resolve([]);
return [];
}
protected async saveChunk(idx: Index, chunk: PineconeRecord[]) {
@@ -157,13 +167,19 @@ export class PineconeVectorStore extends BaseVectorStore {
topK: query.similarityTopK,
includeValues: true,
includeMetadata: true,
filter: filter,
};
if (filter) {
defaultOptions.filter = filter;
}
const idx = await this.index();
const results = await idx.query(defaultOptions);
const idList = results.matches.map((row) => row.id);
if (idList.length == 0) {
return { nodes: [], similarities: [], ids: [] };
}
const records: FetchResponse = await idx.fetch(idList);
const rows = Object.values(records.records);
@@ -179,13 +195,11 @@ export class PineconeVectorStore extends BaseVectorStore {
return node;
});
const ret = {
return {
nodes: nodes,
similarities: results.matches.map((row) => row.score || 999),
ids: results.matches.map((row) => row.id),
};
return Promise.resolve(ret);
}
/**
@@ -197,8 +211,8 @@ export class PineconeVectorStore extends BaseVectorStore {
return Promise.resolve();
}
toPineconeFilter(stdFilters?: MetadataFilters): object {
if (!stdFilters) return {};
toPineconeFilter(stdFilters?: MetadataFilters): object | undefined {
if (stdFilters == null) return undefined;
const transformCondition = (
condition: `${FilterCondition}` = "and",
@@ -1,4 +1,5 @@
export * from "./AstraDBVectorStore.js";
export * from "./AzureCosmosDBMongoVectorStore.js";
export * from "./AzureCosmosDBNoSqlVectorStore.js";
export * from "./ChromaVectorStore.js";
export * from "./MilvusVectorStore.js";
+13 -1
View File
@@ -65,7 +65,19 @@ export function metadataDictToNode(
}
} else {
nodeObj = JSON.parse(nodeContent);
nodeObj.metadata = rest;
nodeObj = {
...rest,
...options?.fallback,
...nodeObj,
};
nodeObj.metadata = {
...(options?.fallback &&
"metadata" in options.fallback &&
typeof options.fallback.metadata === "object"
? options?.fallback.metadata
: {}),
...rest,
};
}
// Note: we're using the name of the class stored in `_node_type`
+41
View File
@@ -1,5 +1,46 @@
# @llamaindex/node-parser
## 0.0.19
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
## 0.0.18
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
## 0.0.17
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 0.0.16
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 0.0.15
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "0.0.14",
"version": "0.0.19",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {
+41
View File
@@ -1,5 +1,46 @@
# @llamaindex/anthropic
## 0.0.27
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
## 0.0.26
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
## 0.0.25
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 0.0.24
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 0.0.23
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 0.0.22
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex",
"version": "0.0.22",
"version": "0.0.27",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+46
View File
@@ -1,5 +1,51 @@
# @llamaindex/clip
## 0.0.27
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
- @llamaindex/openai@0.1.43
## 0.0.26
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
- @llamaindex/openai@0.1.42
## 0.0.25
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
- @llamaindex/openai@0.1.41
## 0.0.24
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
- @llamaindex/openai@0.1.40
## 0.0.23
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
- @llamaindex/openai@0.1.39
## 0.0.22
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.22",
"version": "0.0.27",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+46
View File
@@ -1,5 +1,51 @@
# @llamaindex/deepinfra
## 0.0.27
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
- @llamaindex/openai@0.1.43
## 0.0.26
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
- @llamaindex/openai@0.1.42
## 0.0.25
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
- @llamaindex/openai@0.1.41
## 0.0.24
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
- @llamaindex/openai@0.1.40
## 0.0.23
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
- @llamaindex/openai@0.1.39
## 0.0.22
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.22",
"version": "0.0.27",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+40
View File
@@ -1,5 +1,45 @@
# @llamaindex/groq
## 0.0.42
### Patch Changes
- Updated dependencies [b504303]
- @llamaindex/env@0.1.25
- @llamaindex/openai@0.1.43
## 0.0.41
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/openai@0.1.42
## 0.0.40
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/env@0.1.24
- @llamaindex/openai@0.1.41
## 0.0.39
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/openai@0.1.40
## 0.0.38
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/openai@0.1.39
## 0.0.37
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex",
"version": "0.0.37",
"version": "0.0.42",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,51 @@
# @llamaindex/huggingface
## 0.0.27
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
- @llamaindex/openai@0.1.43
## 0.0.26
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
- @llamaindex/openai@0.1.42
## 0.0.25
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
- @llamaindex/openai@0.1.41
## 0.0.24
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
- @llamaindex/openai@0.1.40
## 0.0.23
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
- @llamaindex/openai@0.1.39
## 0.0.22
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex",
"version": "0.0.22",
"version": "0.0.27",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+41
View File
@@ -1,5 +1,46 @@
# @llamaindex/ollama
## 0.0.34
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
## 0.0.33
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
## 0.0.32
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 0.0.31
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 0.0.30
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 0.0.29
### Patch Changes

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