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: size-limit:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
name: Size Limit name: Size Limit
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -132,12 +133,13 @@ jobs:
run: pnpm install run: pnpm install
- name: Build llamaindex - name: Build llamaindex
run: pnpm run build run: pnpm run build
- uses: andresz1/size-limit-action@v1 - uses: andresz1/size-limit-action@94bc357df29c36c8f8d50ea497c3e225c3c95d1d
with: with:
github_token: ${{ secrets.GITHUB_TOKEN }} github_token: ${{ secrets.GITHUB_TOKEN }}
directory: e2e/examples/vite-import-llamaindex directory: e2e/examples/vite-import-llamaindex
skip_step: "install" skip_step: "install"
build_script: build build_script: build
package_manager: pnpm
typecheck-examples: typecheck-examples:
runs-on: ubuntu-latest runs-on: ubuntu-latest
+21
View File
@@ -1,5 +1,26 @@
# @llamaindex/doc # @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 ## 0.1.1
### Patch Changes ### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/doc", "name": "@llamaindex/doc",
"version": "0.1.1", "version": "0.1.3",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "pnpm run build:docs && next build", "build": "pnpm run build:docs && next build",
@@ -44,10 +44,10 @@
"hast-util-to-jsx-runtime": "^2.3.2", "hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"lucide-react": "^0.460.0", "lucide-react": "^0.460.0",
"next": "15.0.3", "next": "15.1.7",
"next-themes": "^0.4.3", "next-themes": "^0.4.3",
"react": "^18.3.1", "react": "^19.0.0",
"react-dom": "^18.3.1", "react-dom": "^19.0.0",
"react-icons": "^5.3.0", "react-icons": "^5.3.0",
"react-monaco-editor": "^0.56.2", "react-monaco-editor": "^0.56.2",
"react-text-transition": "^3.1.0", "react-text-transition": "^3.1.0",
@@ -1,5 +1,18 @@
# @llamaindex/cloudflare-worker-agent-test # @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 ## 0.0.135
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloudflare-worker-agent-test", "name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.135", "version": "0.0.137",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -1,5 +1,18 @@
# @llamaindex/llama-parse-browser-test # @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 ## 0.0.46
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/llama-parse-browser-test", "name": "@llamaindex/llama-parse-browser-test",
"private": true, "private": true,
"version": "0.0.46", "version": "0.0.48",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/next-agent-test # @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 ## 0.1.135
### Patch Changes ### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-agent-test", "name": "@llamaindex/next-agent-test",
"version": "0.1.135", "version": "0.1.137",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -10,9 +10,9 @@
"dependencies": { "dependencies": {
"ai": "^4.0.0", "ai": "^4.0.0",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"react": "18.3.1", "react": "19.0.0",
"react-dom": "18.3.1" "react-dom": "19.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
@@ -1,5 +1,18 @@
# test-edge-runtime # 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 ## 0.1.134
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/nextjs-edge-runtime-test", "name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.134", "version": "0.1.136",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -9,7 +9,7 @@
}, },
"dependencies": { "dependencies": {
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1" "react-dom": "^18.3.1"
}, },
@@ -1,5 +1,20 @@
# @llamaindex/next-node-runtime # @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 ## 0.1.1
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-node-runtime-test", "name": "@llamaindex/next-node-runtime-test",
"version": "0.1.1", "version": "0.1.3",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -11,9 +11,9 @@
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"@llamaindex/huggingface": "workspace:*", "@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*", "@llamaindex/readers": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"react": "18.3.1", "react": "19.0.0",
"react-dom": "18.3.1" "react-dom": "19.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
@@ -1,5 +1,18 @@
# vite-import-llamaindex # 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 ## 0.0.1
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "vite-import-llamaindex", "name": "vite-import-llamaindex",
"private": true, "private": true,
"version": "0.0.1", "version": "0.0.3",
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "vite build", "build": "vite build",
@@ -5,3 +5,4 @@ dist
.cache .cache
.DS_Store .DS_Store
*.pem *.pem
/src/pages.gen.ts
@@ -1,5 +1,18 @@
# @llamaindex/waku-query-engine-test # @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 ## 0.0.135
### Patch Changes ### Patch Changes
+5 -5
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/waku-query-engine-test", "name": "@llamaindex/waku-query-engine-test",
"version": "0.0.135", "version": "0.0.137",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -11,10 +11,10 @@
"dependencies": { "dependencies": {
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"react": "19.0.0-rc-5c56b873-20241107", "react": "19.0.0",
"react-dom": "19.0.0-rc-5c56b873-20241107", "react-dom": "19.0.0",
"react-server-dom-webpack": "19.0.0-rc-5c56b873-20241107", "react-server-dom-webpack": "19.0.0",
"waku": "0.21.6" "waku": "0.21.20"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "18.3.12", "@types/react": "18.3.12",
+43
View File
@@ -1,5 +1,48 @@
# examples # 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 ## 0.2.1
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -8,7 +8,7 @@ Settings.callbackManager.on("llm-tool-call", (event) => {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet", model: "claude-3-7-sonnet",
}); });
const agent = new AnthropicAgent({ const agent = new AnthropicAgent({
+2 -2
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => { (async () => {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus", model: "claude-3-7-sonnet",
}); });
const result = await anthropic.chat({ const result = await anthropic.chat({
messages: [ messages: [
@@ -15,5 +15,5 @@ import { Anthropic } from "@llamaindex/anthropic";
}, },
], ],
}); });
console.log(result); console.log(result.message.content);
})(); })();
+1 -1
View File
@@ -6,7 +6,7 @@ import readline from "node:readline/promises";
(async () => { (async () => {
const llm = new Anthropic({ const llm = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus", model: "claude-3-7-sonnet",
}); });
// chatHistory will store all the messages in the conversation // chatHistory will store all the messages in the conversation
const chatHistory = new ChatMemoryBuffer({ const chatHistory = new ChatMemoryBuffer({
+1 -1
View File
@@ -2,7 +2,7 @@ import { Anthropic } from "@llamaindex/anthropic";
async function main() { async function main() {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
model: "claude-3-5-sonnet-20241022", model: "claude-3-7-sonnet",
}); });
const entireBook = await fetch( const entireBook = await fetch(
+1 -1
View File
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
(async () => { (async () => {
const anthropic = new Anthropic({ const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY, apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-5-sonnet", model: "claude-3-7-sonnet",
}); });
const stream = await anthropic.chat({ const stream = await anthropic.chat({
messages: [ messages: [
+32
View File
@@ -0,0 +1,32 @@
import { Anthropic } from "@llamaindex/anthropic";
(async () => {
const anthropic = new Anthropic({
model: "claude-3-7-sonnet",
maxTokens: 20000,
additionalChatOptions: {
thinking: {
type: "enabled",
budget_tokens: 16000,
},
},
});
const result = await anthropic.chat({
messages: [
{
role: "user",
content:
"Are there an infinite number of prime numbers such that n mod 4 == 3?",
},
],
stream: true,
});
console.log("Thinking...");
for await (const chunk of result) {
if (chunk.delta) {
process.stdout.write(chunk.delta);
} else if (chunk.options?.thinking) {
process.stdout.write(chunk.options.thinking);
}
}
})();
+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", "name": "@llamaindex/examples",
"version": "0.2.1", "version": "0.2.2",
"private": true, "private": true,
"scripts": { "scripts": {
"lint": "eslint .", "lint": "eslint .",
@@ -11,36 +11,37 @@
"@azure/cosmos": "^4.1.1", "@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1", "@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0", "@azure/search-documents": "^12.1.0",
"@llamaindex/anthropic": "^0.1.1", "@llamaindex/anthropic": "^0.2.0",
"@llamaindex/astra": "^0.0.6", "@llamaindex/astra": "^0.0.7",
"@llamaindex/azure": "^0.1.1", "@llamaindex/azure": "^0.1.2",
"@llamaindex/chroma": "^0.0.6", "@llamaindex/chroma": "^0.0.7",
"@llamaindex/clip": "^0.0.37", "@llamaindex/clip": "^0.0.38",
"@llamaindex/cloud": "^3.0.1", "@llamaindex/cloud": "^3.0.3",
"@llamaindex/cohere": "^0.0.6", "@llamaindex/cohere": "^0.0.7",
"@llamaindex/core": "^0.5.1", "@llamaindex/core": "^0.5.2",
"@llamaindex/deepinfra": "^0.0.37", "@llamaindex/deepinfra": "^0.0.38",
"@llamaindex/env": "^0.1.28", "@llamaindex/env": "^0.1.28",
"@llamaindex/google": "^0.0.8", "@llamaindex/firestore": "^1.0.0",
"@llamaindex/groq": "^0.0.52", "@llamaindex/google": "^0.0.9",
"@llamaindex/huggingface": "^0.0.37", "@llamaindex/groq": "^0.0.53",
"@llamaindex/milvus": "^0.1.1", "@llamaindex/huggingface": "^0.0.38",
"@llamaindex/mistral": "^0.0.6", "@llamaindex/milvus": "^0.1.2",
"@llamaindex/mixedbread": "^0.0.6", "@llamaindex/mistral": "^0.0.7",
"@llamaindex/mongodb": "^0.0.6", "@llamaindex/mixedbread": "^0.0.7",
"@llamaindex/node-parser": "^1.0.1", "@llamaindex/mongodb": "^0.0.7",
"@llamaindex/ollama": "^0.0.41", "@llamaindex/node-parser": "^1.0.2",
"@llamaindex/openai": "^0.1.53", "@llamaindex/ollama": "^0.0.42",
"@llamaindex/pinecone": "^0.0.6", "@llamaindex/openai": "^0.1.54",
"@llamaindex/portkey-ai": "^0.0.34", "@llamaindex/pinecone": "^0.0.7",
"@llamaindex/postgres": "^0.0.34", "@llamaindex/portkey-ai": "^0.0.35",
"@llamaindex/qdrant": "^0.1.1", "@llamaindex/postgres": "^0.0.35",
"@llamaindex/readers": "^2.0.1", "@llamaindex/qdrant": "^0.1.2",
"@llamaindex/replicate": "^0.0.34", "@llamaindex/readers": "^2.0.2",
"@llamaindex/upstash": "^0.0.6", "@llamaindex/replicate": "^0.0.35",
"@llamaindex/vercel": "^0.0.12", "@llamaindex/upstash": "^0.0.7",
"@llamaindex/vllm": "^0.0.23", "@llamaindex/vercel": "^0.0.13",
"@llamaindex/weaviate": "^0.0.6", "@llamaindex/vllm": "^0.0.24",
"@llamaindex/weaviate": "^0.0.7",
"@llamaindex/workflow": "^0.0.11", "@llamaindex/workflow": "^0.0.11",
"@notionhq/client": "^2.2.15", "@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^4.0.0", "@pinecone-database/pinecone": "^4.0.0",
@@ -50,7 +51,7 @@
"commander": "^12.1.0", "commander": "^12.1.0",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14", "js-tiktoken": "^1.0.14",
"llamaindex": "^0.9.1", "llamaindex": "^0.9.3",
"mongodb": "6.7.0", "mongodb": "6.7.0",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"postgres": "^3.4.4", "postgres": "^3.4.4",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/autotool # @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 ## 6.0.1
### Patch Changes ### Patch Changes
@@ -1,5 +1,20 @@
# @llamaindex/autotool-01-node-example # @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 ## 0.0.82
### Patch Changes ### Patch Changes
@@ -13,5 +13,5 @@
"scripts": { "scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts" "start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
}, },
"version": "0.0.82" "version": "0.0.84"
} }
@@ -1,5 +1,20 @@
# @llamaindex/autotool-02-next-example # @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 ## 0.1.126
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/autotool-02-next-example", "name": "@llamaindex/autotool-02-next-example",
"private": true, "private": true,
"version": "0.1.126", "version": "0.1.128",
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
@@ -15,7 +15,7 @@
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"lucide-react": "^0.460.0", "lucide-react": "^0.460.0",
"next": "15.0.3", "next": "15.1.7",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-markdown": "^9.0.1", "react-markdown": "^9.0.1",
+2 -2
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git", "url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool" "directory": "packages/autotool"
}, },
"version": "6.0.1", "version": "6.0.3",
"description": "auto transpile your JS function to LLM Agent compatible", "description": "auto transpile your JS function to LLM Agent compatible",
"files": [ "files": [
"dist", "dist",
@@ -77,7 +77,7 @@
"@types/node": "^22.9.0", "@types/node": "^22.9.0",
"bunchee": "6.3.4", "bunchee": "6.3.4",
"llamaindex": "workspace:*", "llamaindex": "workspace:*",
"next": "15.0.3", "next": "15.1.7",
"rollup": "^4.28.1", "rollup": "^4.28.1",
"tsx": "^4.19.0", "tsx": "^4.19.0",
"typescript": "^5.7.2", "typescript": "^5.7.2",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/cloud # @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 ## 3.0.1
### Patch Changes ### 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", "name": "@llamaindex/cloud",
"version": "3.0.1", "version": "3.0.3",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+44
View File
@@ -4,6 +4,7 @@ import { fs, getEnv, path } from "@llamaindex/env";
import { import {
type Body_upload_file_api_v1_parsing_upload_post, type Body_upload_file_api_v1_parsing_upload_post,
type ParserLanguages, type ParserLanguages,
type ParsingMode,
getJobApiV1ParsingJobJobIdGet, getJobApiV1ParsingJobJobIdGet,
getJobImageResultApiV1ParsingJobJobIdResultImageNameGet, getJobImageResultApiV1ParsingJobJobIdResultImageNameGet,
getJobJsonResultApiV1ParsingJobJobIdResultJsonGet, getJobJsonResultApiV1ParsingJobJobIdResultJsonGet,
@@ -127,6 +128,26 @@ export class LlamaParseReader extends FileReader {
readonly #client: Client; readonly #client: Client;
output_tables_as_HTML: boolean = false;
input_s3_region?: string | undefined;
output_s3_region?: string | undefined;
preserve_layout_alignment_across_pages?: boolean | undefined;
spreadsheet_extract_sub_tables?: boolean | undefined;
formatting_instruction?: string | undefined;
parse_mode?: ParsingMode | undefined;
system_prompt?: string | undefined;
system_prompt_append?: string | undefined;
user_prompt?: string | undefined;
job_timeout_in_seconds?: number | undefined;
job_timeout_extra_time_per_page_in_seconds?: number | undefined;
strict_mode_image_extraction?: boolean | undefined;
strict_mode_image_ocr?: boolean | undefined;
strict_mode_reconstruction?: boolean | undefined;
strict_mode_buggy_font?: boolean | undefined;
ignore_document_elements_for_layout_detection?: boolean | undefined;
complemental_formatting_instruction?: string | undefined;
content_guideline_instruction?: string | undefined;
constructor( constructor(
params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & { params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & {
language?: ParserLanguages | ParserLanguages[] | undefined; language?: ParserLanguages | ParserLanguages[] | undefined;
@@ -252,6 +273,29 @@ export class LlamaParseReader extends FileReader {
structured_output_json_schema_name: structured_output_json_schema_name:
this.structured_output_json_schema_name, this.structured_output_json_schema_name,
extract_layout: this.extract_layout, extract_layout: this.extract_layout,
output_tables_as_HTML: this.output_tables_as_HTML,
input_s3_region: this.input_s3_region,
output_s3_region: this.output_s3_region,
preserve_layout_alignment_across_pages:
this.preserve_layout_alignment_across_pages,
spreadsheet_extract_sub_tables: this.spreadsheet_extract_sub_tables,
formatting_instruction: this.formatting_instruction,
parse_mode: this.parse_mode,
system_prompt: this.system_prompt,
system_prompt_append: this.system_prompt_append,
user_prompt: this.user_prompt,
job_timeout_in_seconds: this.job_timeout_in_seconds,
job_timeout_extra_time_per_page_in_seconds:
this.job_timeout_extra_time_per_page_in_seconds,
strict_mode_image_extraction: this.strict_mode_image_extraction,
strict_mode_image_ocr: this.strict_mode_image_ocr,
strict_mode_reconstruction: this.strict_mode_reconstruction,
strict_mode_buggy_font: this.strict_mode_buggy_font,
ignore_document_elements_for_layout_detection:
this.ignore_document_elements_for_layout_detection,
complemental_formatting_instruction:
this.complemental_formatting_instruction,
content_guideline_instruction: this.content_guideline_instruction,
} satisfies { } satisfies {
[Key in keyof Body_upload_file_api_v1_parsing_upload_post]-?: [Key in keyof Body_upload_file_api_v1_parsing_upload_post]-?:
| Body_upload_file_api_v1_parsing_upload_post[Key] | Body_upload_file_api_v1_parsing_upload_post[Key]
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/community # @llamaindex/community
## 0.0.84
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.83 ## 0.0.83
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/community", "name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS", "description": "Community package for LlamaIndexTS",
"version": "0.0.83", "version": "0.0.84",
"type": "module", "type": "module",
"types": "dist/type/index.d.ts", "types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js", "main": "dist/cjs/index.js",
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/core # @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 ## 0.5.1
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/core", "name": "@llamaindex/core",
"type": "module", "type": "module",
"version": "0.5.1", "version": "0.5.2",
"description": "LlamaIndex Core Module", "description": "LlamaIndex Core Module",
"exports": { "exports": {
"./agent": { "./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") { if (typeof response === "string") {
return EngineResponse.fromResponse(response, false, nodes); return EngineResponse.fromResponse(response, false, nodes);
} else { } else {
@@ -66,9 +66,9 @@ describe("ChatMemoryBuffer", () => {
expect(result).toEqual([...inputMessages, ...storedMessages]); expect(result).toEqual([...inputMessages, ...storedMessages]);
}); });
test("getMessages throws error when initial token count exceeds limit", () => { test("getMessages throws error when initial token count exceeds limit", async () => {
const buffer = new ChatMemoryBuffer({ tokenLimit: 10 }); const buffer = new ChatMemoryBuffer({ tokenLimit: 10 });
expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow( await expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
"Initial token count exceeds token limit", "Initial token count exceeds token limit",
); );
}); });
@@ -1,4 +1,4 @@
import { describe, expect, test, vi } from "vitest"; import { beforeEach, describe, expect, test, vi } from "vitest";
import type { LLMMetadata } from "../../llms/dist/index.js"; import type { LLMMetadata } from "../../llms/dist/index.js";
import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js"; import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js";
import { Document } from "../../schema/dist/index.js"; import { Document } from "../../schema/dist/index.js";
@@ -10,26 +10,69 @@ const mockLllm = () => ({
return response; return response;
} }
function* gen() { return {
// yield a few times to make sure each chunk has the sourceNodes [Symbol.asyncIterator]: function* gen() {
yield response; // yield a few times to make sure each chunk has the sourceNodes
yield response; yield response;
yield response; yield response;
} yield response;
},
return gen(); };
}), }),
chat: vi.fn(), chat: vi.fn(),
metadata: {} as unknown as LLMMetadata, metadata: {} as unknown as LLMMetadata,
}); });
describe("refine response synthesizer", () => {
let synthesizer: ReturnType<typeof getResponseSynthesizer<"refine">>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const isAsyncIterable = (obj: any): boolean =>
obj[Symbol.asyncIterator] !== undefined;
beforeEach(() => {
synthesizer = getResponseSynthesizer("refine", {
llm: mockLllm(),
});
});
describe("getResponse", () => {
test("should return async iterable of EngineResponse when stream is true and sourceNodes are empty", async () => {
const response = await synthesizer.getResponse(
"unimportant query",
[],
true,
);
expect(isAsyncIterable(response)).toBe(true);
for await (const chunk of response) {
expect(chunk.message.content).toEqual("");
}
});
test("should return non async iterable when stream is false and sourceNodes are empty", async () => {
const response = await synthesizer.getResponse(
"unimportant query",
[],
false,
);
expect(isAsyncIterable(response)).toBe(false);
expect(response.message.content).toEqual("");
});
});
});
describe("compact and refine response synthesizer", () => { describe("compact and refine response synthesizer", () => {
let synthesizer: ReturnType<typeof getResponseSynthesizer<"compact">>;
beforeEach(() => {
synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
});
describe("synthesize", () => { describe("synthesize", () => {
test("should return original sourceNodes with response when stream = false", async () => { test("should return original sourceNodes with response when stream = false", async () => {
const synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
const sourceNode = { node: new Document({}), score: 1 }; const sourceNode = { node: new Document({}), score: 1 };
const response = await synthesizer.synthesize( const response = await synthesizer.synthesize(
@@ -44,10 +87,6 @@ describe("compact and refine response synthesizer", () => {
}); });
test("should return original sourceNodes with response when stream = true", async () => { test("should return original sourceNodes with response when stream = true", async () => {
const synthesizer = getResponseSynthesizer("compact", {
llm: mockLllm(),
});
const sourceNode = { node: new Document({}), score: 1 }; const sourceNode = { node: new Document({}), score: 1 };
const response = await synthesizer.synthesize( const response = await synthesizer.synthesize(
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/experimental # @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 ## 0.0.151
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/experimental", "name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS", "description": "Experimental package for LlamaIndexTS",
"version": "0.0.151", "version": "0.0.153",
"type": "module", "type": "module",
"types": "dist/type/index.d.ts", "types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js", "main": "dist/cjs/index.js",
+18
View File
@@ -1,5 +1,23 @@
# llamaindex # 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 ## 0.9.1
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "llamaindex", "name": "llamaindex",
"version": "0.9.1", "version": "0.9.3",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"keywords": [ "keywords": [
+5
View File
@@ -31,6 +31,11 @@ export function initService({ apiKey, baseUrl }: ClientParams = {}) {
request.headers.set("Authorization", `Bearer ${token}`); request.headers.set("Authorization", `Bearer ${token}`);
return request; return request;
}); });
client.interceptors.error.use((error) => {
throw new Error(
`LlamaCloud API request failed. Error details: ${JSON.stringify(error)}`,
);
});
if (!token) { if (!token) {
throw new Error( throw new Error(
"API Key is required for LlamaCloudIndex. Please pass the apiKey parameter", "API Key is required for LlamaCloudIndex. Please pass the apiKey parameter",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/node-parser # @llamaindex/node-parser
## 1.0.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 1.0.1 ## 1.0.1
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/node-parser", "name": "@llamaindex/node-parser",
"version": "1.0.1", "version": "1.0.2",
"description": "Node parser for LlamaIndex", "description": "Node parser for LlamaIndex",
"type": "module", "type": "module",
"exports": { "exports": {
+19
View File
@@ -1,5 +1,24 @@
# @llamaindex/anthropic # @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 ## 0.1.1
### Patch Changes ### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/anthropic", "name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex", "description": "Anthropic Adapter for LlamaIndex",
"version": "0.1.1", "version": "0.2.0",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -35,7 +35,7 @@
"vitest": "^2.1.5" "vitest": "^2.1.5"
}, },
"dependencies": { "dependencies": {
"@anthropic-ai/sdk": "0.32.1", "@anthropic-ai/sdk": "0.37.0",
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"remeda": "^2.17.3" "remeda": "^2.17.3"
+82 -53
View File
@@ -6,6 +6,8 @@ import type {
} from "@anthropic-ai/sdk/resources/beta/index"; } from "@anthropic-ai/sdk/resources/beta/index";
import type { TextBlock } from "@anthropic-ai/sdk/resources/index"; import type { TextBlock } from "@anthropic-ai/sdk/resources/index";
import type { import type {
MessageCreateParams,
MessageCreateParamsBase,
MessageParam, MessageParam,
Model, Model,
Tool, Tool,
@@ -102,10 +104,17 @@ export const ALL_AVAILABLE_V3_5_MODELS = {
"claude-3-5-haiku-20241022": { contextWindow: 200000 }, "claude-3-5-haiku-20241022": { contextWindow: 200000 },
}; };
export const ALL_AVAILABLE_V3_7_MODELS = {
"claude-3-7-sonnet": { contextWindow: 200000 },
"claude-3-7-sonnet-20250219": { contextWindow: 200000 },
"claude-3-7-sonnet-latest": { contextWindow: 200000 },
};
export const ALL_AVAILABLE_ANTHROPIC_MODELS = { export const ALL_AVAILABLE_ANTHROPIC_MODELS = {
...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS, ...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS,
...ALL_AVAILABLE_V3_MODELS, ...ALL_AVAILABLE_V3_MODELS,
...ALL_AVAILABLE_V3_5_MODELS, ...ALL_AVAILABLE_V3_5_MODELS,
...ALL_AVAILABLE_V3_7_MODELS,
} satisfies { } satisfies {
[key in Model]: { contextWindow: number }; [key in Model]: { contextWindow: number };
}; };
@@ -115,11 +124,16 @@ const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
"claude-3-sonnet": "claude-3-sonnet-20240229", "claude-3-sonnet": "claude-3-sonnet-20240229",
"claude-3-haiku": "claude-3-haiku-20240307", "claude-3-haiku": "claude-3-haiku-20240307",
"claude-3-5-sonnet": "claude-3-5-sonnet-20240620", "claude-3-5-sonnet": "claude-3-5-sonnet-20240620",
"claude-3-7-sonnet": "claude-3-7-sonnet-20250219",
} as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string }; } as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string };
export type AnthropicAdditionalChatOptions = object; export type AnthropicAdditionalChatOptions = Pick<
MessageCreateParamsBase,
"thinking"
>;
export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & { export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
cache_control?: BetaCacheControlEphemeral | null; cache_control?: BetaCacheControlEphemeral | null;
thinking?: string | undefined;
}; };
export class Anthropic extends ToolCallLLM< export class Anthropic extends ToolCallLLM<
@@ -129,8 +143,9 @@ export class Anthropic extends ToolCallLLM<
// Per completion Anthropic params // Per completion Anthropic params
model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string); model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string);
temperature: number; temperature: number;
topP: number; topP?: number | undefined;
maxTokens?: number | undefined; maxTokens?: number | undefined;
additionalChatOptions?: AnthropicAdditionalChatOptions | undefined;
// Anthropic session params // Anthropic session params
apiKey?: string | undefined; apiKey?: string | undefined;
@@ -141,13 +156,14 @@ export class Anthropic extends ToolCallLLM<
constructor(init?: Partial<Anthropic>) { constructor(init?: Partial<Anthropic>) {
super(); super();
this.model = init?.model ?? "claude-3-opus"; this.model = init?.model ?? "claude-3-opus";
this.temperature = init?.temperature ?? 0.1; this.temperature = init?.temperature ?? 1; // default in anthropic is 1
this.topP = init?.topP ?? 0.999; // Per Ben Mann this.topP = init?.topP;
this.maxTokens = init?.maxTokens ?? undefined; this.maxTokens = init?.maxTokens ?? undefined;
this.apiKey = init?.apiKey ?? undefined; this.apiKey = init?.apiKey ?? undefined;
this.maxRetries = init?.maxRetries ?? 10; this.maxRetries = init?.maxRetries ?? 10;
this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds
this.additionalChatOptions = init?.additionalChatOptions;
this.session = this.session =
init?.session ?? init?.session ??
getAnthropicSession({ getAnthropicSession({
@@ -165,7 +181,7 @@ export class Anthropic extends ToolCallLLM<
return { return {
model: this.model, model: this.model,
temperature: this.temperature, temperature: this.temperature,
topP: this.topP, topP: this.topP ?? 0, // XXX: topP needs to be returned but might be undefined for Anthropic
maxTokens: this.maxTokens, maxTokens: this.maxTokens,
contextWindow: contextWindow:
this.model in ALL_AVAILABLE_ANTHROPIC_MODELS this.model in ALL_AVAILABLE_ANTHROPIC_MODELS
@@ -207,23 +223,26 @@ export class Anthropic extends ToolCallLLM<
} }
if ("toolCall" in options) { if ("toolCall" in options) {
const formattedMessage: MessageParam = { const text = extractText(message.content);
role: "assistant",
content: [
{
type: "text" as const,
text: extractText(message.content),
},
...options.toolCall.map((tool) => ({
type: "tool_use" as const,
id: tool.id,
name: tool.name,
input: this.parseToolInput(tool.input),
})),
],
};
return formattedMessage; const content: MessageParam["content"] = [];
if (text && text.trim().length > 0) {
// don't add empty text blocks
content.push({
type: "text" as const,
text: text,
});
}
content.push(
...options.toolCall.map((tool) => ({
type: "tool_use" as const,
id: tool.id,
name: tool.name,
input: this.parseToolInput(tool.input),
})),
);
return { role: "assistant", content } satisfies MessageParam;
} }
// Handle tool results // Handle tool results
@@ -362,8 +381,14 @@ export class Anthropic extends ToolCallLLM<
@wrapLLMEvent @wrapLLMEvent
async chat( async chat(
params: params:
| LLMChatParamsNonStreaming<AnthropicToolCallLLMMessageOptions> | LLMChatParamsNonStreaming<
| LLMChatParamsStreaming<AnthropicToolCallLLMMessageOptions>, AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
>
| LLMChatParamsStreaming<
AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
>,
): Promise< ): Promise<
| ChatResponse<AnthropicToolCallLLMMessageOptions> | ChatResponse<AnthropicToolCallLLMMessageOptions>
| AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> | AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
@@ -404,28 +429,29 @@ export class Anthropic extends ToolCallLLM<
anthropic = anthropic.beta.promptCaching; anthropic = anthropic.beta.promptCaching;
} }
if (stream) { const apiParams: MessageCreateParams = {
if (tools) {
console.error("Tools are not supported in streaming mode");
}
return this.streamChat(
messages.filter((m) => m.role !== "system"),
systemPrompt,
anthropic,
);
}
const apiParams = {
model: this.getModelName(this.model), model: this.getModelName(this.model),
messages: this.mergeConsecutiveMessages( messages: this.mergeConsecutiveMessages(
this.formatMessages(messages.filter((m) => m.role !== "system")), this.formatMessages(messages.filter((m) => m.role !== "system")),
), ),
max_tokens: this.maxTokens ?? 4096, max_tokens: this.maxTokens ?? 4096,
temperature: this.temperature, temperature: this.temperature,
top_p: this.topP, ...(this.topP ? { top_p: this.topP } : {}),
...(systemPrompt && { system: systemPrompt }), ...(systemPrompt && { system: systemPrompt }),
...Object.assign(
{},
this.additionalChatOptions,
params.additionalChatOptions,
),
}; };
if (stream) {
if (tools) {
console.error("Tools are not supported in streaming mode");
}
return this.streamChat(anthropic, apiParams);
}
if (tools?.length) { if (tools?.length) {
Object.assign(apiParams, { Object.assign(apiParams, {
tools: this.prepareToolsForAPI(tools), tools: this.prepareToolsForAPI(tools),
@@ -442,7 +468,10 @@ export class Anthropic extends ToolCallLLM<
raw: response, raw: response,
message: { message: {
content: response.content content: response.content
.filter((content): content is TextBlock => content.type === "text") .filter(
(content): content is TextBlock =>
content.type === "text" && content.text?.trim().length > 0,
)
.map((content) => ({ .map((content) => ({
type: "text" as const, type: "text" as const,
text: content.text, text: content.text,
@@ -466,36 +495,36 @@ export class Anthropic extends ToolCallLLM<
} }
protected async *streamChat( protected async *streamChat(
messages: ChatMessage<AnthropicToolCallLLMMessageOptions>[],
systemPrompt: string | Array<BetaTextBlockParam> | null,
anthropic: SDKAnthropic, anthropic: SDKAnthropic,
params: MessageCreateParams,
): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> { ): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> {
const stream = await anthropic.messages.create({ const stream = await anthropic.messages.create({
model: this.getModelName(this.model), ...params,
messages: this.formatMessages(messages),
max_tokens: this.maxTokens ?? 4096,
temperature: this.temperature,
top_p: this.topP,
stream: true, stream: true,
...(systemPrompt && { system: systemPrompt }),
}); });
let idx_counter: number = 0; let idx_counter: number = 0;
for await (const part of stream) { for await (const part of stream) {
const content = const textContent =
part.type === "content_block_delta" part.type === "content_block_delta" && part.delta.type === "text_delta"
? part.delta.type === "text_delta" ? part.delta.text
? part.delta.text
: part.delta
: undefined; : undefined;
if (typeof content !== "string") continue; const thinking =
part.type === "content_block_delta" &&
part.delta.type === "thinking_delta"
? part.delta.thinking
: undefined;
if (!textContent && !thinking) continue;
idx_counter++; idx_counter++;
yield { yield {
raw: part, raw: part,
delta: content, delta: textContent ?? "",
options: {}, options: {
thinking: thinking,
},
}; };
} }
return; return;
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/clip # @llamaindex/clip
## 0.0.38
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/openai@0.1.54
## 0.0.37 ## 0.0.37
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/clip", "name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex", "description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.37", "version": "0.0.38",
"type": "module", "type": "module",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"main": "dist/index.cjs", "main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/cohere # @llamaindex/cohere
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/cohere", "name": "@llamaindex/cohere",
"description": "Cohere Adapter for LlamaIndex", "description": "Cohere Adapter for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/deepinfra # @llamaindex/deepinfra
## 0.0.38
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/openai@0.1.54
## 0.0.37 ## 0.0.37
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/deepinfra", "name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex", "description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.37", "version": "0.0.38",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/google # @llamaindex/google
## 0.0.9
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.8 ## 0.0.8
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/google", "name": "@llamaindex/google",
"description": "Google Adapter for LlamaIndex", "description": "Google Adapter for LlamaIndex",
"version": "0.0.8", "version": "0.0.9",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/groq # @llamaindex/groq
## 0.0.53
### Patch Changes
- @llamaindex/openai@0.1.54
## 0.0.52 ## 0.0.52
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/groq", "name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex", "description": "Groq Adapter for LlamaIndex",
"version": "0.0.52", "version": "0.0.53",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/huggingface # @llamaindex/huggingface
## 0.0.38
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
- @llamaindex/openai@0.1.54
## 0.0.37 ## 0.0.37
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/huggingface", "name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex", "description": "Huggingface Adapter for LlamaIndex",
"version": "0.0.37", "version": "0.0.38",
"type": "module", "type": "module",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"main": "dist/index.cjs", "main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/mistral # @llamaindex/mistral
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/mistral", "name": "@llamaindex/mistral",
"description": "Mistral Adapter for LlamaIndex", "description": "Mistral Adapter for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/mixedbread # @llamaindex/mixedbread
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/mixedbread", "name": "@llamaindex/mixedbread",
"description": "Mixedbread Adapter for LlamaIndex", "description": "Mixedbread Adapter for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/ollama # @llamaindex/ollama
## 0.0.42
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.41 ## 0.0.41
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/ollama", "name": "@llamaindex/ollama",
"description": "Ollama Adapter for LlamaIndex", "description": "Ollama Adapter for LlamaIndex",
"version": "0.0.41", "version": "0.0.42",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/openai # @llamaindex/openai
## 0.1.54
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.53 ## 0.1.53
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/openai", "name": "@llamaindex/openai",
"description": "OpenAI Adapter for LlamaIndex", "description": "OpenAI Adapter for LlamaIndex",
"version": "0.1.53", "version": "0.1.54",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/portkey-ai # @llamaindex/portkey-ai
## 0.0.35
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.34 ## 0.0.34
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/portkey-ai", "name": "@llamaindex/portkey-ai",
"description": "Portkey Adapter for LlamaIndex", "description": "Portkey Adapter for LlamaIndex",
"version": "0.0.34", "version": "0.0.35",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/replicate # @llamaindex/replicate
## 0.0.35
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.34 ## 0.0.34
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/replicate", "name": "@llamaindex/replicate",
"description": "Replicate Adapter for LlamaIndex", "description": "Replicate Adapter for LlamaIndex",
"version": "0.0.34", "version": "0.0.35",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/astra # @llamaindex/astra
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/astra", "name": "@llamaindex/astra",
"description": "Astra Storage for LlamaIndex", "description": "Astra Storage for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/azure # @llamaindex/azure
## 0.1.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.1 ## 0.1.1
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/azure", "name": "@llamaindex/azure",
"description": "Azure Storage for LlamaIndex", "description": "Azure Storage for LlamaIndex",
"version": "0.1.1", "version": "0.1.2",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/chroma # @llamaindex/chroma
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/chroma", "name": "@llamaindex/chroma",
"description": "Chroma Storage for LlamaIndex", "description": "Chroma Storage for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "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 # @llamaindex/milvus
## 0.1.2
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.1.1 ## 0.1.1
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/milvus", "name": "@llamaindex/milvus",
"description": "Milvus Storage for LlamaIndex", "description": "Milvus Storage for LlamaIndex",
"version": "0.1.1", "version": "0.1.2",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/mongodb # @llamaindex/mongodb
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/mongodb", "name": "@llamaindex/mongodb",
"description": "MongoDB Storage for LlamaIndex", "description": "MongoDB Storage for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/pinecone # @llamaindex/pinecone
## 0.0.7
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.6 ## 0.0.6
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/pinecone", "name": "@llamaindex/pinecone",
"description": "Pinecone Storage for LlamaIndex", "description": "Pinecone Storage for LlamaIndex",
"version": "0.0.6", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,12 @@
# @llamaindex/postgres # @llamaindex/postgres
## 0.0.35
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 0.0.34 ## 0.0.34
### Patch Changes ### Patch Changes

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