Compare commits

...

12 Commits

Author SHA1 Message Date
github-actions[bot] 3b0f55f1ea Release 0.9.3 (#1676)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-02-25 16:53:30 +07:00
Marcus Schiesser a9c6144eec feat: stream thinking tokens for claude 3.7 (#1679) 2025-02-25 16:48:12 +07:00
Marcus Schiesser 3564244ced chore: add claude 3.7 support (#1678) 2025-02-25 15:18:45 +07:00
Gunnar Holwerda d952e68ec4 Fix refine synthesizer empty source nodes behavior (#1677) 2025-02-24 10:56:21 +07:00
Tushar Sonawane 5c026e839f feat(vectorstore): adds firestore vector store support (#1600) 2025-02-21 16:23:50 +07:00
github-actions[bot] 9c1c5b4d50 Release 0.9.2 (#1673)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-21 10:57:11 +07:00
Thuc Pham c902fcbc33 chore: bump llamacloud openapi (#1674) 2025-02-20 17:47:41 +07:00
Thuc Pham 88d776f392 fix: enhance error message in llamacloud (#1672) 2025-02-20 16:33:34 +07:00
github-actions[bot] 6fcc6bcb84 Release @llamaindex/anthropic@0.1.2 (#1671)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-20 12:56:33 +07:00
Thuc Pham be74207945 fix: dont add empty text block to tool call (#1670) 2025-02-20 12:47:43 +07:00
Alex Yang 6be223dfad chore: bump version (#1668) 2025-02-19 19:28:12 +08:00
Alex Yang 4cbfdb5f5c ci: only run in pull request (#1669) 2025-02-19 19:11:53 +08:00
117 changed files with 6752 additions and 2516 deletions
+3 -1
View File
@@ -119,6 +119,7 @@ jobs:
size-limit:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
name: Size Limit
steps:
- uses: actions/checkout@v4
@@ -132,12 +133,13 @@ jobs:
run: pnpm install
- name: Build llamaindex
run: pnpm run build
- uses: andresz1/size-limit-action@v1
- uses: andresz1/size-limit-action@94bc357df29c36c8f8d50ea497c3e225c3c95d1d
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
directory: e2e/examples/vite-import-llamaindex
skip_step: "install"
build_script: build
package_manager: pnpm
typecheck-examples:
runs-on: ubuntu-latest
+21
View File
@@ -1,5 +1,26 @@
# @llamaindex/doc
## 0.1.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/cloud@3.0.3
- llamaindex@0.9.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/openai@0.1.54
- @llamaindex/readers@2.0.2
## 0.1.2
### Patch Changes
- Updated dependencies [c902fcb]
- Updated dependencies [88d776f]
- @llamaindex/cloud@3.0.2
- llamaindex@0.9.2
## 0.1.1
### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.1.1",
"version": "0.1.3",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
@@ -44,10 +44,10 @@
"hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"next": "15.1.7",
"next-themes": "^0.4.3",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-icons": "^5.3.0",
"react-monaco-editor": "^0.56.2",
"react-text-transition": "^3.1.0",
@@ -1,5 +1,18 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.137
### Patch Changes
- llamaindex@0.9.3
## 0.0.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.135
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.135",
"version": "0.0.137",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,18 @@
# @llamaindex/llama-parse-browser-test
## 0.0.48
### Patch Changes
- @llamaindex/cloud@3.0.3
## 0.0.47
### Patch Changes
- Updated dependencies [c902fcb]
- @llamaindex/cloud@3.0.2
## 0.0.46
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.46",
"version": "0.0.48",
"type": "module",
"scripts": {
"dev": "vite",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/next-agent-test
## 0.1.137
### Patch Changes
- llamaindex@0.9.3
## 0.1.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.135
### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.135",
"version": "0.1.137",
"private": true,
"scripts": {
"dev": "next dev",
@@ -10,9 +10,9 @@
"dependencies": {
"ai": "^4.0.0",
"llamaindex": "workspace:*",
"next": "15.0.3",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.1.7",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
@@ -1,5 +1,18 @@
# test-edge-runtime
## 0.1.136
### Patch Changes
- llamaindex@0.9.3
## 0.1.135
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.134
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.134",
"version": "0.1.136",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,7 +9,7 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "15.0.3",
"next": "15.1.7",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
@@ -1,5 +1,20 @@
# @llamaindex/next-node-runtime
## 0.1.3
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/huggingface@0.0.38
- @llamaindex/readers@2.0.2
## 0.1.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.1.1
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.1.1",
"version": "0.1.3",
"private": true,
"scripts": {
"dev": "next dev",
@@ -11,9 +11,9 @@
"llamaindex": "workspace:*",
"@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*",
"next": "15.0.3",
"react": "18.3.1",
"react-dom": "18.3.1"
"next": "15.1.7",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
@@ -1,5 +1,18 @@
# vite-import-llamaindex
## 0.0.3
### Patch Changes
- llamaindex@0.9.3
## 0.0.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.1
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.1",
"version": "0.0.3",
"type": "module",
"scripts": {
"build": "vite build",
@@ -5,3 +5,4 @@ dist
.cache
.DS_Store
*.pem
/src/pages.gen.ts
@@ -1,5 +1,18 @@
# @llamaindex/waku-query-engine-test
## 0.0.137
### Patch Changes
- llamaindex@0.9.3
## 0.0.136
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.135
### Patch Changes
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.135",
"version": "0.0.137",
"type": "module",
"private": true,
"scripts": {
@@ -11,10 +11,10 @@
"dependencies": {
"@llamaindex/env": "workspace:*",
"llamaindex": "workspace:*",
"react": "19.0.0-rc-5c56b873-20241107",
"react-dom": "19.0.0-rc-5c56b873-20241107",
"react-server-dom-webpack": "19.0.0-rc-5c56b873-20241107",
"waku": "0.21.6"
"react": "19.0.0",
"react-dom": "19.0.0",
"react-server-dom-webpack": "19.0.0",
"waku": "0.21.20"
},
"devDependencies": {
"@types/react": "18.3.12",
+43
View File
@@ -1,5 +1,48 @@
# examples
## 0.2.2
### Patch Changes
- 3564244: Add support for claude 3.7 thinking (and set default temperature to 1)
- 3564244: add support for claude 3.7
- Updated dependencies [d952e68]
- Updated dependencies [a9c6144]
- Updated dependencies [5c026e8]
- Updated dependencies [3564244]
- Updated dependencies [3564244]
- @llamaindex/core@0.5.2
- @llamaindex/anthropic@0.2.0
- @llamaindex/firestore@1.0.0
- @llamaindex/cloud@3.0.3
- llamaindex@0.9.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/clip@0.0.38
- @llamaindex/cohere@0.0.7
- @llamaindex/deepinfra@0.0.38
- @llamaindex/google@0.0.9
- @llamaindex/huggingface@0.0.38
- @llamaindex/mistral@0.0.7
- @llamaindex/mixedbread@0.0.7
- @llamaindex/ollama@0.0.42
- @llamaindex/openai@0.1.54
- @llamaindex/portkey-ai@0.0.35
- @llamaindex/replicate@0.0.35
- @llamaindex/astra@0.0.7
- @llamaindex/azure@0.1.2
- @llamaindex/chroma@0.0.7
- @llamaindex/milvus@0.1.2
- @llamaindex/mongodb@0.0.7
- @llamaindex/pinecone@0.0.7
- @llamaindex/postgres@0.0.35
- @llamaindex/qdrant@0.1.2
- @llamaindex/upstash@0.0.7
- @llamaindex/weaviate@0.0.7
- @llamaindex/vercel@0.0.13
- @llamaindex/readers@2.0.2
- @llamaindex/groq@0.0.53
- @llamaindex/vllm@0.0.24
## 0.2.1
### Patch Changes
+1 -1
View File
@@ -8,7 +8,7 @@ Settings.callbackManager.on("llm-tool-call", (event) => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet",
model: "claude-3-7-sonnet",
});
const agent = new AnthropicAgent({
+2 -2
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus",
model: "claude-3-7-sonnet",
});
const result = await anthropic.chat({
messages: [
@@ -15,5 +15,5 @@ import { Anthropic } from "@llamaindex/anthropic";
},
],
});
console.log(result);
console.log(result.message.content);
})();
+1 -1
View File
@@ -6,7 +6,7 @@ import readline from "node:readline/promises";
(async () => {
const llm = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus",
model: "claude-3-7-sonnet",
});
// chatHistory will store all the messages in the conversation
const chatHistory = new ChatMemoryBuffer({
+1 -1
View File
@@ -2,7 +2,7 @@ import { Anthropic } from "@llamaindex/anthropic";
async function main() {
const anthropic = new Anthropic({
model: "claude-3-5-sonnet-20241022",
model: "claude-3-7-sonnet",
});
const entireBook = await fetch(
+1 -1
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet",
model: "claude-3-7-sonnet",
});
const stream = await anthropic.chat({
messages: [
+32
View File
@@ -0,0 +1,32 @@
import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
model: "claude-3-7-sonnet",
maxTokens: 20000,
additionalChatOptions: {
thinking: {
type: "enabled",
budget_tokens: 16000,
},
},
});
const result = await anthropic.chat({
messages: [
{
role: "user",
content:
"Are there an infinite number of prime numbers such that n mod 4 == 3?",
},
],
stream: true,
});
console.log("Thinking...");
for await (const chunk of result) {
if (chunk.delta) {
process.stdout.write(chunk.delta);
} else if (chunk.options?.thinking) {
process.stdout.write(chunk.options.thinking);
}
}
})();
+4
View File
@@ -0,0 +1,4 @@
GCP_PROJECT_ID=
GCP_CREDENTIALS=
FIRESTORE_DB=
OPENAI_API_KEY=
+35
View File
@@ -0,0 +1,35 @@
# Firestore Vector Store
Here are some sample scripts which work with loading and querying data from a Firestore Vector Store.
## Prerequisites
- A Firestore Database
- Hosted https://console.firebase.google.com/
- An OpenAI API Key
## Setup
1. Set your env variables:
- `FIRESTORE_DB`: Name of your Firestore database
- `GCP_PROJECT_ID`: Your GCP project ID
- `GCP_CREDENTIALS`: Your GCP credentials JSON
- `OPENAI_API_KEY`: Your OpenAI key
2. `cd` Into the `examples` directory
3. run `npm i`
## Load the data
This sample loads the same dataset of movie reviews as sample dataset
run `npx tsx firestore/load.ts`
## Use RAG to Query the data
run `npx tsx firestore/query.ts`
## Delete the data
run `npx tsx firestore/delete.ts`
+32
View File
@@ -0,0 +1,32 @@
import { CollectionReference } from "@google-cloud/firestore";
import "dotenv/config";
import { FirestoreVectorStore } from "@llamaindex/firestore";
import { OpenAIEmbedding, Settings } from "llamaindex";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
vectorStore.delete("movie_reviews.csv");
} catch (e) {
console.error(e);
}
}
void main();
+44
View File
@@ -0,0 +1,44 @@
import { CollectionReference } from "@google-cloud/firestore";
import { CSVReader } from "@llamaindex/readers/csv";
import "dotenv/config";
import {
OpenAIEmbedding,
Settings,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import { FirestoreVectorStore } from "@llamaindex/firestore";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const reader = new CSVReader(false);
const docs = await reader.loadData("./data/movie_reviews.csv");
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
const storageContext = await storageContextFromDefaults({ vectorStore });
await VectorStoreIndex.fromDocuments(docs, { storageContext });
} catch (e) {
console.error(e);
}
}
void main();
+58
View File
@@ -0,0 +1,58 @@
import "dotenv/config";
import { OpenAIEmbedding, Settings, VectorStoreIndex } from "llamaindex";
import { CollectionReference } from "@google-cloud/firestore";
import { FirestoreVectorStore } from "@llamaindex/firestore";
const indexName = "MovieReviews";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
try {
const vectorStore = new FirestoreVectorStore({
clientOptions: {
credentials: JSON.parse(process.env.GCP_CREDENTIALS!),
projectId: process.env.GCP_PROJECT_ID!,
databaseId: process.env.FIRESTORE_DB!,
ignoreUndefinedProperties: true,
},
collectionName: indexName,
customCollectionReference: (rootCollection: CollectionReference) => {
return rootCollection.doc("accountId-123").collection("vectors");
},
});
const index = await VectorStoreIndex.fromVectorStore(vectorStore);
const retriever = index.asRetriever({ similarityTopK: 20 });
const queryEngine = index.asQueryEngine({ retriever });
const query = "Get all movie titles.";
const results = await queryEngine.query({ query });
console.log(`Query from ${results.sourceNodes?.length} nodes`);
console.log(results.response);
console.log("\n=====\nQuerying the index with filters");
const queryEngineWithFilters = index.asQueryEngine({
retriever,
preFilters: {
filters: [
{
key: "file_name",
value: "movie_reviews.csv",
operator: "==",
},
],
},
});
const resultAfterFilter = await queryEngineWithFilters.query({
query: "Get all movie titles.",
});
console.log(`Query from ${resultAfterFilter.sourceNodes?.length} nodes`);
console.log(resultAfterFilter.response);
} catch (e) {
console.error(e);
}
}
void main();
+32 -31
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/examples",
"version": "0.2.1",
"version": "0.2.2",
"private": true,
"scripts": {
"lint": "eslint .",
@@ -11,36 +11,37 @@
"@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0",
"@llamaindex/anthropic": "^0.1.1",
"@llamaindex/astra": "^0.0.6",
"@llamaindex/azure": "^0.1.1",
"@llamaindex/chroma": "^0.0.6",
"@llamaindex/clip": "^0.0.37",
"@llamaindex/cloud": "^3.0.1",
"@llamaindex/cohere": "^0.0.6",
"@llamaindex/core": "^0.5.1",
"@llamaindex/deepinfra": "^0.0.37",
"@llamaindex/anthropic": "^0.2.0",
"@llamaindex/astra": "^0.0.7",
"@llamaindex/azure": "^0.1.2",
"@llamaindex/chroma": "^0.0.7",
"@llamaindex/clip": "^0.0.38",
"@llamaindex/cloud": "^3.0.3",
"@llamaindex/cohere": "^0.0.7",
"@llamaindex/core": "^0.5.2",
"@llamaindex/deepinfra": "^0.0.38",
"@llamaindex/env": "^0.1.28",
"@llamaindex/google": "^0.0.8",
"@llamaindex/groq": "^0.0.52",
"@llamaindex/huggingface": "^0.0.37",
"@llamaindex/milvus": "^0.1.1",
"@llamaindex/mistral": "^0.0.6",
"@llamaindex/mixedbread": "^0.0.6",
"@llamaindex/mongodb": "^0.0.6",
"@llamaindex/node-parser": "^1.0.1",
"@llamaindex/ollama": "^0.0.41",
"@llamaindex/openai": "^0.1.53",
"@llamaindex/pinecone": "^0.0.6",
"@llamaindex/portkey-ai": "^0.0.34",
"@llamaindex/postgres": "^0.0.34",
"@llamaindex/qdrant": "^0.1.1",
"@llamaindex/readers": "^2.0.1",
"@llamaindex/replicate": "^0.0.34",
"@llamaindex/upstash": "^0.0.6",
"@llamaindex/vercel": "^0.0.12",
"@llamaindex/vllm": "^0.0.23",
"@llamaindex/weaviate": "^0.0.6",
"@llamaindex/firestore": "^1.0.0",
"@llamaindex/google": "^0.0.9",
"@llamaindex/groq": "^0.0.53",
"@llamaindex/huggingface": "^0.0.38",
"@llamaindex/milvus": "^0.1.2",
"@llamaindex/mistral": "^0.0.7",
"@llamaindex/mixedbread": "^0.0.7",
"@llamaindex/mongodb": "^0.0.7",
"@llamaindex/node-parser": "^1.0.2",
"@llamaindex/ollama": "^0.0.42",
"@llamaindex/openai": "^0.1.54",
"@llamaindex/pinecone": "^0.0.7",
"@llamaindex/portkey-ai": "^0.0.35",
"@llamaindex/postgres": "^0.0.35",
"@llamaindex/qdrant": "^0.1.2",
"@llamaindex/readers": "^2.0.2",
"@llamaindex/replicate": "^0.0.35",
"@llamaindex/upstash": "^0.0.7",
"@llamaindex/vercel": "^0.0.13",
"@llamaindex/vllm": "^0.0.24",
"@llamaindex/weaviate": "^0.0.7",
"@llamaindex/workflow": "^0.0.11",
"@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^4.0.0",
@@ -50,7 +51,7 @@
"commander": "^12.1.0",
"dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.9.1",
"llamaindex": "^0.9.3",
"mongodb": "6.7.0",
"pathe": "^1.1.2",
"postgres": "^3.4.4",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/autotool
## 6.0.3
### Patch Changes
- llamaindex@0.9.3
## 6.0.2
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 6.0.1
### Patch Changes
@@ -1,5 +1,20 @@
# @llamaindex/autotool-01-node-example
## 0.0.84
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/autotool@6.0.3
## 0.0.83
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
- @llamaindex/autotool@6.0.2
## 0.0.82
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.82"
"version": "0.0.84"
}
@@ -1,5 +1,20 @@
# @llamaindex/autotool-02-next-example
## 0.1.128
### Patch Changes
- llamaindex@0.9.3
- @llamaindex/autotool@6.0.3
## 0.1.127
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
- @llamaindex/autotool@6.0.2
## 0.1.126
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.126",
"version": "0.1.128",
"scripts": {
"dev": "next dev",
"build": "next build",
@@ -15,7 +15,7 @@
"dotenv": "^16.3.1",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"next": "15.1.7",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-markdown": "^9.0.1",
+2 -2
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool"
},
"version": "6.0.1",
"version": "6.0.3",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
@@ -77,7 +77,7 @@
"@types/node": "^22.9.0",
"bunchee": "6.3.4",
"llamaindex": "workspace:*",
"next": "15.0.3",
"next": "15.1.7",
"rollup": "^4.28.1",
"tsx": "^4.19.0",
"typescript": "^5.7.2",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/cloud
## 3.0.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 3.0.2
### Patch Changes
- c902fcb: chore: bump llamacloud openapi
## 3.0.1
### Patch Changes
+4290 -1580
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "3.0.1",
"version": "3.0.3",
"type": "module",
"license": "MIT",
"scripts": {
+44
View File
@@ -4,6 +4,7 @@ import { fs, getEnv, path } from "@llamaindex/env";
import {
type Body_upload_file_api_v1_parsing_upload_post,
type ParserLanguages,
type ParsingMode,
getJobApiV1ParsingJobJobIdGet,
getJobImageResultApiV1ParsingJobJobIdResultImageNameGet,
getJobJsonResultApiV1ParsingJobJobIdResultJsonGet,
@@ -127,6 +128,26 @@ export class LlamaParseReader extends FileReader {
readonly #client: Client;
output_tables_as_HTML: boolean = false;
input_s3_region?: string | undefined;
output_s3_region?: string | undefined;
preserve_layout_alignment_across_pages?: boolean | undefined;
spreadsheet_extract_sub_tables?: boolean | undefined;
formatting_instruction?: string | undefined;
parse_mode?: ParsingMode | undefined;
system_prompt?: string | undefined;
system_prompt_append?: string | undefined;
user_prompt?: string | undefined;
job_timeout_in_seconds?: number | undefined;
job_timeout_extra_time_per_page_in_seconds?: number | undefined;
strict_mode_image_extraction?: boolean | undefined;
strict_mode_image_ocr?: boolean | undefined;
strict_mode_reconstruction?: boolean | undefined;
strict_mode_buggy_font?: boolean | undefined;
ignore_document_elements_for_layout_detection?: boolean | undefined;
complemental_formatting_instruction?: string | undefined;
content_guideline_instruction?: string | undefined;
constructor(
params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & {
language?: ParserLanguages | ParserLanguages[] | undefined;
@@ -252,6 +273,29 @@ export class LlamaParseReader extends FileReader {
structured_output_json_schema_name:
this.structured_output_json_schema_name,
extract_layout: this.extract_layout,
output_tables_as_HTML: this.output_tables_as_HTML,
input_s3_region: this.input_s3_region,
output_s3_region: this.output_s3_region,
preserve_layout_alignment_across_pages:
this.preserve_layout_alignment_across_pages,
spreadsheet_extract_sub_tables: this.spreadsheet_extract_sub_tables,
formatting_instruction: this.formatting_instruction,
parse_mode: this.parse_mode,
system_prompt: this.system_prompt,
system_prompt_append: this.system_prompt_append,
user_prompt: this.user_prompt,
job_timeout_in_seconds: this.job_timeout_in_seconds,
job_timeout_extra_time_per_page_in_seconds:
this.job_timeout_extra_time_per_page_in_seconds,
strict_mode_image_extraction: this.strict_mode_image_extraction,
strict_mode_image_ocr: this.strict_mode_image_ocr,
strict_mode_reconstruction: this.strict_mode_reconstruction,
strict_mode_buggy_font: this.strict_mode_buggy_font,
ignore_document_elements_for_layout_detection:
this.ignore_document_elements_for_layout_detection,
complemental_formatting_instruction:
this.complemental_formatting_instruction,
content_guideline_instruction: this.content_guideline_instruction,
} satisfies {
[Key in keyof Body_upload_file_api_v1_parsing_upload_post]-?:
| Body_upload_file_api_v1_parsing_upload_post[Key]
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/community
## 0.0.84
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.83
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.83",
"version": "0.0.84",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/core
## 0.5.2
### Patch Changes
- d952e68: Refine synthesizer will now return an empty string as the response if an empty array of source nodes were provided. Before it would throw an internal error converting undefined to ReadableStream.
## 0.5.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.5.1",
"version": "0.5.2",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
@@ -116,7 +116,14 @@ class Refine extends BaseSynthesizer {
}
}
// fixme: no source nodes provided, cannot fix right now due to lack of context
if (response === undefined) {
response = stream
? (async function* () {
yield "";
})()
: "";
}
if (typeof response === "string") {
return EngineResponse.fromResponse(response, false, nodes);
} else {
@@ -66,9 +66,9 @@ describe("ChatMemoryBuffer", () => {
expect(result).toEqual([...inputMessages, ...storedMessages]);
});
test("getMessages throws error when initial token count exceeds limit", () => {
test("getMessages throws error when initial token count exceeds limit", async () => {
const buffer = new ChatMemoryBuffer({ tokenLimit: 10 });
expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
await expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
"Initial token count exceeds token limit",
);
});
@@ -1,4 +1,4 @@
import { describe, expect, test, vi } from "vitest";
import { beforeEach, describe, expect, test, vi } from "vitest";
import type { LLMMetadata } from "../../llms/dist/index.js";
import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js";
import { Document } from "../../schema/dist/index.js";
@@ -10,26 +10,69 @@ const mockLllm = () => ({
return response;
}
function* gen() {
// yield a few times to make sure each chunk has the sourceNodes
yield response;
yield response;
yield response;
}
return gen();
return {
[Symbol.asyncIterator]: function* gen() {
// yield a few times to make sure each chunk has the sourceNodes
yield response;
yield response;
yield response;
},
};
}),
chat: vi.fn(),
metadata: {} as unknown as LLMMetadata,
});
describe("refine response synthesizer", () => {
let synthesizer: ReturnType<typeof getResponseSynthesizer<"refine">>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const isAsyncIterable = (obj: any): boolean =>
obj[Symbol.asyncIterator] !== undefined;
beforeEach(() => {
synthesizer = getResponseSynthesizer("refine", {
llm: mockLllm(),
});
});
describe("getResponse", () => {
test("should return async iterable of EngineResponse when stream is true and sourceNodes are empty", async () => {
const response = await synthesizer.getResponse(
"unimportant query",
[],
true,
);
expect(isAsyncIterable(response)).toBe(true);
for await (const chunk of response) {
expect(chunk.message.content).toEqual("");
}
});
test("should return non async iterable when stream is false and sourceNodes are empty", async () => {
const response = await synthesizer.getResponse(
"unimportant query",
[],
false,
);
expect(isAsyncIterable(response)).toBe(false);
expect(response.message.content).toEqual("");
});
});
});
describe("compact and refine response synthesizer", () => {
let synthesizer: ReturnType<typeof getResponseSynthesizer<"compact">>;
beforeEach(() => {
synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
});
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(
@@ -44,10 +87,6 @@ describe("compact and refine response synthesizer", () => {
});
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(
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/experimental
## 0.0.153
### Patch Changes
- llamaindex@0.9.3
## 0.0.152
### Patch Changes
- Updated dependencies [88d776f]
- llamaindex@0.9.2
## 0.0.151
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.151",
"version": "0.0.153",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+18
View File
@@ -1,5 +1,23 @@
# llamaindex
## 0.9.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/cloud@3.0.3
- @llamaindex/node-parser@1.0.2
- @llamaindex/openai@0.1.54
## 0.9.2
### Patch Changes
- 88d776f: fix: enhance error message in llamacloud
- Updated dependencies [c902fcb]
- @llamaindex/cloud@3.0.2
## 0.9.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.9.1",
"version": "0.9.3",
"license": "MIT",
"type": "module",
"keywords": [
+5
View File
@@ -31,6 +31,11 @@ export function initService({ apiKey, baseUrl }: ClientParams = {}) {
request.headers.set("Authorization", `Bearer ${token}`);
return request;
});
client.interceptors.error.use((error) => {
throw new Error(
`LlamaCloud API request failed. Error details: ${JSON.stringify(error)}`,
);
});
if (!token) {
throw new Error(
"API Key is required for LlamaCloudIndex. Please pass the apiKey parameter",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/node-parser
## 1.0.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 1.0.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "1.0.1",
"version": "1.0.2",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {
+19
View File
@@ -1,5 +1,24 @@
# @llamaindex/anthropic
## 0.2.0
### Minor Changes
- 3564244: Add support for claude 3.7 thinking (and set default temperature to 1)
### Patch Changes
- a9c6144: Stream thinking tokens
- 3564244: add support for claude 3.7
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.2
### Patch Changes
- be74207: fix: dont add empty text block to tool call
## 0.1.1
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex",
"version": "0.1.1",
"version": "0.2.0",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -35,7 +35,7 @@
"vitest": "^2.1.5"
},
"dependencies": {
"@anthropic-ai/sdk": "0.32.1",
"@anthropic-ai/sdk": "0.37.0",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*",
"remeda": "^2.17.3"
+82 -53
View File
@@ -6,6 +6,8 @@ import type {
} from "@anthropic-ai/sdk/resources/beta/index";
import type { TextBlock } from "@anthropic-ai/sdk/resources/index";
import type {
MessageCreateParams,
MessageCreateParamsBase,
MessageParam,
Model,
Tool,
@@ -102,10 +104,17 @@ export const ALL_AVAILABLE_V3_5_MODELS = {
"claude-3-5-haiku-20241022": { contextWindow: 200000 },
};
export const ALL_AVAILABLE_V3_7_MODELS = {
"claude-3-7-sonnet": { contextWindow: 200000 },
"claude-3-7-sonnet-20250219": { contextWindow: 200000 },
"claude-3-7-sonnet-latest": { contextWindow: 200000 },
};
export const ALL_AVAILABLE_ANTHROPIC_MODELS = {
...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS,
...ALL_AVAILABLE_V3_MODELS,
...ALL_AVAILABLE_V3_5_MODELS,
...ALL_AVAILABLE_V3_7_MODELS,
} satisfies {
[key in Model]: { contextWindow: number };
};
@@ -115,11 +124,16 @@ const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
"claude-3-sonnet": "claude-3-sonnet-20240229",
"claude-3-haiku": "claude-3-haiku-20240307",
"claude-3-5-sonnet": "claude-3-5-sonnet-20240620",
"claude-3-7-sonnet": "claude-3-7-sonnet-20250219",
} as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string };
export type AnthropicAdditionalChatOptions = object;
export type AnthropicAdditionalChatOptions = Pick<
MessageCreateParamsBase,
"thinking"
>;
export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
cache_control?: BetaCacheControlEphemeral | null;
thinking?: string | undefined;
};
export class Anthropic extends ToolCallLLM<
@@ -129,8 +143,9 @@ export class Anthropic extends ToolCallLLM<
// Per completion Anthropic params
model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string);
temperature: number;
topP: number;
topP?: number | undefined;
maxTokens?: number | undefined;
additionalChatOptions?: AnthropicAdditionalChatOptions | undefined;
// Anthropic session params
apiKey?: string | undefined;
@@ -141,13 +156,14 @@ export class Anthropic extends ToolCallLLM<
constructor(init?: Partial<Anthropic>) {
super();
this.model = init?.model ?? "claude-3-opus";
this.temperature = init?.temperature ?? 0.1;
this.topP = init?.topP ?? 0.999; // Per Ben Mann
this.temperature = init?.temperature ?? 1; // default in anthropic is 1
this.topP = init?.topP;
this.maxTokens = init?.maxTokens ?? undefined;
this.apiKey = init?.apiKey ?? undefined;
this.maxRetries = init?.maxRetries ?? 10;
this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds
this.additionalChatOptions = init?.additionalChatOptions;
this.session =
init?.session ??
getAnthropicSession({
@@ -165,7 +181,7 @@ export class Anthropic extends ToolCallLLM<
return {
model: this.model,
temperature: this.temperature,
topP: this.topP,
topP: this.topP ?? 0, // XXX: topP needs to be returned but might be undefined for Anthropic
maxTokens: this.maxTokens,
contextWindow:
this.model in ALL_AVAILABLE_ANTHROPIC_MODELS
@@ -207,23 +223,26 @@ export class Anthropic extends ToolCallLLM<
}
if ("toolCall" in options) {
const formattedMessage: MessageParam = {
role: "assistant",
content: [
{
type: "text" as const,
text: extractText(message.content),
},
...options.toolCall.map((tool) => ({
type: "tool_use" as const,
id: tool.id,
name: tool.name,
input: this.parseToolInput(tool.input),
})),
],
};
const text = extractText(message.content);
return formattedMessage;
const content: MessageParam["content"] = [];
if (text && text.trim().length > 0) {
// don't add empty text blocks
content.push({
type: "text" as const,
text: text,
});
}
content.push(
...options.toolCall.map((tool) => ({
type: "tool_use" as const,
id: tool.id,
name: tool.name,
input: this.parseToolInput(tool.input),
})),
);
return { role: "assistant", content } satisfies MessageParam;
}
// Handle tool results
@@ -362,8 +381,14 @@ export class Anthropic extends ToolCallLLM<
@wrapLLMEvent
async chat(
params:
| LLMChatParamsNonStreaming<AnthropicToolCallLLMMessageOptions>
| LLMChatParamsStreaming<AnthropicToolCallLLMMessageOptions>,
| LLMChatParamsNonStreaming<
AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
>
| LLMChatParamsStreaming<
AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
>,
): Promise<
| ChatResponse<AnthropicToolCallLLMMessageOptions>
| AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
@@ -404,28 +429,29 @@ export class Anthropic extends ToolCallLLM<
anthropic = anthropic.beta.promptCaching;
}
if (stream) {
if (tools) {
console.error("Tools are not supported in streaming mode");
}
return this.streamChat(
messages.filter((m) => m.role !== "system"),
systemPrompt,
anthropic,
);
}
const apiParams = {
const apiParams: MessageCreateParams = {
model: this.getModelName(this.model),
messages: this.mergeConsecutiveMessages(
this.formatMessages(messages.filter((m) => m.role !== "system")),
),
max_tokens: this.maxTokens ?? 4096,
temperature: this.temperature,
top_p: this.topP,
...(this.topP ? { top_p: this.topP } : {}),
...(systemPrompt && { system: systemPrompt }),
...Object.assign(
{},
this.additionalChatOptions,
params.additionalChatOptions,
),
};
if (stream) {
if (tools) {
console.error("Tools are not supported in streaming mode");
}
return this.streamChat(anthropic, apiParams);
}
if (tools?.length) {
Object.assign(apiParams, {
tools: this.prepareToolsForAPI(tools),
@@ -442,7 +468,10 @@ export class Anthropic extends ToolCallLLM<
raw: response,
message: {
content: response.content
.filter((content): content is TextBlock => content.type === "text")
.filter(
(content): content is TextBlock =>
content.type === "text" && content.text?.trim().length > 0,
)
.map((content) => ({
type: "text" as const,
text: content.text,
@@ -466,36 +495,36 @@ export class Anthropic extends ToolCallLLM<
}
protected async *streamChat(
messages: ChatMessage<AnthropicToolCallLLMMessageOptions>[],
systemPrompt: string | Array<BetaTextBlockParam> | null,
anthropic: SDKAnthropic,
params: MessageCreateParams,
): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> {
const stream = await anthropic.messages.create({
model: this.getModelName(this.model),
messages: this.formatMessages(messages),
max_tokens: this.maxTokens ?? 4096,
temperature: this.temperature,
top_p: this.topP,
...params,
stream: true,
...(systemPrompt && { system: systemPrompt }),
});
let idx_counter: number = 0;
for await (const part of stream) {
const content =
part.type === "content_block_delta"
? part.delta.type === "text_delta"
? part.delta.text
: part.delta
const textContent =
part.type === "content_block_delta" && part.delta.type === "text_delta"
? part.delta.text
: undefined;
if (typeof content !== "string") continue;
const thinking =
part.type === "content_block_delta" &&
part.delta.type === "thinking_delta"
? part.delta.thinking
: undefined;
if (!textContent && !thinking) continue;
idx_counter++;
yield {
raw: part,
delta: content,
options: {},
delta: textContent ?? "",
options: {
thinking: thinking,
},
};
}
return;
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/clip
## 0.0.38
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/openai@0.1.54
## 0.0.37
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.37",
"version": "0.0.38",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/cohere
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/cohere",
"description": "Cohere Adapter for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/deepinfra
## 0.0.38
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/openai@0.1.54
## 0.0.37
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.37",
"version": "0.0.38",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/google
## 0.0.9
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.8
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/google",
"description": "Google Adapter for LlamaIndex",
"version": "0.0.8",
"version": "0.0.9",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/groq
## 0.0.53
### Patch Changes
- @llamaindex/openai@0.1.54
## 0.0.52
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex",
"version": "0.0.52",
"version": "0.0.53",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/huggingface
## 0.0.38
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/openai@0.1.54
## 0.0.37
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex",
"version": "0.0.37",
"version": "0.0.38",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/mistral
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/mistral",
"description": "Mistral Adapter for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/mixedbread
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/mixedbread",
"description": "Mixedbread Adapter for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/ollama
## 0.0.42
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.41
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/ollama",
"description": "Ollama Adapter for LlamaIndex",
"version": "0.0.41",
"version": "0.0.42",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/openai
## 0.1.54
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.53
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/openai",
"description": "OpenAI Adapter for LlamaIndex",
"version": "0.1.53",
"version": "0.1.54",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/portkey-ai
## 0.0.35
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.34
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/portkey-ai",
"description": "Portkey Adapter for LlamaIndex",
"version": "0.0.34",
"version": "0.0.35",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/replicate
## 0.0.35
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.34
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/replicate",
"description": "Replicate Adapter for LlamaIndex",
"version": "0.0.34",
"version": "0.0.35",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/astra
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/astra",
"description": "Astra Storage for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/azure
## 0.1.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.1
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/azure",
"description": "Azure Storage for LlamaIndex",
"version": "0.1.1",
"version": "0.1.2",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/chroma
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/chroma",
"description": "Chroma Storage for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -0,0 +1,12 @@
# @llamaindex/firestore
## 1.0.0
### Major Changes
- 5c026e8: Firestore vector store support for LlamaIndex
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
@@ -0,0 +1,48 @@
{
"name": "@llamaindex/firestore",
"description": "Firestore Storage for LlamaIndex",
"version": "1.0.0",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"exports": {
".": {
"edge-light": {
"types": "./dist/index.edge-light.d.ts",
"default": "./dist/index.edge-light.js"
},
"workerd": {
"types": "./dist/index.edge-light.d.ts",
"default": "./dist/index.edge-light.js"
},
"require": {
"types": "./dist/index.d.cts",
"default": "./dist/index.cjs"
},
"import": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
}
},
"files": [
"dist"
],
"repository": {
"type": "git",
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/providers/storage/firestore"
},
"scripts": {
"build": "bunchee",
"dev": "bunchee --watch"
},
"devDependencies": {
"bunchee": "6.3.4"
},
"dependencies": {
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*",
"@google-cloud/firestore": "^7.11.0"
}
}
@@ -0,0 +1,273 @@
import {
CollectionReference,
FieldValue,
Filter,
Firestore,
type Settings,
type VectorQuery,
type WhereFilterOp,
} from "@google-cloud/firestore";
import type { BaseNode, Metadata } from "@llamaindex/core/schema";
import {
BaseVectorStore,
FilterOperator,
metadataDictToNode,
nodeToMetadata,
type MetadataFilter,
type MetadataFilters,
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "@llamaindex/core/vector-store";
enum DistanceMeasure {
COSINE = "COSINE",
EUCLIDEAN = "EUCLIDEAN",
DOT_PRODUCT = "DOT_PRODUCT",
}
type FirestoreParams = {
collectionName: string;
client?: Firestore;
clientOptions?: {
credentials: Settings["credentials"];
projectId: string;
databaseId: string;
ignoreUndefinedProperties: boolean;
};
batchSize?: number;
embeddingKey?: string;
textKey?: string;
metadataKey?: string;
distanceMeasure?: DistanceMeasure;
customCollectionReference?: (
rootCollection: CollectionReference,
) => CollectionReference;
} & VectorStoreBaseParams;
const DEFAULT_BATCH_SIZE = 500;
function toFirestoreOperator(operator: FilterOperator): WhereFilterOp {
const operatorMap: Record<FilterOperator, WhereFilterOp> = {
[FilterOperator.EQ]: "==",
[FilterOperator.NE]: "!=",
[FilterOperator.GT]: ">",
[FilterOperator.GTE]: ">=",
[FilterOperator.LT]: "<",
[FilterOperator.LTE]: "<=",
[FilterOperator.IN]: "in",
[FilterOperator.NIN]: "not-in",
[FilterOperator.CONTAINS]: "array-contains",
[FilterOperator.TEXT_MATCH]: "==",
[FilterOperator.ANY]: "array-contains-any",
[FilterOperator.ALL]: "array-contains",
[FilterOperator.IS_EMPTY]: "==",
};
const firestoreOp = operatorMap[operator];
if (!firestoreOp) {
throw new Error(`Operator ${operator} not supported in Firestore.`);
}
return firestoreOp;
}
function toFirestoreFilter(filters: MetadataFilters): Filter | undefined {
if (!filters?.filters?.length) return undefined;
const firestoreFilters = filters.filters.map((filter: MetadataFilter) => {
const path = `${filter.key}`;
const operator = toFirestoreOperator(filter.operator as FilterOperator);
return Filter.where(path, operator, filter.value);
});
if (firestoreFilters.length === 1) {
return firestoreFilters[0];
}
return filters.condition === "or"
? Filter.or(...firestoreFilters)
: Filter.and(...firestoreFilters);
}
export class FirestoreVectorStore extends BaseVectorStore<Firestore> {
storesText: boolean = true;
isEmbeddingQuery?: boolean = false;
flatMetadata: boolean = true;
private firestoreClient: Firestore;
private collectionName: string;
private batchSize: number;
private embeddingKey: string = "embedding";
private metadataKey: string = "metadata";
private distanceMeasure: DistanceMeasure = DistanceMeasure.COSINE;
private customCollectionReference: (
rootCollection: CollectionReference,
) => CollectionReference;
constructor({
collectionName = "vector_store",
client,
clientOptions,
batchSize = DEFAULT_BATCH_SIZE,
distanceMeasure = DistanceMeasure.COSINE,
customCollectionReference,
...init
}: FirestoreParams) {
super(init);
this.collectionName = collectionName;
this.batchSize = batchSize;
this.distanceMeasure = distanceMeasure;
this.customCollectionReference =
customCollectionReference ?? ((rootCollection) => rootCollection);
if (client) {
this.firestoreClient = client;
} else {
if (!clientOptions) {
throw new Error("clientOptions are required");
}
if (!clientOptions.credentials) {
throw new Error("clientOptions.credentials are required");
}
if (!clientOptions.projectId) {
throw new Error("clientOptions.projectId is required");
}
this.firestoreClient = new Firestore({
credentials: clientOptions.credentials,
projectId: clientOptions.projectId,
databaseId: clientOptions?.databaseId,
ignoreUndefinedProperties:
clientOptions.ignoreUndefinedProperties ?? false,
});
}
}
public client() {
return this.firestoreClient;
}
/**
* Adds nodes to the vector store
* @param {BaseNode<Metadata>[]} nodes - Array of nodes to add to the vector store
* @returns {Promise<string[]>} Array of node IDs that were added
*/
async add(nodes: BaseNode<Metadata>[]): Promise<string[]> {
const batch = this.firestoreClient.batch();
const collection = this.customCollectionReference(
this.firestoreClient.collection(this.collectionName),
);
const ids: string[] = [];
for (const node of nodes) {
const docRef = collection.doc(node.id_);
const metadata = nodeToMetadata(
node,
!this.storesText,
"text",
this.flatMetadata,
);
const entry = {
[this.embeddingKey]: FieldValue.vector(node.getEmbedding()),
[this.metadataKey]: metadata,
};
batch.set(docRef, entry, { merge: true });
ids.push(node.id_);
// Commit batch when it reaches the size limit
if (ids.length % this.batchSize === 0) {
await batch.commit();
}
}
// Commit any remaining documents
if (nodes.length % this.batchSize !== 0) {
await batch.commit();
}
return ids;
}
/**
* Deletes all nodes from the vector store that match the given filename
* @param {string} fileName - Name of the file whose nodes should be deleted
* @returns {Promise<void>}
*/
async delete(fileName: string): Promise<void> {
const collection = this.customCollectionReference(
this.firestoreClient.collection(this.collectionName),
);
const snapshot = await collection
.where(`${this.metadataKey}.file_name`, "==", fileName)
.get();
const batch = this.firestoreClient.batch();
snapshot.docs.forEach((doc) => {
batch.delete(doc.ref);
});
await batch.commit();
}
/**
* Queries the vector store for similar nodes
* @param {VectorStoreQuery} query - Query parameters including queryStr or queryEmbedding, filters, and similarityTopK
* @param {object} [_options] - Optional parameters for the query
* @returns {Promise<VectorStoreQueryResult>} Query results containing matching nodes, their similarities, and IDs
* @throws {Error} When neither queryEmbedding nor queryStr is provided
*/
async query(
query: VectorStoreQuery,
_options?: object,
): Promise<VectorStoreQueryResult> {
if (!query.queryEmbedding) {
throw new Error("No query embedding provided");
}
// Get documents with filters if any
let baseQuery = this.firestoreClient.collection(this.collectionName);
baseQuery = this.customCollectionReference(baseQuery);
if (query.filters) {
const filter = toFirestoreFilter(query.filters);
if (filter) {
baseQuery = baseQuery.where(filter) as CollectionReference;
}
}
// Use Firestore's native vector search
const vectorQuery = baseQuery.findNearest({
vectorField: this.embeddingKey,
queryVector: query.queryEmbedding,
limit: query.similarityTopK,
distanceMeasure: this.distanceMeasure,
distanceResultField: "vector_distance",
}) as VectorQuery;
const snapshot = await vectorQuery.get();
// Convert results to VectorStoreQueryResult format
const topKIds: string[] = [];
const topKNodes: BaseNode[] = [];
const topKSimilarities: number[] = [];
snapshot.forEach((doc) => {
const distance = doc.get("vector_distance") as number;
// Convert distance to similarity score (1 - normalized distance)
const similarity =
this.distanceMeasure === DistanceMeasure.DOT_PRODUCT
? distance // For dot product, higher is more similar
: 1 / (1 + distance); // For EUCLIDEAN and COSINE, lower distance means more similar
topKIds.push(doc.id);
topKNodes.push(metadataDictToNode(doc.get(this.metadataKey)));
topKSimilarities.push(similarity);
});
return {
nodes: topKNodes,
similarities: topKSimilarities,
ids: topKIds,
};
}
}
@@ -0,0 +1 @@
export * from "./FirestoreVectorStore";
@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.json",
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"outDir": "./lib",
"tsBuildInfoFile": "./lib/.tsbuildinfo"
},
"include": ["./src"],
"references": [
{
"path": "../../../core/tsconfig.json"
},
{
"path": "../../../env/tsconfig.json"
}
]
}
@@ -1,5 +1,12 @@
# @llamaindex/milvus
## 0.1.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.1
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/milvus",
"description": "Milvus Storage for LlamaIndex",
"version": "0.1.1",
"version": "0.1.2",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/mongodb
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/mongodb",
"description": "MongoDB Storage for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/pinecone
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/pinecone",
"description": "Pinecone Storage for LlamaIndex",
"version": "0.0.6",
"version": "0.0.7",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/postgres
## 0.0.35
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.34
### Patch Changes

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