mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-01 22:14:03 -04:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b0f55f1ea | |||
| a9c6144eec | |||
| 3564244ced | |||
| d952e68ec4 | |||
| 5c026e839f | |||
| 9c1c5b4d50 | |||
| c902fcbc33 | |||
| 88d776f392 | |||
| 6fcc6bcb84 | |||
| be74207945 | |||
| 6be223dfad | |||
| 4cbfdb5f5c |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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);
|
||||
})();
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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: [
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
})();
|
||||
@@ -0,0 +1,4 @@
|
||||
GCP_PROJECT_ID=
|
||||
GCP_CREDENTIALS=
|
||||
FIRESTORE_DB=
|
||||
OPENAI_API_KEY=
|
||||
@@ -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`
|
||||
@@ -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();
|
||||
@@ -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();
|
||||
@@ -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
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "3.0.1",
|
||||
"version": "3.0.3",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,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(
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
{
|
||||
"name": "llamaindex",
|
||||
"version": "0.9.1",
|
||||
"version": "0.9.3",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"keywords": [
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/node-parser",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "Node parser for LlamaIndex",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,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,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",
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @llamaindex/groq
|
||||
|
||||
## 0.0.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/openai@0.1.54
|
||||
|
||||
## 0.0.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,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,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",
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,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,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,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
Reference in New Issue
Block a user